Skip to content

Commit f934f64

Browse files
Refactor tests to align with #3144
1 parent 83cd183 commit f934f64

File tree

2 files changed

+47
-13
lines changed

2 files changed

+47
-13
lines changed

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ export {
6262
MongoServerError,
6363
MongoServerSelectionError,
6464
MongoSystemError,
65+
MongoTailableCursorError,
6566
MongoTopologyClosedError,
6667
MongoTransactionError,
6768
MongoWriteConcernError

test/unit/error.test.ts

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,53 @@ import {
1414
MongoSystemError,
1515
NODE_IS_RECOVERING_ERROR_MESSAGE
1616
} from '../../src/error';
17+
import * as importsFromErrorSrc from '../../src/error';
1718
import {
1819
MongoError,
1920
MongoNetworkError,
2021
MongoParseError,
2122
MongoServerError,
22-
MongoWriteConcernError
23+
MongoWriteConcernError,
24+
TopologyDescription
2325
} from '../../src/index';
24-
import * as EverythingFromDriver from '../../src/index';
26+
import * as importsFromEntryPoint from '../../src/index';
2527
import { Topology } from '../../src/sdam/topology';
26-
import { isHello, ns } from '../../src/utils';
28+
import { isHello, ns, setDifference } from '../../src/utils';
2729
import { ReplSetFixture } from '../tools/common';
2830
import { cleanup } from '../tools/mongodb-mock/index';
2931
import { getSymbolFrom } from '../tools/utils';
3032

3133
describe('MongoErrors', () => {
32-
let errorClasses = Object.fromEntries(
33-
Object.entries(EverythingFromDriver).filter(([key]) => key.endsWith('Error'))
34+
let errorClassesFromEntryPoint = Object.fromEntries(
35+
Object.entries(importsFromEntryPoint).filter(
36+
([key, value]) => key.endsWith('Error') && value.toString().startsWith('class')
37+
)
3438
) as any;
35-
errorClasses = { ...errorClasses, MongoPoolClosedError, MongoWaitQueueTimeoutError };
39+
errorClassesFromEntryPoint = {
40+
...errorClassesFromEntryPoint,
41+
MongoPoolClosedError,
42+
MongoWaitQueueTimeoutError
43+
};
44+
45+
const errorClassesFromErrorSrc = Object.fromEntries(
46+
Object.entries(importsFromErrorSrc).filter(
47+
([key, value]) => key.endsWith('Error') && value.toString().startsWith('class')
48+
)
49+
);
50+
51+
it('all defined errors should be public', () => {
52+
expect(
53+
setDifference(Object.keys(errorClassesFromEntryPoint), Object.keys(errorClassesFromErrorSrc))
54+
).to.have.property('size', 3);
55+
56+
expect(
57+
setDifference(Object.keys(errorClassesFromErrorSrc), Object.keys(errorClassesFromEntryPoint))
58+
).to.have.property('size', 0);
59+
});
3660

37-
for (const [errorName, errorClass] of Object.entries(errorClasses)) {
38-
describe(errorName, () => {
39-
it(`name should be read-only`, () => {
61+
describe('error names should be read-only', () => {
62+
for (const [errorName, errorClass] of Object.entries(errorClassesFromEntryPoint)) {
63+
it(`${errorName} should be read-only`, () => {
4064
// Dynamically create error class with message
4165
const error = new (errorClass as any)('generated by test', {});
4266
// expect name property to be class name
@@ -48,8 +72,8 @@ describe('MongoErrors', () => {
4872
} catch (err) {}
4973
expect(error).to.have.property('name', errorName);
5074
});
51-
});
52-
}
75+
}
76+
});
5377

5478
describe('MongoError#constructor', () => {
5579
it('should accept a string', function () {
@@ -98,7 +122,7 @@ describe('MongoErrors', () => {
98122
error: {
99123
code: 123
100124
}
101-
} as any as EverythingFromDriver.TopologyDescription;
125+
} as any as TopologyDescription;
102126

103127
const error = new MongoSystemError('something went wrong', topologyDescription);
104128
expect(error).to.haveOwnProperty('code', 123);
@@ -107,7 +131,16 @@ describe('MongoErrors', () => {
107131

108132
context('when the topology description does not contain a code', () => {
109133
it('contains the code as a top level property', () => {
110-
const topologyDescription = {} as any as EverythingFromDriver.TopologyDescription;
134+
const topologyDescription = { error: {} } as any as TopologyDescription;
135+
136+
const error = new MongoSystemError('something went wrong', topologyDescription);
137+
expect(error).to.haveOwnProperty('code', undefined);
138+
});
139+
});
140+
141+
context('when the topology description does not contain an error property', () => {
142+
it('contains the code as a top level property', () => {
143+
const topologyDescription = {} as any as TopologyDescription;
111144

112145
const error = new MongoSystemError('something went wrong', topologyDescription);
113146
expect(error).to.haveOwnProperty('code', undefined);

0 commit comments

Comments
 (0)