From 4630068b0a53dccd1bbeb31f99faa315071e58a2 Mon Sep 17 00:00:00 2001 From: Jaanus Sellin Date: Thu, 20 Feb 2025 14:52:01 +0200 Subject: [PATCH] feat: add tests for filterEventsByQuery (#9338) --- .../delta/client-feature-toggle-delta.test.ts | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.ts diff --git a/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.ts b/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.ts new file mode 100644 index 0000000000..4c44d26a30 --- /dev/null +++ b/src/lib/features/client-feature-toggles/delta/client-feature-toggle-delta.test.ts @@ -0,0 +1,109 @@ +import type { DeltaEvent } from './client-feature-toggle-delta-types'; +import { filterEventsByQuery } from './client-feature-toggle-delta'; + +describe('filterEventsByQuery', () => { + const mockEvents: DeltaEvent[] = [ + { + eventId: 1, + type: 'feature-updated', + feature: { + name: 'test-feature', + project: 'project1', + enabled: true, + }, + }, + { + eventId: 2, + type: 'feature-updated', + feature: { + name: 'alpha-feature', + project: 'project2', + enabled: true, + }, + }, + { + eventId: 3, + type: 'feature-removed', + featureName: 'beta-feature', + project: 'project3', + }, + { + eventId: 4, + type: 'segment-updated', + segment: { id: 1, name: 'my-segment', constraints: [] }, + }, + { eventId: 5, type: 'segment-removed', segmentId: 2 }, + ]; + test('filters events based on eventId', () => { + const requiredRevisionId = 2; + const result = filterEventsByQuery( + mockEvents, + requiredRevisionId, + ['project3'], + '', + ); + expect(result).toEqual([ + { + eventId: 3, + type: 'feature-removed', + featureName: 'beta-feature', + project: 'project3', + }, + { + eventId: 4, + type: 'segment-updated', + segment: { id: 1, name: 'my-segment', constraints: [] }, + }, + { eventId: 5, type: 'segment-removed', segmentId: 2 }, + ]); + }); + + test('returns all projects', () => { + const result = filterEventsByQuery(mockEvents, 0, ['*'], ''); + expect(result).toEqual(mockEvents); + }); + + test('filters by name prefix', () => { + const result = filterEventsByQuery( + mockEvents, + 0, + ['project1', 'project2'], + 'alpha', + ); + expect(result).toEqual([ + { + eventId: 2, + type: 'feature-updated', + feature: { + name: 'alpha-feature', + project: 'project2', + enabled: true, + }, + }, + { + eventId: 4, + type: 'segment-updated', + segment: { id: 1, name: 'my-segment', constraints: [] }, + }, + { eventId: 5, type: 'segment-removed', segmentId: 2 }, + ]); + }); + + test('filters by project list', () => { + const result = filterEventsByQuery(mockEvents, 0, ['project3'], 'beta'); + expect(result).toEqual([ + { + eventId: 3, + type: 'feature-removed', + featureName: 'beta-feature', + project: 'project3', + }, + { + eventId: 4, + type: 'segment-updated', + segment: { id: 1, name: 'my-segment', constraints: [] }, + }, + { eventId: 5, type: 'segment-removed', segmentId: 2 }, + ]); + }); +});