cloudrx
Version:
TypeScript library for streaming cloud provider events using RxJS with automatic persistence and replay capabilities
121 lines • 6.41 kB
JavaScript
"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