From 7aaebf7dfeb825d71fa10189fd5040cf1e41b7fd Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Wed, 21 Jan 2026 00:03:53 +1030 Subject: [PATCH] feat(tests): implement test runner script for specific test execution --- deno.json | 2 +- scripts/test.ts | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 scripts/test.ts diff --git a/deno.json b/deno.json index 712bac7..5787a8b 100644 --- a/deno.json +++ b/deno.json @@ -38,7 +38,7 @@ "check": "deno task check:server && deno task check:client", "check:server": "deno check src/lib/server/**/*.ts", "check:client": "npx svelte-check --tsconfig ./tsconfig.json", - "test": "APP_BASE_PATH=./dist/test deno test src/tests --allow-read --allow-write --allow-env", + "test": "deno run -A scripts/test.ts", "test:watch": "APP_BASE_PATH=./dist/test deno test src/tests --allow-read --allow-write --allow-env --watch", "generate:api-types": "npx openapi-typescript docs/api/v1/openapi.yaml -o src/lib/api/v1.d.ts", "docker:build": "docker compose -f compose.dev.yml build --no-cache", diff --git a/scripts/test.ts b/scripts/test.ts new file mode 100644 index 0000000..d87e661 --- /dev/null +++ b/scripts/test.ts @@ -0,0 +1,57 @@ +/** + * Test runner script that allows running specific test files or directories + * + * Usage: + * deno task test # Run all tests + * deno task test filters # Run src/tests/upgrades/filters.test.ts + * deno task test upgrades # Run all tests in src/tests/upgrades/ + * deno task test logger # Run all tests in src/tests/logger/ + */ + +const aliases: Record = { + // Individual test files + filters: 'src/tests/upgrades/filters.test.ts', + normalize: 'src/tests/upgrades/normalize.test.ts', + selectors: 'src/tests/upgrades/selectors.test.ts', + backup: 'src/tests/jobs/createBackup.test.ts', + cleanup: 'src/tests/logger/cleanupLogs.test.ts', + + // Directories + upgrades: 'src/tests/upgrades', + jobs: 'src/tests/jobs', + logger: 'src/tests/logger' +}; + +// Get the test target from args +const target = Deno.args[0]; +const testPath = target ? aliases[target] ?? target : 'src/tests'; + +// Check if it's a valid path +if (target && !aliases[target]) { + // Check if it's a direct path + try { + await Deno.stat(target); + } catch { + console.error(`Unknown test target: "${target}"`); + console.error('\nAvailable aliases:'); + for (const [alias, path] of Object.entries(aliases)) { + console.error(` ${alias.padEnd(12)} -> ${path}`); + } + Deno.exit(1); + } +} + +console.log(`Running tests: ${testPath}\n`); + +const cmd = new Deno.Command('deno', { + args: ['test', testPath, '--allow-read', '--allow-write', '--allow-env'], + env: { + ...Deno.env.toObject(), + APP_BASE_PATH: './dist/test' + }, + stdout: 'inherit', + stderr: 'inherit' +}); + +const { code } = await cmd.output(); +Deno.exit(code);