|
|
|
import fs from 'fs-extra'
|
|
|
|
import getPort from 'get-port'
|
|
|
|
import { nanoid } from 'nanoid'
|
|
|
|
import path from 'path'
|
|
|
|
import { chromium } from 'playwright-chromium'
|
|
|
|
import { fileURLToPath, URL } from 'url'
|
|
|
|
import { createServer, scaffold, ScaffoldThemeType } from 'vitepress'
|
|
|
|
|
|
|
|
const tempDir = fileURLToPath(new URL('./.temp', import.meta.url))
|
|
|
|
const getTempRoot = () => path.join(tempDir, nanoid())
|
|
|
|
|
|
|
|
const browser = await chromium.launch({
|
|
|
|
headless: !process.env.DEBUG,
|
|
|
|
args: process.env.CI
|
|
|
|
? ['--no-sandbox', '--disable-setuid-sandbox']
|
|
|
|
: undefined
|
|
|
|
})
|
|
|
|
|
|
|
|
const page = await browser.newPage()
|
|
|
|
|
|
|
|
const themes = [
|
|
|
|
ScaffoldThemeType.Default,
|
|
|
|
ScaffoldThemeType.DefaultCustom,
|
|
|
|
ScaffoldThemeType.Custom
|
|
|
|
]
|
|
|
|
const usingTs = [false, true]
|
|
|
|
const variations = themes.flatMap((theme) =>
|
|
|
|
usingTs.map(
|
|
|
|
(useTs) => [`${theme}${useTs ? ' + ts' : ''}`, { theme, useTs }] as const
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
afterAll(async () => {
|
|
|
|
await page.close()
|
|
|
|
await browser.close()
|
|
|
|
await fs.remove(tempDir)
|
|
|
|
})
|
|
|
|
|
|
|
|
test.each(variations)('init %s', async (_, { theme, useTs }) => {
|
|
|
|
const root = getTempRoot()
|
|
|
|
await fs.remove(root)
|
|
|
|
scaffold({ root, theme, useTs, injectNpmScripts: false })
|
|
|
|
|
|
|
|
const port = await getPort()
|
|
|
|
const server = await createServer(root, { port })
|
|
|
|
await server.listen()
|
|
|
|
|
|
|
|
async function goto(path: string) {
|
|
|
|
await page.goto(`http://localhost:${port}${path}`)
|
|
|
|
await page.waitForSelector('#app div')
|
|
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
|
|
await goto('/')
|
|
|
|
expect(await page.textContent('h1')).toMatch('My Awesome Project')
|
|
|
|
|
|
|
|
await page.click('a[href="/markdown-examples.html"]')
|
|
|
|
await page.waitForFunction('document.querySelector("pre code")')
|
|
|
|
expect(await page.textContent('h1')).toMatch('Markdown Extension Examples')
|
|
|
|
|
|
|
|
await goto('/')
|
|
|
|
expect(await page.textContent('h1')).toMatch('My Awesome Project')
|
|
|
|
|
|
|
|
await page.click('a[href="/api-examples.html"]')
|
|
|
|
await page.waitForFunction('document.querySelector("pre code")')
|
|
|
|
expect(await page.textContent('h1')).toMatch('Runtime API Examples')
|
|
|
|
|
|
|
|
// teardown
|
|
|
|
} finally {
|
|
|
|
await server.close()
|
|
|
|
}
|
|
|
|
})
|