2025-06-25 13:37:35 -05:00

110 lines
2.9 KiB
TypeScript

import { describe, test, expect } from '@jest/globals';
import { ResolverPlugin, DependencyStates } from '@src/views/resolvers/custom-resolvers';
import { PropertyTypes } from '@src/core/types';
import type { CollapsedDelta } from '@src/views/lossless';
import { testResolverWithPlugins, createTestDelta } from '@test-helpers/resolver-test-helper';
class CountPlugin extends ResolverPlugin<{ count: number }, never> {
readonly dependencies = [] as const;
initialize() {
return { count: 0 };
}
update(
currentState: { count: number },
_newValue: PropertyTypes,
_delta: CollapsedDelta,
_dependencies: DependencyStates
) {
return { count: currentState.count + 1 };
}
resolve(
state: { count: number },
_dependencies: DependencyStates
): number {
return state.count;
}
}
describe('CountPlugin', () => {
test('should count the number of updates', async () => {
// Arrange & Act
const entityId = 'counter1';
await testResolverWithPlugins({
entityId,
plugins: {
count: new CountPlugin()
},
deltas: [
createTestDelta()
.withTimestamp(1000)
.setProperty(entityId, 'count', 'value1', 'test')
.buildV1(),
createTestDelta()
.withTimestamp(2000)
.setProperty(entityId, 'count', 'value2', 'test')
.buildV1(),
createTestDelta()
.withTimestamp(3000)
.setProperty(entityId, 'count', 'value3', 'test')
.buildV1()
],
expectedResult: (result) => {
// Assert
expect(result).toBeDefined();
expect(result.properties.count).toBe(3);
}
});
});
test('should handle multiple entities independently', async () => {
// Arrange
const counter1Deltas = [
createTestDelta()
.withTimestamp(1000)
.setProperty('counter1', 'count', 'value1', 'test')
.buildV1(),
createTestDelta()
.withTimestamp(2000)
.setProperty('counter1', 'count', 'value2', 'test')
.buildV1()
];
const counter2Deltas = [
createTestDelta()
.withTimestamp(1000)
.setProperty('counter2', 'count', 'value1', 'test')
.buildV1()
];
// Act & Assert - Test counter1
await testResolverWithPlugins({
entityId: 'counter1',
plugins: {
count: new CountPlugin()
},
deltas: counter1Deltas,
expectedResult: (result) => {
expect(result).toBeDefined();
expect(result.properties.count).toBe(2);
}
});
// Act & Assert - Test counter2
await testResolverWithPlugins({
entityId: 'counter2',
plugins: {
count: new CountPlugin()
},
deltas: counter2Deltas,
expectedResult: (result) => {
expect(result).toBeDefined();
expect(result.properties.count).toBe(1);
}
});
});
});