philipgreat's picture
Deploy traceable order management playground
aa89cb5 verified
Raw History Blame Contribute Delete
1.42 kB
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');
});
});