@speckle/objectloader2
Version:
This is an updated objectloader for the Speckle viewer written in typescript
138 lines • 5.52 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const vitest_1 = require("vitest");
const batchingQueue_js_1 = __importDefault(require("./batchingQueue.js"));
(0, vitest_1.describe)('BatchingQueue', () => {
(0, vitest_1.test)('should add items and process them in batches', async () => {
const processSpy = vitest_1.vi.fn();
const queue = new batchingQueue_js_1.default({
batchSize: 2,
maxWaitTime: 100,
processFunction: async (batch) => {
await new Promise((resolve) => setTimeout(resolve, 0));
processSpy(batch);
}
});
try {
queue.add('key1', 'item1');
queue.add('key2', 'item2');
await new Promise((resolve) => setTimeout(resolve, 200));
(0, vitest_1.expect)(processSpy).toHaveBeenCalledTimes(1);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item1', 'item2']);
}
finally {
await queue.disposeAsync();
}
});
(0, vitest_1.test)('should process items after timeout if batch size is not reached', async () => {
const processSpy = vitest_1.vi.fn();
const queue = new batchingQueue_js_1.default({
batchSize: 5,
maxWaitTime: 100,
processFunction: async (batch) => {
await new Promise((resolve) => setTimeout(resolve, 0));
processSpy(batch);
}
});
try {
queue.add('key1', 'item1');
queue.add('key2', 'item2');
await new Promise((resolve) => setTimeout(resolve, 200));
(0, vitest_1.expect)(processSpy).toHaveBeenCalledTimes(1);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item1', 'item2']);
}
finally {
await queue.disposeAsync();
}
});
(0, vitest_1.test)('should handle multiple batches correctly', async () => {
const processSpy = vitest_1.vi.fn();
const queue = new batchingQueue_js_1.default({
batchSize: 2,
maxWaitTime: 100,
processFunction: async (batch) => {
await new Promise((resolve) => setTimeout(resolve, 0));
processSpy(batch);
}
});
try {
queue.add('key1', 'item1');
queue.add('key2', 'item2');
queue.add('key3', 'item3');
queue.add('key4', 'item4');
await new Promise((resolve) => setTimeout(resolve, 200));
(0, vitest_1.expect)(processSpy).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item1', 'item2']);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item3', 'item4']);
}
finally {
await queue.disposeAsync();
}
});
(0, vitest_1.test)('should retrieve items by key', async () => {
const queue = new batchingQueue_js_1.default({
batchSize: 3,
maxWaitTime: 100,
processFunction: async () => {
await new Promise((resolve) => setTimeout(resolve, 0));
}
});
try {
queue.add('key1', 'item1');
queue.add('key2', 'item2');
(0, vitest_1.expect)(queue.get('key1')).toBe('item1');
(0, vitest_1.expect)(queue.get('key2')).toBe('item2');
(0, vitest_1.expect)(queue.get('key3')).toBeUndefined();
}
finally {
await queue.disposeAsync();
}
});
(0, vitest_1.test)('should return correct count of items', async () => {
const queue = new batchingQueue_js_1.default({
batchSize: 3,
maxWaitTime: 100,
processFunction: async () => {
await new Promise((resolve) => setTimeout(resolve, 0));
}
});
try {
(0, vitest_1.expect)(queue.count()).toBe(0);
queue.add('key1', 'item1');
queue.add('key2', 'item2');
(0, vitest_1.expect)(queue.count()).toBe(2);
}
finally {
await queue.disposeAsync();
}
});
(0, vitest_1.test)('should not process items if already processing', async () => {
const processSpy = vitest_1.vi.fn();
const queue = new batchingQueue_js_1.default({
batchSize: 2,
maxWaitTime: 100,
processFunction: async (batch) => {
processSpy(batch);
await new Promise((resolve) => setTimeout(resolve, 300));
}
});
try {
queue.add('key1', 'item1');
queue.add('key2', 'item2');
queue.add('key3', 'item3');
await new Promise((resolve) => setTimeout(resolve, 200));
(0, vitest_1.expect)(processSpy).toHaveBeenCalledTimes(1);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item1', 'item2']);
await new Promise((resolve) => setTimeout(resolve, 500));
(0, vitest_1.expect)(processSpy).toHaveBeenCalledTimes(2);
(0, vitest_1.expect)(processSpy).toHaveBeenCalledWith(['item3']);
}
finally {
await queue.disposeAsync();
}
});
});
//# sourceMappingURL=batchingQueue.test.js.map