mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-15 20:20:09 +00:00
86 lines
2.7 KiB
TypeScript
86 lines
2.7 KiB
TypeScript
import { describe, expect, it } from 'bun:test';
|
|
import {
|
|
MAX_CONTEXT_GROUP_LENGTH,
|
|
isValidAccountProfileName,
|
|
policyToAccountContextMetadata,
|
|
resolveAccountContextPolicy,
|
|
resolveCreateAccountContext,
|
|
} from '../../src/auth/account-context';
|
|
|
|
describe('account context helpers', () => {
|
|
it('rejects context groups that exceed the max length', () => {
|
|
const group = `a${'x'.repeat(MAX_CONTEXT_GROUP_LENGTH)}`;
|
|
const result = resolveCreateAccountContext({ shareContext: false, contextGroup: group });
|
|
|
|
expect(result.error).toContain('Invalid context group');
|
|
});
|
|
|
|
it('rejects profile names with unsupported characters', () => {
|
|
expect(isValidAccountProfileName('work')).toBe(true);
|
|
expect(isValidAccountProfileName('gemini:default')).toBe(false);
|
|
});
|
|
|
|
it('falls back to default shared group for invalid persisted metadata', () => {
|
|
const resolved = resolveAccountContextPolicy({
|
|
context_mode: 'shared',
|
|
context_group: '###',
|
|
});
|
|
|
|
expect(resolved.mode).toBe('shared');
|
|
expect(resolved.group).toBe('default');
|
|
});
|
|
|
|
it('round-trips shared policy metadata with normalized context group', () => {
|
|
const metadata = policyToAccountContextMetadata({
|
|
mode: 'shared',
|
|
group: 'Sprint-A',
|
|
});
|
|
|
|
const resolved = resolveAccountContextPolicy(metadata);
|
|
expect(resolved.mode).toBe('shared');
|
|
expect(resolved.group).toBe('sprint-a');
|
|
});
|
|
|
|
it('normalizes whitespace in explicit shared context group names', () => {
|
|
const result = resolveCreateAccountContext({
|
|
shareContext: false,
|
|
contextGroup: ' Team Alpha ',
|
|
});
|
|
|
|
expect(result.error).toBeUndefined();
|
|
expect(result.policy.mode).toBe('shared');
|
|
expect(result.policy.group).toBe('team-alpha');
|
|
});
|
|
|
|
it('supports deeper continuity for shared create flows', () => {
|
|
const result = resolveCreateAccountContext({
|
|
shareContext: true,
|
|
deeperContinuity: true,
|
|
});
|
|
|
|
expect(result.error).toBeUndefined();
|
|
expect(result.policy.mode).toBe('shared');
|
|
expect(result.policy.continuityMode).toBe('deeper');
|
|
});
|
|
|
|
it('rejects deeper continuity without shared context flags', () => {
|
|
const result = resolveCreateAccountContext({
|
|
shareContext: false,
|
|
deeperContinuity: true,
|
|
});
|
|
|
|
expect(result.error).toContain('requires shared context');
|
|
});
|
|
|
|
it('defaults shared continuity mode to standard for legacy metadata', () => {
|
|
const resolved = resolveAccountContextPolicy({
|
|
context_mode: 'shared',
|
|
context_group: 'team-alpha',
|
|
});
|
|
|
|
expect(resolved.mode).toBe('shared');
|
|
expect(resolved.group).toBe('team-alpha');
|
|
expect(resolved.continuityMode).toBe('standard');
|
|
});
|
|
});
|