@arturwojnar/hermes-mongodb
Version:
Production-Ready TypeScript Outbox Pattern for MongoDB
81 lines • 3.95 kB
JavaScript
import { NotSupportedMongoVersionError } from '@arturwojnar/hermes';
import { describe, expect, it, jest } from '@jest/globals';
import { generateVersionPolicies } from './versionPolicies.js';
describe('generateVersionPolicies', () => {
const mockBuildInfo = (version) => ({
version,
gitVersion: 'mock',
sysInfo: 'mock',
loaderFlags: 'mock',
compilerFlags: 'mock',
allocator: 'mock',
versionArray: [],
openssl: {},
javascriptEngine: 'mock',
bits: 64,
debug: false,
maxBsonObjectSize: 16777216,
storageEngines: [],
ok: 1,
});
const mockDb = (version) => ({
admin: () => ({
buildInfo: jest.fn().mockResolvedValue(mockBuildInfo(version)),
}),
});
describe('supportedVersionCheckPolicy', () => {
it('should throw NotSupportedMongoVersionError for version 4.x.x', async () => {
const db = mockDb('4.4.0');
const policies = await generateVersionPolicies(db);
expect(() => policies.supportedVersionCheckPolicy()).toThrow(NotSupportedMongoVersionError);
});
it('should work for 5.x.x', async () => {
const db = mockDb('5.0.1');
const policies = await generateVersionPolicies(db);
expect(() => policies.supportedVersionCheckPolicy()).not.toThrow(NotSupportedMongoVersionError);
});
it('should work for 6.x.x', async () => {
const db = mockDb('6.0.1');
const policies = await generateVersionPolicies(db);
expect(() => policies.supportedVersionCheckPolicy()).not.toThrow(NotSupportedMongoVersionError);
});
it('should work for 7.x.x', async () => {
const db = mockDb('7.0.1');
const policies = await generateVersionPolicies(db);
expect(() => policies.supportedVersionCheckPolicy()).not.toThrow(NotSupportedMongoVersionError);
});
it('should work for 8.x.x-rc.x', async () => {
const db = mockDb('8.0.0-rc.18');
const policies = await generateVersionPolicies(db);
expect(() => policies.supportedVersionCheckPolicy()).not.toThrow(NotSupportedMongoVersionError);
});
});
describe('changeStreamFullDocumentValuePolicy', () => {
it('should throw NotSupportedMongoVersionError for version 4.x.x', async () => {
const db = mockDb('4.4.0');
const policies = await generateVersionPolicies(db);
expect(() => policies.changeStreamFullDocumentValuePolicy()).toThrow(NotSupportedMongoVersionError);
});
it('change stream full document option should be `updateLookup` for 5.x.x', async () => {
const db = mockDb('5.0.1');
const policies = await generateVersionPolicies(db);
expect(policies.changeStreamFullDocumentValuePolicy()).toBe('updateLookup');
});
it('change stream full document option should be `whenAvailable` for 6.x.x', async () => {
const db = mockDb('6.0.1');
const policies = await generateVersionPolicies(db);
expect(policies.changeStreamFullDocumentValuePolicy()).toBe('whenAvailable');
});
it('change stream full document option should be `whenAvailable` for 7.x.x', async () => {
const db = mockDb('7.0.1');
const policies = await generateVersionPolicies(db);
expect(policies.changeStreamFullDocumentValuePolicy()).toBe('whenAvailable');
});
it('change stream full document option should be `whenAvailable` for 8.x.x-rc.x', async () => {
const db = mockDb('8.0.0-rc.18');
const policies = await generateVersionPolicies(db);
expect(policies.changeStreamFullDocumentValuePolicy()).toBe('whenAvailable');
});
});
});
//# sourceMappingURL=versionPolicies.test.js.map