51 lines
2.2 KiB
JavaScript
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}`);
|