From 7e46ec9e4700e95e69349f593d0a057aa01f8b2e Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 16 Jul 2025 11:13:30 +0200 Subject: [PATCH] Add tests for instance service updates --- .../metrics/instance/instance-service.test.ts | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git a/src/lib/features/metrics/instance/instance-service.test.ts b/src/lib/features/metrics/instance/instance-service.test.ts index 3268f9b23f..8292783e45 100644 --- a/src/lib/features/metrics/instance/instance-service.test.ts +++ b/src/lib/features/metrics/instance/instance-service.test.ts @@ -263,3 +263,129 @@ test('filter out private projects from overview', async () => { featureCount: 0, }); }); + +test('`registerInstance` sets `instanceId` to `default` if it is not provided', async () => { + const instanceService = new ClientInstanceService( + {} as any, + config, + {} as any, + ); + + await instanceService.registerInstance( + { + appName: 'appName', + environment: '', + }, + '::1', + ); + + expect(instanceService.seenClients.appName_default).toMatchObject({ + appName: 'appName', + instanceId: 'default', + }); +}); + +describe('upserting into `seenClients`', () => { + test('registerInstance merges its data', async () => { + const instanceService = new ClientInstanceService( + {} as any, + config, + {} as any, + ); + + const client = { + appName: 'appName', + instanceId: 'instanceId', + }; + + const key = instanceService.clientKey(client); + + instanceService.seenClients = { + [key]: { ...client, sdkVersion: 'my-sdk' }, + }; + + await instanceService.registerInstance( + { + ...client, + environment: 'blue', + }, + '::1', + ); + + expect(instanceService.seenClients[key]).toMatchObject({ + appName: 'appName', + instanceId: 'instanceId', + environment: 'blue', + sdkVersion: 'my-sdk', + }); + }); + test('registerBackendClient merges its data', async () => { + const instanceService = new ClientInstanceService( + {} as any, + config, + {} as any, + ); + + const client = { + appName: 'appName', + instanceId: 'instanceId', + }; + + const key = instanceService.clientKey(client); + + instanceService.seenClients = { + [key]: { ...client, environment: 'blue' }, + }; + + await instanceService.registerBackendClient( + { + ...client, + sdkVersion: 'my-sdk', + started: new Date(), + interval: 5, + }, + '::1', + ); + + expect(instanceService.seenClients[key]).toMatchObject({ + appName: 'appName', + instanceId: 'instanceId', + environment: 'blue', + sdkVersion: 'my-sdk', + }); + }); + test('registerFrontendClient merges its data', async () => { + const instanceService = new ClientInstanceService( + {} as any, + config, + {} as any, + ); + + const client = { + appName: 'appName', + instanceId: 'instanceId', + }; + + const key = instanceService.clientKey(client); + + instanceService.seenClients = { + [key]: { ...client, metricsCount: 10 }, + }; + + instanceService.registerFrontendClient({ + ...client, + sdkVersion: 'my-sdk', + sdkType: 'frontend', + environment: 'black', + }); + + expect(instanceService.seenClients[key]).toMatchObject({ + appName: 'appName', + instanceId: 'instanceId', + sdkVersion: 'my-sdk', + sdkType: 'frontend', + environment: 'black', + metricsCount: 10, + }); + }); +});