99 lines
2.5 KiB
TypeScript

import { describe, test, expect, beforeEach } from '@jest/globals';
import { RhizomeNode, Lossless, createDelta } from '@src';
import { CustomResolver } from '@src/views/resolvers/custom-resolvers';
class CountPlugin {
readonly name = 'count' as const;
initialize() {
return { count: 0 };
}
update(currentState: {count: number}, _newValue: unknown, _delta: any) {
return { count: currentState.count + 1 };
}
resolve(state: {count: number}) {
return state.count;
}
}
describe('CountPlugin', () => {
let node: RhizomeNode;
let lossless: Lossless;
beforeEach(() => {
node = new RhizomeNode();
lossless = new Lossless(node);
});
test('should count the number of updates', () => {
// First update
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(1000)
.setProperty('counter1', 'count', 'value1', 'test')
.buildV1()
);
// Second update
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(2000)
.setProperty('counter1', 'count', 'value2', 'test')
.buildV1()
);
// Third update
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(3000)
.setProperty('counter1', 'count', 'value3', 'test')
.buildV1()
);
const resolver = new CustomResolver(lossless, {
count: new CountPlugin()
});
const result = resolver.resolve();
expect(result).toBeDefined();
expect(result!['counter1'].properties.count).toBe(3);
});
test('should handle multiple entities independently', () => {
// Update counter1
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(1000)
.setProperty('counter1', 'count', 'value1', 'test')
.buildV1()
);
// Update counter2
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(1000)
.setProperty('counter2', 'count', 'value1', 'test')
.buildV1()
);
// Update counter1 again
lossless.ingestDelta(
createDelta('user1', 'host1')
.withTimestamp(2000)
.setProperty('counter1', 'count', 'value2', 'test')
.buildV1()
);
const resolver = new CustomResolver(lossless, {
count: new CountPlugin()
});
const result = resolver.resolve();
expect(result).toBeDefined();
expect(result!['counter1'].properties.count).toBe(2);
expect(result!['counter2'].properties.count).toBe(1);
});
});