Files
e2b-dev--e2b/packages/cli/tests/commands/template/create.test.ts
T
2026-07-13 12:47:58 +08:00

72 lines
2.1 KiB
TypeScript

import { spawnSync } from 'node:child_process'
import * as fs from 'node:fs/promises'
import * as path from 'node:path'
import { afterAll, beforeAll, describe, expect, test } from 'vitest'
const apiKey = process.env.E2B_API_KEY
const domain = process.env.E2B_DOMAIN || 'e2b.app'
const cliPath = path.join(process.cwd(), 'dist', 'index.js')
const templateName = `cli-create-api-key-test-${Date.now()}`
describe('template create cli backend integration', () => {
let testDir: string
beforeAll(async () => {
if (!apiKey) {
throw new Error(
'E2B_API_KEY must be set to run template create backend tests'
)
}
testDir = await fs.mkdtemp('e2b-create-test-')
await fs.writeFile(
path.join(testDir, 'e2b.Dockerfile'),
'FROM ubuntu:latest\n'
)
})
afterAll(async () => {
if (!testDir) return
runCli(['template', 'delete', '--yes', templateName])
await fs.rm(testDir, { recursive: true, force: true })
})
test(
'template create succeeds with E2B_API_KEY alone (no E2B_ACCESS_TOKEN)',
{ timeout: 300_000 },
() => {
const result = runCli([
'template',
'create',
templateName,
'--path',
testDir,
])
const output = String(result.stdout || '') + String(result.stderr || '')
expect(result.status, output).toBe(0)
// Success marker printed by create.ts on a finished build; the failure
// path prints "❌ Template build failed." instead.
expect(output).toContain('✅ Building sandbox template')
expect(output).not.toContain('❌ Template build failed')
// Auth never fell through to the access-token error box.
expect(output).not.toMatch(/You must be logged in/)
}
)
})
function runCli(args: string[]): ReturnType<typeof spawnSync> {
// Intentionally exclude E2B_ACCESS_TOKEN from the child env so this test
// verifies the API-key-only auth path end-to-end.
return spawnSync('node', [cliPath, ...args], {
env: {
PATH: process.env.PATH,
HOME: process.env.HOME,
E2B_DOMAIN: domain,
E2B_API_KEY: apiKey,
},
encoding: 'utf8',
timeout: 300_000,
})
}