2023-09-14 12:28:28 +02:00
|
|
|
import {
|
|
|
|
normalizeCustomContextProperties,
|
|
|
|
NormalizedContextProperties,
|
2023-10-25 16:55:33 +02:00
|
|
|
validateTokenFormat,
|
2023-09-14 12:28:28 +02:00
|
|
|
} from './playground.utils';
|
|
|
|
|
|
|
|
test('should keep standard properties in their place', () => {
|
|
|
|
const input: NormalizedContextProperties = {
|
|
|
|
appName: 'testApp',
|
|
|
|
environment: 'testEnv',
|
|
|
|
userId: 'testUser',
|
|
|
|
sessionId: 'testSession',
|
|
|
|
remoteAddress: '127.0.0.1',
|
|
|
|
currentTime: 'now',
|
|
|
|
};
|
|
|
|
const output = normalizeCustomContextProperties(input);
|
|
|
|
expect(output).toEqual(input);
|
|
|
|
});
|
|
|
|
|
|
|
|
test('should move non-standard properties to nested properties field', () => {
|
|
|
|
const input = {
|
|
|
|
appName: 'testApp',
|
|
|
|
customProp: 'customValue',
|
|
|
|
anotherCustom: 'anotherValue',
|
|
|
|
};
|
|
|
|
const output = normalizeCustomContextProperties(input);
|
|
|
|
expect(output).toEqual({
|
|
|
|
appName: 'testApp',
|
|
|
|
properties: {
|
|
|
|
customProp: 'customValue',
|
|
|
|
anotherCustom: 'anotherValue',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
test('should not have properties field if there are no non-standard properties', () => {
|
|
|
|
const input = {
|
|
|
|
appName: 'testApp',
|
|
|
|
};
|
|
|
|
const output = normalizeCustomContextProperties(input);
|
|
|
|
expect(output).toEqual(input);
|
|
|
|
expect(output.properties).toBeUndefined();
|
|
|
|
});
|
|
|
|
|
|
|
|
test('should combine existing properties field with non-standard properties', () => {
|
|
|
|
const input = {
|
|
|
|
appName: 'testApp',
|
|
|
|
properties: {
|
|
|
|
existingProp: 'existingValue',
|
|
|
|
},
|
|
|
|
customProp: 'customValue',
|
|
|
|
};
|
|
|
|
const output = normalizeCustomContextProperties(input);
|
|
|
|
expect(output).toEqual({
|
|
|
|
appName: 'testApp',
|
|
|
|
properties: {
|
|
|
|
existingProp: 'existingValue',
|
|
|
|
customProp: 'customValue',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
test('should add multiple standard properties without breaking custom properties', () => {
|
|
|
|
const input = {
|
|
|
|
appName: 'testApp',
|
|
|
|
properties: {
|
|
|
|
existingProp: 'existingValue',
|
|
|
|
},
|
|
|
|
currentTime: 'value',
|
|
|
|
};
|
|
|
|
const output = normalizeCustomContextProperties(input);
|
|
|
|
expect(output).toEqual({
|
|
|
|
appName: 'testApp',
|
|
|
|
currentTime: 'value',
|
|
|
|
properties: {
|
|
|
|
existingProp: 'existingValue',
|
|
|
|
},
|
|
|
|
});
|
|
|
|
});
|
2023-10-25 16:55:33 +02:00
|
|
|
|
|
|
|
describe('validateTokenFormat', () => {
|
|
|
|
it('should throw an error for invalid token format without colon', () => {
|
|
|
|
const invalidToken = 'invalidToken';
|
|
|
|
expect(() => validateTokenFormat(invalidToken)).toThrow(
|
|
|
|
'Invalid token format',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should not throw an error for invalid token format without period', () => {
|
|
|
|
const invalidToken = 'project:environment';
|
|
|
|
expect(() => validateTokenFormat(invalidToken)).not.toThrow();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw an error for tokens with an empty project', () => {
|
|
|
|
const invalidToken = ':environment.abc123';
|
|
|
|
expect(() => validateTokenFormat(invalidToken)).toThrow(
|
|
|
|
'Invalid token format',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw an error for tokens with an empty environment', () => {
|
|
|
|
const invalidToken = 'project:.abc123';
|
|
|
|
expect(() => validateTokenFormat(invalidToken)).toThrow(
|
|
|
|
'Invalid token format',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should throw an error for admin tokens', () => {
|
|
|
|
const adminToken = 'project:*.abc123';
|
|
|
|
expect(() => validateTokenFormat(adminToken)).toThrow(
|
|
|
|
'Admin tokens are not supported in the playground',
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should not throw an error for valid token formats', () => {
|
|
|
|
const validToken = 'project:environment.abc123';
|
|
|
|
expect(() => validateTokenFormat(validToken)).not.toThrow();
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should not throw an error for valid token format and all projects', () => {
|
|
|
|
const validToken = '*:environment.abc123';
|
|
|
|
expect(() => validateTokenFormat(validToken)).not.toThrow();
|
|
|
|
});
|
|
|
|
});
|