From 91a7cf94b2266b5f942378c68e1251ff31438db0 Mon Sep 17 00:00:00 2001 From: Austin Schaffer Date: Tue, 12 Nov 2019 13:24:41 -0500 Subject: [DEV-5312] Add dao for deltas --- test/server/db/MongoDeltaDaoTest.ts | 168 ++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 test/server/db/MongoDeltaDaoTest.ts (limited to 'test/server/db/MongoDeltaDaoTest.ts') diff --git a/test/server/db/MongoDeltaDaoTest.ts b/test/server/db/MongoDeltaDaoTest.ts new file mode 100644 index 0000000..c3d0711 --- /dev/null +++ b/test/server/db/MongoDeltaDaoTest.ts @@ -0,0 +1,168 @@ +/** + * Token state management test + * + * Copyright (C) 2010-2019 R-T Specialty, LLC. + * + * This file is part of the Liza Data Collection Framework. + * + * liza is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { MongoDeltaDao as Sut } from "../../../src/server/db/MongoDeltaDao"; +import { MongoCollection } from "mongodb"; +import { PositiveInteger } from "../../../src/numeric"; +import { DocumentId } from "../../../src/document/Document"; + +import { expect, use as chai_use } from 'chai'; +chai_use( require( 'chai-as-promised' ) ); + + +describe( 'server.db.MongoDeltaDao', () => +{ + describe( '#getUnprocessedDocuments', () => + { + it( 'gets documents', () => + { + let returned_data = { foo: 'bar' }; + let callback_called = false; + + const collection = _createMockMongoCollection(); + collection.find = ( _: any, __: any, c: any ) => + { + c( null, { + toArray: ( c: any ) => c( null, returned_data ), + } ); + }; + + const callback = ( data: Record | null ) => + { + expect( returned_data ).to.deep.equal( data ); + + callback_called = true; + + return; + }; + + new Sut( collection ).getUnprocessedDocuments( callback ); + + expect( callback_called ).to.equal( true ); + }); + }); + + describe( '#advanceDeltaIndexByType', () => + { + it( 'advances specified index', () => + { + const quote_id = 123, + delta_type = 'ratedata', + expected_field = 'lastPublishDelta.ratedata', + index = 1; + + let callback_called = false; + + const collection = _createMockMongoCollection(); + collection.update = ( + given_quote_id: any, + given_delta_type: any, + _given_index: any, + given_callback: any + ) => + { + const expected_set: Record = {}; + + expected_set[ expected_field ] = index + + expect( given_quote_id ).to.deep.equal( { id: quote_id } ); + expect( given_delta_type ) + .to.deep.equal( { $set: expected_set } ); + + given_callback( null ); + }; + + const callback = ( _err: NullableError, _indexAdvanced: boolean ) => + { + callback_called = true; + + return; + }; + + new Sut( collection ).advanceDeltaIndexByType( + quote_id, + delta_type, + index, + callback, + ); + + expect( callback_called ).to.equal( true ); + }); + }); + + describe( '#markDocumentAsProcessed', () => + { + it( 'doc marked if provided timestamp <= doc timestamp', () => + { + const quote_id = 123, + last_update_ts = 1573582767; + + let callback_called = false; + + const collection = _createMockMongoCollection(); + collection.update = ( + given_filter: any, + _: any, + __: any, + given_callback: any + ) => + { + const expected_filter: Record = { + id: quote_id, + lastUpdate: { $gt: last_update_ts } + }; + + expect( given_filter ).to.deep.equal( expected_filter ); + + given_callback( null ); + }; + + const callback = ( _err: NullableError, _indexAdvanced: boolean ) => + { + callback_called = true; + + return; + }; + + new Sut( collection ).markDocumentAsProcessed( + quote_id, + last_update_ts, + callback, + ); + + expect( callback_called ).to.equal( true ); + }); + }); + +} ); + + +function _createMockMongoCollection(): MongoCollection +{ + return { + findOne() {}, + update() {}, + findAndModify() {}, + find() {}, + createIndex() {}, + insert() {}, + }; +} -- cgit v1.2.1