84 lines
2.4 KiB
TypeScript
84 lines
2.4 KiB
TypeScript
import {
|
|
buildBrowserCreateWorkerRequest,
|
|
defaultWorkerLaunchForm,
|
|
type WorkerLaunchFormState,
|
|
} from './worker-launch.ts';
|
|
|
|
import type { WorkerLaunchOptionsResponse } from './types.ts';
|
|
|
|
declare const Deno: {
|
|
test(name: string, fn: () => void): void;
|
|
};
|
|
|
|
function assert(condition: unknown, message: string): asserts condition {
|
|
if (!condition) {
|
|
throw new Error(message);
|
|
}
|
|
}
|
|
|
|
const options: WorkerLaunchOptionsResponse = {
|
|
workspace_id: 'workspace',
|
|
runtimes: [
|
|
{
|
|
runtime_id: 'remote-runtime',
|
|
display_name: 'Remote Runtime',
|
|
built_in: false,
|
|
can_spawn_worker: false,
|
|
status: 'active',
|
|
diagnostics: [],
|
|
},
|
|
{
|
|
runtime_id: 'embedded-worker-runtime',
|
|
display_name: 'Embedded Runtime',
|
|
built_in: true,
|
|
can_spawn_worker: true,
|
|
status: 'active',
|
|
diagnostics: [],
|
|
},
|
|
],
|
|
profiles: [
|
|
{
|
|
id: 'runtime_default',
|
|
label: 'Runtime default',
|
|
description: 'Runtime default profile.',
|
|
},
|
|
{
|
|
id: 'builtin:coder',
|
|
label: 'Coding Worker',
|
|
description: 'Coding role.',
|
|
},
|
|
],
|
|
diagnostics: [],
|
|
};
|
|
|
|
Deno.test('new worker form defaults to backend-published runtime and profile candidates', () => {
|
|
const current: WorkerLaunchFormState = {
|
|
runtime_id: '',
|
|
display_name: '',
|
|
profile: 'free-text-profile',
|
|
initial_text: 'start here',
|
|
};
|
|
|
|
const form = defaultWorkerLaunchForm(options, current);
|
|
assert(form.runtime_id === 'embedded-worker-runtime', 'should choose spawn-capable runtime');
|
|
assert(form.profile === 'builtin:coder', 'should choose backend-published coder profile');
|
|
assert(form.display_name === 'Coding Worker', 'should derive default display name');
|
|
assert(form.initial_text === 'start here', 'should preserve initial text');
|
|
});
|
|
|
|
Deno.test('new worker submit payload exposes only browser contract fields', () => {
|
|
const request = buildBrowserCreateWorkerRequest({
|
|
runtime_id: 'embedded-worker-runtime',
|
|
display_name: 'Coding Worker',
|
|
profile: 'builtin:coder',
|
|
initial_text: 'implement ticket',
|
|
});
|
|
|
|
assert(
|
|
JSON.stringify(Object.keys(request).sort()) ===
|
|
JSON.stringify(['display_name', 'initial_text', 'profile', 'runtime_id'].sort()),
|
|
'submit payload should contain only Browser-facing worker create fields',
|
|
);
|
|
assert(!('kind' in request), 'kind must not be exposed as a Browser request field');
|
|
});
|