32 lines
1.6 KiB
TypeScript
32 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
|
|
import { legacyUserId } from '../src/identity.js';
|
|
import { classifyGameStorage, mapLegacyRoles, parseInheritanceValue, parseStorageUserId } from '../src/transform.js';
|
|
|
|
describe('legacy database transforms', () => {
|
|
it('creates stable UUID-shaped user IDs without exposing the legacy sequence', () => {
|
|
expect(legacyUserId(42)).toBe(legacyUserId(42));
|
|
expect(legacyUserId(42)).not.toBe(legacyUserId(43));
|
|
expect(legacyUserId(42)).toMatch(/^[0-9a-f]{8}-[0-9a-f]{4}-5[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/);
|
|
});
|
|
|
|
it('maps legacy grades and scoped ACL without granting a scoped operator superuser', () => {
|
|
expect(mapLegacyRoles(7, {})).toContain('superuser');
|
|
expect(mapLegacyRoles(5, {})).toEqual(['admin.users.create', 'admin.users.manage', 'user']);
|
|
expect(mapLegacyRoles(1, { che: ['reset', 'notice'] })).toEqual([
|
|
'admin.notice.manage:che:default',
|
|
'admin.reset.schedule:che:default',
|
|
'user',
|
|
]);
|
|
});
|
|
|
|
it('separates persistent storage projections from current-season state', () => {
|
|
expect(classifyGameStorage('inheritance_42', 'previous')).toBe('persistent-projected');
|
|
expect(classifyGameStorage('user_42', 'last_stat_reset')).toBe('persistent-projected');
|
|
expect(classifyGameStorage('game_env', 'year')).toBe('season-state');
|
|
expect(parseStorageUserId('inheritance_42', 'inheritance')).toBe(legacyUserId(42));
|
|
expect(parseInheritanceValue('123.5', 'fixture')).toBe(123.5);
|
|
expect(parseInheritanceValue([123.5, null], 'fixture')).toBe(123.5);
|
|
});
|
|
});
|