Zum Inhalt

tests/player/resolvePreset.test.ts

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