Files
reimburse/tests/run-ui-checks.mjs
T
2026-09-20 16:31:24 +08:00

51 lines
2.2 KiB
JavaScript

import { spawnSync } from 'node:child_process';
import { mkdtempSync, readdirSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join, dirname, resolve } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = resolve(dirname(fileURLToPath(import.meta.url)), '..');
const output = mkdtempSync(join(tmpdir(), 'receipt-ui-checks-'));
console.log(`Validation output: ${output}`);
const domain = ['Models', 'MatchExplanation'];
const cases = {
PairConnectionLayout: ['PairConnectionLayout'],
WorkspacePresentation: [...domain, 'WorkspacePresentation', 'MatchedPPTSelection'],
TemplateMappingValidation: ['ExpenseTemplate', 'TemplateMappingValidation'],
MatchedPPTSelection: [...domain, 'MatchedPPTSelection'],
ExpenseSummary: [...domain, 'MatchedPPTSelection', 'ExpenseSummary'],
MatchExplanation: domain,
ExpenseTemplate: ['ExpenseTemplate'],
ExpensePreview: ['ExpenseTemplate', 'ExpensePreview', 'SpreadsheetLayout'],
FolderImportSource: ['FolderImportSource'],
PayeeProfile: ['PayeeProfile'],
AdminAttachments: ['AdminModels'],
AdminPPTSelection: ['AdminModels'],
AdminPolicyEditor: ['AdminModels', 'AdminStore'],
};
function run(command, args) {
const result = spawnSync(command, args, { cwd: root, stdio: 'inherit' });
if (result.error) throw result.error;
if (result.status !== 0) process.exit(result.status ?? 1);
}
if (!process.argv.includes('--render-only')) {
for (const [name, sources] of Object.entries(cases)) {
const binary = join(output, name);
run('swiftc', [...sources.map(source => `reimburse/${source}.swift`), `tests/${name}Tests.swift`, '-o', binary]);
run(binary, []);
}
console.log(`${Object.keys(cases).length} Swift test suites passed.`);
}
if (process.argv.includes('--render') || process.argv.includes('--render-only')) {
const sources = readdirSync(join(root, 'reimburse'))
.filter(name => name.endsWith('.swift') && name !== 'reimburseApp.swift')
.map(name => `reimburse/${name}`);
const binary = join(output, 'InterfaceSmokeTests');
run('swiftc', [...sources, 'tests/InterfaceSmokeTests.swift', '-o', binary]);
run(binary, [join(output, 'screenshots')]);
}
console.log(`Validation output: ${output}`);