UNPKG

cloudrx

Version:

TypeScript library for streaming cloud provider events using RxJS with automatic persistence and replay capabilities

121 lines 6.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const rxjs_1 = require("rxjs"); const local_1 = require("../../providers/aws/dynamodb/local"); const _operators_1 = require("@operators"); const _providers_1 = require("@providers"); const setup_1 = require("../../setup"); describe('persist', () => { describe('hot', () => { const run = async (operator) => { const data1 = { message: 'data-1', timestamp: performance.now() }; const data2 = { message: 'data-2', timestamp: performance.now() }; const data3 = { message: 'data-3', timestamp: performance.now() }; const producer = new rxjs_1.Subject(); const observable = producer.pipe(operator); let producedEventsP; let producedEvents; producedEventsP = (0, rxjs_1.firstValueFrom)(observable.pipe((0, rxjs_1.take)(2), (0, rxjs_1.toArray)())); producer.next(data1); producer.next(data2); producedEvents = await producedEventsP; expect(producedEvents).toHaveLength(2); expect(producedEvents[0]).toEqual(data1); expect(producedEvents[1]).toEqual(data2); producedEventsP = (0, rxjs_1.firstValueFrom)(observable.pipe((0, rxjs_1.take)(1), (0, rxjs_1.toArray)())); producer.next(data3); producedEvents = await producedEventsP; expect(producedEvents).toHaveLength(1); expect(producedEvents[0]).toEqual(data3); return { events: [data1, data2, data3] }; }; const replay = async (operator, expected) => { const data4 = { message: 'data-4', timestamp: performance.now() }; const producer = new rxjs_1.Subject(); const observable = producer.pipe(operator); let producedEventsP; let producedEvents; producedEventsP = (0, rxjs_1.firstValueFrom)(observable.pipe((0, rxjs_1.take)(expected.events.length), (0, rxjs_1.toArray)())); producedEvents = await producedEventsP; expect(producedEvents).toEqual(expected.events); producedEventsP = (0, rxjs_1.firstValueFrom)(observable.pipe((0, rxjs_1.take)(expected.events.length + 1), (0, rxjs_1.toArray)())); producer.next(data4); producedEvents = await producedEventsP; expect(producedEvents).toHaveLength(expected.events.length + 1); expect(producedEvents[producedEvents.length - 1]).toEqual(data4); }; const observe = async (operator, expected) => { const producer = new rxjs_1.Subject(); const observable = producer.pipe(operator); let producedEventsP; let producedEvents; producedEventsP = (0, rxjs_1.firstValueFrom)(observable.pipe((0, rxjs_1.take)(expected.events.length), (0, rxjs_1.toArray)())); producedEvents = await producedEventsP; expect(producedEvents).toEqual(expected.events); }; test('baseline', async () => { await run((0, _operators_1.persist)()); await replay((0, _operators_1.persistReplay)(), { events: [] }); await observe((0, _operators_1.persistReplay)(), { events: [] }); }); describe('memory', () => { test('persist', async () => { const provider = _providers_1.Memory.from((0, setup_1.testId)()); await run((0, _operators_1.persist)(provider)); }); test('persist-replay', async () => { const provider = _providers_1.Memory.from((0, setup_1.testId)()); const events = await run((0, _operators_1.persist)(provider)); await replay((0, _operators_1.persistReplay)(provider), events); }); test('persist-observe', async () => { const provider = _providers_1.Memory.from((0, setup_1.testId)()); const events = await run((0, _operators_1.persist)(provider)); await observe((0, _operators_1.persistReplay)(provider), events); }); test('persist-replay-observe', async () => { const provider = _providers_1.Memory.from((0, setup_1.testId)()); const events = await run((0, _operators_1.persist)(provider)); await replay((0, _operators_1.persistReplay)(provider), events); await observe((0, _operators_1.persistReplay)(provider), events); }); }); describe('dynamodb', () => { let container; let options = {}; beforeAll(async () => { container = new local_1.DynamoDBLocalContainer(console); await container.start(); options.client = container.getClient(); }); beforeEach(() => { }); afterEach(() => { }); afterAll(async () => { if (container) { await container.stop(); } }); test('persist', async () => { const provider = _providers_1.DynamoDB.from((0, setup_1.testId)(), options); await run((0, _operators_1.persist)(provider)); }); test('persist-replay', async () => { const provider = _providers_1.DynamoDB.from((0, setup_1.testId)(), options); const events = await run((0, _operators_1.persist)(provider)); await replay((0, _operators_1.persistReplay)(provider), events); }); test('persist-observe', async () => { const provider = _providers_1.DynamoDB.from((0, setup_1.testId)(), options); const events = await run((0, _operators_1.persist)(provider)); await observe((0, _operators_1.persistReplay)(provider), events); }); test('persist-replay-observe', async () => { const provider = _providers_1.DynamoDB.from((0, setup_1.testId)(), options); const events = await run((0, _operators_1.persist)(provider)); await replay((0, _operators_1.persistReplay)(provider), events); await observe((0, _operators_1.persistReplay)(provider), events); }); }); }); }); //# sourceMappingURL=persist.test.js.map