cloudrx
Version:
TypeScript library for streaming cloud provider events using RxJS with automatic persistence and replay capabilities
93 lines • 3.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const rxjs_1 = require("rxjs");
const local_1 = require("../providers/aws/dynamodb/local");
const _providers_1 = require("@providers");
const setup_1 = require("../setup");
const _subjects_1 = require("@subjects");
describe('subjects', () => {
const seed = async (provider$) => {
const provider = await (0, rxjs_1.firstValueFrom)(provider$);
const data = [
{ message: 'data-1', timestamp: performance.now() },
{ message: 'data-2', timestamp: performance.now() },
{ message: 'data-3', timestamp: performance.now() },
];
const items = await Promise.all(data.map((item) => (0, rxjs_1.firstValueFrom)(provider.store(item))));
console.log('Seeded data:', items);
return items;
};
describe('memory', () => {
let seedData;
beforeAll(async () => { });
beforeEach(async () => {
seedData = await seed(_providers_1.Memory.from((0, setup_1.testId)()));
});
afterEach(() => { });
afterAll(async () => { });
test('cloud-subject', async () => {
const subject = new _subjects_1.CloudSubject(_providers_1.Memory.from((0, setup_1.testId)()));
const data = await new Promise((resolve) => {
const incoming = [];
subject.subscribe({
next: (data) => {
console.log('Received data:', data);
incoming.push(data);
if (incoming.length === seedData.length) {
subject.complete();
}
},
complete: () => {
resolve(incoming);
},
});
});
expect(data.length).toBe(seedData.length);
seedData.forEach((item) => {
expect(data).toContainEqual(item);
});
});
});
describe('dynamodb', () => {
let container;
let options = {};
let seedData;
beforeAll(async () => {
container = new local_1.DynamoDBLocalContainer(console);
await container.start();
options.client = container.getClient();
});
beforeEach(async () => {
seedData = await seed(_providers_1.DynamoDB.from((0, setup_1.testId)(), options));
});
afterEach(() => { });
afterAll(async () => {
if (container) {
await container.stop();
}
});
test('cloud-subject', async () => {
const subject = new _subjects_1.CloudSubject(_providers_1.DynamoDB.from((0, setup_1.testId)(), options));
const data = await new Promise((resolve) => {
const incoming = [];
subject.subscribe({
next: (data) => {
console.log('Received data:', data);
incoming.push(data);
if (incoming.length === seedData.length) {
subject.complete();
}
},
complete: () => {
resolve(incoming);
},
});
});
expect(data.length).toBe(seedData.length);
seedData.forEach((item) => {
expect(data).toContainEqual(item);
});
});
});
});
//# sourceMappingURL=cloud.test.js.map