Spaces:
Running
Running
File size: 1,421 Bytes
aa89cb5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import { UserContext } from '../src/core/context';
import { SelectQuery } from '../src/core/ast';
describe('UserContext', () => {
it('stores runtime dependencies during context initialization', () => {
const service = { name: 'data-service' };
const context = new UserContext().insertResource('dataService', service);
expect(context.requireResource('dataService')).toBe(service);
});
it('prepares a query without serializing trusted runtime resources', () => {
const query = new SelectQuery('Order');
const context = new UserContext().insertResource('tenant', 'trusted-tenant');
expect(context.prepareQuery(query)).toBe(query);
expect(JSON.stringify(query)).not.toContain('trusted-tenant');
});
it('fails closed when a required runtime dependency is absent', () => {
const context = new UserContext();
expect(() => context.requireResource('dataService')).toThrow(
'Required UserContext resource is missing: dataService',
);
});
it('binds a typed active root and rejects missing or mismatched types', () => {
const context = new UserContext();
expect(() => context.requireActiveRoot('Tenant')).toThrow('context root missing');
context.withActiveRoot({ entity: 'Tenant', id: 42 });
expect(context.requireActiveRoot('Tenant').id).toBe(42);
expect(() => context.requireActiveRoot('Store')).toThrow('context root type_mismatch');
});
});
|