diff --git a/src/lib/routes/client-api/register.test.ts b/src/lib/routes/client-api/register.test.ts index 49e55da3522..3cf08b70296 100644 --- a/src/lib/routes/client-api/register.test.ts +++ b/src/lib/routes/client-api/register.test.ts @@ -84,12 +84,26 @@ test('should require strategies field', () => { .expect(400); }); +test('should allow an no instanceId field', () => { + expect.assertions(0); + return request + .post('/api/client/register') + .send({ + appName: 'demo', + strategies: ['default'], + started: Date.now(), + interval: 10, + }) + .expect(202); +}); + test('should allow an empty instanceId field', () => { expect.assertions(0); return request .post('/api/client/register') .send({ appName: 'demo', + instanceId: '', strategies: ['default'], started: Date.now(), interval: 10, diff --git a/src/lib/services/client-metrics/schema.test.ts b/src/lib/services/client-metrics/schema.test.ts new file mode 100644 index 00000000000..1a97efc95de --- /dev/null +++ b/src/lib/services/client-metrics/schema.test.ts @@ -0,0 +1,95 @@ +import { clientRegisterSchema, clientMetricsSchema } from './schema'; + +test('clientRegisterSchema should allow empty ("") instanceId', () => { + const { value } = clientRegisterSchema.validate({ + appName: 'test', + instanceId: '', + strategies: ['default'], + started: Date.now(), + interval: 100, + }); + //@ts-ignore + expect(value.instanceId).toBe('default'); +}); + +test('clientRegisterSchema should allow undefined instanceId', () => { + const { value } = clientRegisterSchema.validate({ + appName: 'test', + strategies: ['default'], + started: Date.now(), + interval: 100, + }); + + expect(value.instanceId).toBe('default'); +}); + +test('clientRegisterSchema should allow null instanceId', () => { + const { value } = clientRegisterSchema.validate({ + appName: 'test', + instanceId: null, + strategies: ['default'], + started: Date.now(), + interval: 100, + }); + expect(value.instanceId).toBe('default'); +}); + +test('clientRegisterSchema should use instanceId', () => { + const { value } = clientRegisterSchema.validate({ + appName: 'test', + instanceId: 'some', + strategies: ['default'], + started: Date.now(), + interval: 100, + }); + expect(value.instanceId).toBe('some'); +}); + +test('clientMetricsSchema should allow null instanceId', () => { + const { value } = clientMetricsSchema.validate({ + appName: 'test', + instanceId: null, + bucket: { + started: Date.now(), + stopped: Date.now(), + }, + }); + expect(value.instanceId).toBe('default'); +}); + +test('clientMetricsSchema should allow empty ("") instanceId', () => { + const { value } = clientMetricsSchema.validate({ + appName: 'test', + instanceId: '', + bucket: { + started: Date.now(), + stopped: Date.now(), + }, + }); + expect(value.instanceId).toBe('default'); +}); + +test('clientMetricsSchema should allow undefined instanceId', () => { + const { value } = clientMetricsSchema.validate({ + appName: 'test', + bucket: { + started: Date.now(), + stopped: Date.now(), + }, + }); + + expect(value.instanceId).toBe('default'); +}); + +test('clientMetricsSchema should use instanceId', () => { + const { value } = clientMetricsSchema.validate({ + appName: 'test', + instanceId: 'some', + bucket: { + started: Date.now(), + stopped: Date.now(), + }, + }); + + expect(value.instanceId).toBe('some'); +}); diff --git a/src/lib/services/client-metrics/schema.ts b/src/lib/services/client-metrics/schema.ts index 2458c734b4b..edf8fce2e73 100644 --- a/src/lib/services/client-metrics/schema.ts +++ b/src/lib/services/client-metrics/schema.ts @@ -15,7 +15,7 @@ export const clientMetricsSchema = joi .keys({ environment: joi.string().optional(), appName: joi.string().required(), - instanceId: joi.string().default('default'), + instanceId: joi.string().empty(['', null]).default('default'), bucket: joi .object() .required() @@ -48,7 +48,7 @@ export const clientRegisterSchema = joi .options({ stripUnknown: true }) .keys({ appName: joi.string().required(), - instanceId: joi.string().default('default'), + instanceId: joi.string().empty(['', null]).default('default'), sdkVersion: joi.string().optional(), strategies: joi .array()