test: add deviceIdentity tests for buildDeviceAuthPayload (137 total)
This commit is contained in:
71
src/lib/__tests__/deviceIdentity.test.ts
Normal file
71
src/lib/__tests__/deviceIdentity.test.ts
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
import { describe, it, expect } from 'vitest';
|
||||||
|
import { buildDeviceAuthPayload } from '../deviceIdentity';
|
||||||
|
|
||||||
|
describe('buildDeviceAuthPayload', () => {
|
||||||
|
const baseParams = {
|
||||||
|
deviceId: 'abc123',
|
||||||
|
clientId: 'pinchchat-xyz',
|
||||||
|
clientMode: 'webchat',
|
||||||
|
role: 'operator',
|
||||||
|
scopes: ['operator.chat', 'operator.admin'],
|
||||||
|
signedAtMs: 1700000000000,
|
||||||
|
token: 'mytoken',
|
||||||
|
};
|
||||||
|
|
||||||
|
it('builds v1 payload without nonce', () => {
|
||||||
|
const result = buildDeviceAuthPayload(baseParams);
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('builds v2 payload with nonce', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, nonce: 'nonce42' });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v2|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|mytoken|nonce42',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles null token', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, token: null });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles empty scopes', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, scopes: [] });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator||1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles null nonce as v1', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, nonce: null });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles undefined nonce as v1', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, nonce: undefined });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles single scope', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, scopes: ['operator.chat'] });
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat|1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('handles empty nonce string as v2', () => {
|
||||||
|
const result = buildDeviceAuthPayload({ ...baseParams, nonce: '' });
|
||||||
|
// Empty string is falsy, so version should be v1
|
||||||
|
expect(result).toBe(
|
||||||
|
'v1|abc123|pinchchat-xyz|webchat|operator|operator.chat,operator.admin|1700000000000|mytoken',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user