UNPKG

@360-l/mongo-bulk-data-migration

Version:
62 lines (61 loc) 2.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.setGlobalExpect = setGlobalExpect; exports.doRollbackAndAssertForInitialState = doRollbackAndAssertForInitialState; const lodash_1 = __importDefault(require("lodash")); let globalExpect = null; function setGlobalExpect(expect) { globalExpect = expect; } async function doRollbackAndAssertForInitialState(dataMigration, initialDocuments, { expect = globalExpect, expectedRollbackStatus = {}, } = { expect: globalExpect, expectedRollbackStatus: {} }) { const { collectionName, migrationInfos } = dataMigration.getInfos(); const rollbackStatus = await dataMigration.rollback(); const documentsAfterRollback = await migrationInfos.db .collection(collectionName) .find({}) .toArray(); assertDeepHaveMembers(expect, JSON.parse(JSON.stringify(documentsAfterRollback)), JSON.parse(JSON.stringify(initialDocuments))); const expectedPartialRollback = lodash_1.default.pick(rollbackStatus, Object.keys(expectedRollbackStatus)); assertDeepEquals(expect, expectedPartialRollback, expectedRollbackStatus); const rollbackStatus2 = await dataMigration.rollback(); const expectedRollbackProps = lodash_1.default.pick(rollbackStatus2, [ 'nModified', 'nMatched', ]); assertDeepEquals(expect, expectedRollbackProps, { nModified: 0, nMatched: 0, }); } function assertDeepHaveMembers(expect, effectiveDocs, expectedDocs) { const compareObjectId = (objA, objB) => { const sortedIds = [objA, objB].sort(); return sortedIds[0] === objA ? -1 : 1; }; const sortedEffectiveDocs = lodash_1.default.clone(effectiveDocs).sort((docA, docB) => compareObjectId(docA._id.toString(), docB._id.toString())); const sortedExpectedDocs = lodash_1.default.clone(expectedDocs).sort((docA, docB) => compareObjectId(docA._id.toString(), docB._id.toString())); return assertDeepEquals(expect, sortedEffectiveDocs, sortedExpectedDocs); } function assertDeepEquals(expect, input, expected) { const jestOrChai = assertAndGetChaiOrChai(expect); if (jestOrChai === 'jest') { expect(input).toEqual(expected); } else { expect(input).to.deep.equal(expected); } } function assertAndGetChaiOrChai(expect) { if (expect === null) { throw new Error('MongoBulkDataMigration error: expect lib is not set, use setGlobalExpect once in a global pre test hook, or specify it alongside doRollbackAndAssertForInitialState'); } const isJest = !!expect.anything; const isChai = !!expect.fail; if (!isJest && !isChai) { throw new Error('MongoBulkDataMigration error: expect lib does not look to be Jest or Chai supported libs'); } return isJest ? 'jest' : 'chai'; }