import { describe, expect, it } from 'vitest';
import { parseSource, resolvePreset } from '~/player/resolvePreset';
import { DEFAULT_PRESET } from '~/presets/builtIn';
import { encodePreset } from '~/share/encodePreset';
describe('parseSource', () => {
it('splits an explicit prefix', () => {
expect(parseSource('builtin:aurora')).toEqual({ kind: 'builtin', value: 'aurora' });
expect(parseSource('token:abc')).toEqual({ kind: 'token', value: 'abc' });
});
it('auto-detects a known built-in id', () => {
expect(parseSource(DEFAULT_PRESET.id)).toEqual({ kind: 'builtin', value: DEFAULT_PRESET.id });
});
it('treats an unknown prefixless string as a token', () => {
expect(parseSource('zzz-not-an-id')).toEqual({ kind: 'token', value: 'zzz-not-an-id' });
});
});
describe('resolvePreset', () => {
it('resolves a built-in by id', async () => {
const p = await resolvePreset(`builtin:${DEFAULT_PRESET.id}`);
expect(p?.id).toBe(DEFAULT_PRESET.id);
});
it('returns null for an unknown built-in id', async () => {
expect(await resolvePreset('builtin:does-not-exist')).toBeNull();
});
it('round-trips a share token', async () => {
const token = encodePreset(DEFAULT_PRESET);
const p = await resolvePreset(`token:${token}`);
expect(p?.params.agentCount).toBe(DEFAULT_PRESET.params.agentCount);
expect(p?.builtIn).toBe(false);
});
it('returns null for a malformed token', async () => {
expect(await resolvePreset('token:!!!not-base64!!!')).toBeNull();
});
it('resolves inline json of a full preset', async () => {
const p = await resolvePreset(`json:${JSON.stringify(DEFAULT_PRESET)}`);
expect(p?.id).toBe(DEFAULT_PRESET.id);
});
it('resolves inline json of bare params (wrapped)', async () => {
const p = await resolvePreset(`json:${JSON.stringify(DEFAULT_PRESET.params)}`);
expect(p?.params.agentCount).toBe(DEFAULT_PRESET.params.agentCount);
expect(p?.builtIn).toBe(false);
});
it('returns null for invalid json', async () => {
expect(await resolvePreset('json:{ not valid')).toBeNull();
});
it('fetches a url via an injected fetch', async () => {
const fetchFn = (async () =>
new Response(JSON.stringify(DEFAULT_PRESET), { status: 200 })) as unknown as typeof fetch;
const p = await resolvePreset('url:https://example.test/p.json', { fetchFn });
expect(p?.id).toBe(DEFAULT_PRESET.id);
});
});