Add test suite (63 tests) and CI workflow, fix Settings API bugs
Some checks failed
Release / Bump version and tag (push) Successful in 4s
Sidecar Release / Bump sidecar version and tag (push) Failing after 3s
Tests / Python Backend Tests (push) Failing after 3s
Tests / Frontend Tests (push) Successful in 8s
Tests / Rust Sidecar Tests (push) Successful in 3m10s
Some checks failed
Release / Bump version and tag (push) Successful in 4s
Sidecar Release / Bump sidecar version and tag (push) Failing after 3s
Tests / Python Backend Tests (push) Failing after 3s
Tests / Frontend Tests (push) Successful in 8s
Tests / Rust Sidecar Tests (push) Successful in 3m10s
Test suite covering all three layers: Python backend (25 tests): - AppController: state machine, start/stop, callbacks, settings reload - API server: REST endpoints, config CRUD, status, devices - Config: dot-notation get/set, persistence, nested paths - Main headless: ready event port format validation Svelte frontend (14 tests via Vitest): - Backend store: exported properties/methods, port derivation, URLs - Config store: method names (fetchConfig not loadConfig), defaults - Transcriptions store: add/clear/plaintext - File extension regression: ensures $state runes only in .svelte.ts Rust sidecar (24 tests via cargo test): - Platform/arch detection, asset name construction - Ready event deserialization (with extra fields tolerance) - Path construction, version read/write, old version cleanup - Zip extraction, SidecarManager lifecycle CI workflow (.gitea/workflows/test.yml): - Runs on push to main and PRs - Three parallel jobs: Python, Frontend, Rust Also fixes three bugs found during test planning: - Settings: /api/check-updates -> GET /api/check-update - Settings: /api/remote/login -> /api/login - Settings: /api/remote/register -> /api/register Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
34
src/lib/stores/file-extension.test.ts
Normal file
34
src/lib/stores/file-extension.test.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
import { describe, it, expect } from "vitest";
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
|
||||
describe("store file extensions", () => {
|
||||
it("test_store_files_use_svelte_ts_extension", () => {
|
||||
const storesDir = path.resolve(__dirname);
|
||||
const files = fs.readdirSync(storesDir);
|
||||
|
||||
// Find .ts files that are NOT .svelte.ts and NOT test files
|
||||
const plainTsFiles = files.filter(
|
||||
(f) =>
|
||||
f.endsWith(".ts") &&
|
||||
!f.endsWith(".svelte.ts") &&
|
||||
!f.endsWith(".test.ts")
|
||||
);
|
||||
|
||||
for (const file of plainTsFiles) {
|
||||
const content = fs.readFileSync(path.join(storesDir, file), "utf-8");
|
||||
expect(content).not.toMatch(
|
||||
/\$state\s*[<(]/,
|
||||
`${file} uses $state() but does not have .svelte.ts extension`
|
||||
);
|
||||
expect(content).not.toMatch(
|
||||
/\$derived\s*[<(]/,
|
||||
`${file} uses $derived() but does not have .svelte.ts extension`
|
||||
);
|
||||
expect(content).not.toMatch(
|
||||
/\$effect\s*[<(]/,
|
||||
`${file} uses $effect() but does not have .svelte.ts extension`
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user