Files
electric-cherry/tests/unit/files.test.ts
T
joshandClaude Opus 4.7 93d5a8e2e5 Rework as scripts-centric, upload-only, gated beta lifecycle
Scripts become first-class: named, versioned, uploaded via the UI, optionally
scoped to a game or map. Any change that would land on scope-matched servers
(marking-required or new version of a scoped script) must first pass a beta.
The beta runs a per-server state machine — deploy -beta.gsc → wait empty →
Komodo restart → wait healthy → optionally wait for a real match end
(games_sp.log 'ExitLevel: executed') — before it's eligible for promotion.
Rollback is always available and restores from .OLD.

The shared/scripts mirror and its betas/ staging folder are gone. Every
server now has a tracked script inventory (server_scripts table), populated
only by explicit upload flows.

New: /scripts, /scripts/[id], /betas/[id] UI; /api/scripts + /api/betas +
/api/servers/[name]/scripts endpoints; scripts.ts, inventory.ts, beta.ts
(rewritten), beta-runner.ts, match-log.ts, komodoInspectHealthy().
Removed: push.ts, /api/push, BetaPanel, legacy importer.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-09-12 13:25:06 -04:00

29 lines
988 B
TypeScript

import { describe, expect, it } from 'vitest';
import { betaFile, oldFile } from '../../src/lib/server/fleet/files.js';
import { slugify } from '../../src/lib/server/fleet/scripts.js';
describe('slugify', () => {
it('matches the legacy behavior', () => {
expect(slugify('New HUD Test')).toBe('new-hud-test');
expect(slugify(' --Weird!!! ')).toBe('weird');
expect(slugify('t5_kino_1')).toBe('t5-kino-1');
});
});
describe('betaFile', () => {
it('inserts -beta before the extension', () => {
expect(betaFile('hud.gsc')).toBe('hud-beta.gsc');
expect(betaFile('perks/zom.gsc')).toBe('perks/zom-beta.gsc');
});
it('handles files without extension', () => {
expect(betaFile('README')).toBe('README-beta');
});
});
describe('oldFile', () => {
it('replaces extension with .OLD', () => {
expect(oldFile('hud.gsc')).toBe('hud.OLD');
expect(oldFile('perks/zom.gsc')).toBe('perks/zom.OLD');
});
});