orca/src/shared/setup-script-imports.test.ts

223 lines
6.1 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import { inspectSetupScriptImportCandidates } from './setup-script-imports'
function makeReader(files: Record<string, string>) {
return async (relativePath: string): Promise<string | null> => files[relativePath] ?? null
}
describe('inspectSetupScriptImportCandidates', () => {
it('imports setup and teardown commands from Superset config', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.superset/config.json': JSON.stringify({
setup: ['./.superset/setup.sh', 'bun install'],
teardown: ['./.superset/teardown.sh'],
run: ['bun dev']
})
})
)
expect(candidates).toEqual([
{
provider: 'superset',
label: 'Superset',
files: ['.superset/config.json'],
setup: './.superset/setup.sh\nbun install',
archive: './.superset/teardown.sh',
unsupportedFields: ['run']
}
])
})
it('applies Superset local before and after setup overlays', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.superset/config.json': JSON.stringify({
setup: ['bun install'],
teardown: ['docker compose down'],
cwd: 'packages/web'
}),
'.superset/config.local.json': JSON.stringify({
setup: {
before: ['corepack enable'],
after: ['bun run db:migrate']
},
teardown: ['docker compose down --remove-orphans'],
run: ['bun dev']
})
})
)
expect(candidates).toEqual([
{
provider: 'superset',
label: 'Superset',
files: ['.superset/config.json', '.superset/config.local.json'],
setup: 'corepack enable\nbun install\nbun run db:migrate',
archive: 'docker compose down --remove-orphans',
unsupportedFields: ['cwd', 'config.local.run']
}
])
})
it('reports unsupported Superset local script object fields', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.superset/config.json': JSON.stringify({
setup: ['bun install']
}),
'.superset/config.local.json': JSON.stringify({
setup: {
before: ['corepack enable'],
after: ['bun run db:migrate'],
cwd: 'packages/web'
}
})
})
)
expect(candidates).toEqual([
{
provider: 'superset',
label: 'Superset',
files: ['.superset/config.json', '.superset/config.local.json'],
setup: 'corepack enable\nbun install\nbun run db:migrate',
archive: undefined,
unsupportedFields: ['config.local.setup.cwd']
}
])
})
it('imports setup commands from cmux project config', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.cmux/cmux.json': JSON.stringify({
commands: [
{
name: 'Run Unit Tests',
keywords: ['test', 'unit'],
command: './scripts/test-unit.sh'
},
{
name: 'Setup',
description: 'Initialize submodules and build dependencies',
keywords: ['setup', 'init', 'install'],
command: './scripts/setup.sh',
confirm: true,
cwd: 'packages/web'
}
]
})
})
)
expect(candidates).toEqual([
{
provider: 'cmux',
label: 'cmux',
files: ['.cmux/cmux.json'],
setup: './scripts/setup.sh',
unsupportedFields: ['commands.1.confirm', 'commands.1.cwd']
}
])
})
it('imports setup commands from root cmux config when project config is absent', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'cmux.json': JSON.stringify({
commands: [
{
title: 'Workspace Setup',
keywords: ['setup'],
command: 'pnpm install'
}
]
})
})
)
expect(candidates).toEqual([
{
provider: 'cmux',
label: 'cmux',
files: ['cmux.json'],
setup: 'pnpm install',
unsupportedFields: []
}
])
})
it('imports setup and archive commands from Conductor config', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'conductor.json': JSON.stringify({
scripts: {
setup: 'pnpm install',
archive: 'pnpm clean',
run: 'pnpm dev'
},
runScriptMode: 'manual'
})
})
)
expect(candidates).toEqual([
{
provider: 'conductor',
label: 'Conductor',
files: ['conductor.json'],
setup: 'pnpm install',
archive: 'pnpm clean',
unsupportedFields: ['runScriptMode', 'scripts.run']
}
])
})
it('imports setup and cleanup scripts from Codex environment config', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.codex/environments/environment.toml': `
[setup]
script = """
npm ci
pnpm build
"""
[cleanup]
script = "pnpm clean"
[actions.test]
command = "pnpm test"
`
})
)
expect(candidates).toEqual([
{
provider: 'codex',
label: 'Codex environment',
files: ['.codex/environments/environment.toml'],
setup: 'npm ci\npnpm build',
archive: 'pnpm clean',
unsupportedFields: ['[actions.test]']
}
])
})
it('ignores malformed or setup-less configs', async () => {
const candidates = await inspectSetupScriptImportCandidates(
makeReader({
'.superset/config.json': '{',
'conductor.json': JSON.stringify({ scripts: { run: 'pnpm dev' } }),
'.codex/environments/environment.toml': '[cleanup]\nscript = "pnpm clean"',
'.cmux/cmux.json': JSON.stringify({
commands: [{ name: 'Build', keywords: ['build'], command: 'pnpm build' }]
})
})
)
expect(candidates).toEqual([])
})
})