hypertwist/website/scripts/render-same-origin-bundle-cli.test.mjs
2026-06-22 07:09:46 +00:00

78 lines
2.8 KiB
JavaScript

import fs from 'node:fs'
import os from 'node:os'
import path from 'node:path'
import { spawnSync } from 'node:child_process'
import { fileURLToPath } from 'node:url'
import { describe, expect, it } from 'vitest'
const currentFile = fileURLToPath(import.meta.url)
const websiteRoot = path.resolve(path.dirname(currentFile), '..')
const renderScript = path.join(websiteRoot, 'scripts', 'render-same-origin-bundle.mjs')
describe('render-same-origin-bundle CLI', () => {
it('writes a validated deployment bundle from a manifest file', () => {
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hypertwist-bundle-cli-'))
const manifestPath = path.join(tempDir, 'bundle.json')
const outDir = path.join(tempDir, 'rendered')
fs.writeFileSync(manifestPath, JSON.stringify({
checkoutRoot: '/srv/hypertwist/current',
publicOrigin: 'https://hypertwist.app',
supportEmail: 'hello@hypertwist.app',
publicDocsUrl: 'https://docs.hypertwist.app',
releaseNotesUrl: 'https://notes.hypertwist.app',
correspondingSourceUrl: 'https://hypertwist.app/open-source/source.zip',
openSourceRepoUrl: 'https://git.scriptoriumai.io/scriptoriumadmin/hypertwist',
operatorCheckoutUrl: 'https://buy.paddle.com/operator',
studioCheckoutUrl: 'https://buy.paddle.com/studio',
windowsDownloadUrl: 'https://downloads.hypertwist.app/windows.exe',
releaseManifestVersion: '1.0.0',
releaseManifestChannel: 'candidate',
windowsRelease: {
buildId: 'win64-1000',
sha256: 'abc123',
fileSizeBytes: 123456789,
publishedAt: '2026-06-22T00:00:00.000Z',
},
server: {
paddleWebhookSecret: 'secret',
paddleProductPlanMap: {
prod_operator: 'operator',
},
paddlePricePlanMap: {
pri_operator: 'operator',
},
},
}, null, 2))
try {
const result = spawnSync(
process.execPath,
[
renderScript,
'--manifest',
manifestPath,
'--out-dir',
outDir,
'--summary',
],
{
cwd: websiteRoot,
encoding: 'utf8',
},
)
expect(result.status).toBe(0)
expect(result.stderr).toBe('')
const summary = JSON.parse(result.stdout)
expect(summary.validationReport.ok).toBe(true)
expect(fs.readFileSync(path.join(outDir, 'website.env'), 'utf8')).toContain('VITE_WINDOWS_DOWNLOAD_URL=https://downloads.hypertwist.app/windows.exe')
expect(fs.readFileSync(path.join(outDir, 'server.env'), 'utf8')).toContain('RELEASE_MANIFEST_VERSION=1.0.0')
expect(fs.readFileSync(path.join(outDir, 'hypertwist.app.conf'), 'utf8')).toContain('server_name hypertwist.app www.hypertwist.app;')
} finally {
fs.rmSync(tempDir, { recursive: true, force: true })
}
})
})