All files / core/blong-realm browser-test.ts

100% Statements 99/99
100% Branches 6/6
100% Functions 4/4
100% Lines 99/99

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 1001x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import {browser, realm} from '@feasibleone/blong';
 
/**
 * browser-test.ts — Browser platform suite for `blong` tap tests.
 *
 * Loads the browser-side realms needed by the tap test flows (blong-test for
 * HTTP dispatch, blong-login for authentication helpers, blong-access for the
 * RBAC realm) plus a **test-only** `blong` browser realm that discovers only
 * the `browser/test/` layer. The React `browser/orchestrator` layer is disabled
 * via config so the tap/ts-node runner does not try to load JSX.
 *
 * The browser-side `test.flow.flow` test calls the `blong` API over HTTP
 * through the backend adapter, exercising the gateway RBAC (401/403/200).
 */
export default browser(blong => ({
    url: import.meta.url,
    validation: blong.type.Object(
        {
            login: blong.type.Object({}),
            access: blong.type.Object({}),
            blong: blong.type.Object({}),
            testClient: blong.type.Object({
                backend: blong.type.Object({
                    namespace: blong.type.Array(blong.type.String()),
                }),
            }),
        },
        {additionalProperties: false},
    ),
    children: [
        /** blong-test: provides test dispatch + backend HTTP adapter */
        async function testClient() {
            return import('@feasibleone/blong-test/browser.ts');
        },
        /** blong-login: browser-side authentication helpers */
        async function login() {
            return import('@feasibleone/blong-login/browser.ts');
        },
        /** blong-access: RBAC realm (login/authorization) */
        async function access() {
            return import('@feasibleone/blong-access/browser.ts');
        },
        /**
         * Test-only `blong` browser realm — discovers only the browser/test
         * layer (no React orchestrator components, which the tap runner cannot
         * load).
         */
        async function blong() {
            return realm(() => ({
                url: import.meta.url,
                // No browser test layer: the realm's grant is asserted on the
                // server side against the authorization the gateway reads, and
                // the end-to-end refusal is asserted where the pages live.
                children: [],
                config: {
                    default: {
                        // The React layers are off for this tap run: the runner has no
                        // DOM, and a page component that imports PrimeReact fails to
                        // load rather than simply not rendering.
                        'browser/orchestrator': false,
                        component: false,
                    },
                    integration: {
                        'browser/orchestrator': false,
                        component: false,
                    },
                },
            }));
        },
    ],
    config: {
        default: {},
        dev: {
            // The tap runner has no DOM and no platform the login orchestrator can
            // build against: `orchestrator/login/token.ts` dereferences the API it
            // expects at creation time, so loading it here fails before any test runs.
            // Authentication for these flows is done server-side anyway.
            login: {orchestrator: false},
            access: {},
            blong: {},
        },
        integration: {
            testClient: {
                backend: {
                    // Namespaces the browser backend adapter proxies to the server
                    namespace: ['blong', 'login', 'access'],
                },
            },
            login: {orchestrator: false},
            access: {},
            blong: {},
            // Disable the React browser layers for this tap run.
            'browser/orchestrator': false,
            watch: {
                test: [],
            },
        },
    },
}));