@webda/core
Version:
Expose API with Lambda
118 lines • 4.94 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { suite, test } from "@testdeck/mocha";
import * as assert from "assert";
import * as sinon from "sinon";
import { WebdaTest } from "../test.js";
import { EventService } from "./asyncevents.js";
let AsyncEventsTest = class AsyncEventsTest extends WebdaTest {
async simple() {
var users = this.webda.getService("Users");
var eventsCount = 0;
var priorityEventsCount = 0;
var defaultQueue = this.webda.getService("EventQueue");
var priorityQueue = this.webda.getService("PriorityEventQueue");
var eventService = this.webda.getService("AsyncEvents");
users.onAsync("Store.Saved", () => {
eventsCount++;
});
users.onAsync("Store.Deleted", () => {
priorityEventsCount++;
}, "priority");
await users.save({
uuid: "test",
type: 1
});
let size = await defaultQueue.size();
assert.strictEqual(size, 1);
size = await priorityQueue.size();
assert.strictEqual(size, 0);
await users.delete("test");
size = await priorityQueue.size();
assert.strictEqual(size, 1);
size = await defaultQueue.size();
assert.strictEqual(size, 1);
// Now that we have queued all messages see if they unqueue correctly
// We need to emulate the worker as it wont stop pulling from the queue
assert.strictEqual(eventsCount, 0);
assert.strictEqual(priorityEventsCount, 0);
let evts = await defaultQueue.receiveMessage();
// @ts-ignore
await eventService.handleRawEvent(evts[0].Message);
assert.strictEqual(eventsCount, 1);
assert.strictEqual(priorityEventsCount, 0);
evts = await priorityQueue.receiveMessage();
// @ts-ignore
await eventService.handleRawEvent(evts[0].Message);
assert.strictEqual(eventsCount, 1);
assert.strictEqual(priorityEventsCount, 1);
// Disable async and verify that it directly update now
eventService._async = false;
await users.save({
uuid: "test",
type: 1
});
assert.strictEqual(eventsCount, 2);
assert.strictEqual(priorityEventsCount, 1);
await users.delete("test");
assert.strictEqual(eventsCount, 2);
assert.strictEqual(priorityEventsCount, 2);
}
worker() {
let eventService = this.webda.getService("AsyncEvents");
eventService._queues = {
plop: {
// @ts-ignore
consume: () => "ploper"
},
default: {
// @ts-ignore
consume: () => "default"
}
};
assert.strictEqual(eventService.worker("plop"), "ploper");
assert.strictEqual(eventService.worker(), "default");
}
async computeParameters() {
let evt = new EventService(this.webda, "none", { sync: false });
await assert.rejects(() => evt.computeParameters(), /Need at least one queue for async to be ready/);
}
async cov() {
let evt = new EventService(this.webda, "none", { sync: true });
assert.throws(() => evt.bindAsyncListener(evt, "plop", undefined, "plop"), /EventService is not configured for asynchronous/);
await assert.rejects(
// @ts-ignore
() => evt.handleEvent({ getMapper: () => "plop" }), /Callbacks should not be empty, possible application version mismatch between emitter and worker/);
evt._async = true;
let stub = sinon.spy(this.webda.getService("Users"), "on");
try {
evt.bindAsyncListener(this.webda.getService("Users"), "plop", () => { }, "priority");
evt.bindAsyncListener(this.webda.getService("Users"), "plop", () => { }, "priority");
// Should call 'on' only once
assert.strictEqual(stub.callCount, 1);
}
finally {
stub.restore();
}
}
};
__decorate([
test
], AsyncEventsTest.prototype, "simple", null);
__decorate([
test
], AsyncEventsTest.prototype, "worker", null);
__decorate([
test
], AsyncEventsTest.prototype, "computeParameters", null);
__decorate([
test
], AsyncEventsTest.prototype, "cov", null);
AsyncEventsTest = __decorate([
suite
], AsyncEventsTest);
//# sourceMappingURL=asyncevents.spec.js.map