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');
  });
});