diff options
Diffstat (limited to 'packages/create-astro/test/utils.js')
-rw-r--r-- | packages/create-astro/test/utils.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/packages/create-astro/test/utils.js b/packages/create-astro/test/utils.js new file mode 100644 index 000000000..dfae93c33 --- /dev/null +++ b/packages/create-astro/test/utils.js @@ -0,0 +1,63 @@ +import fs from 'node:fs'; +import { before, beforeEach } from 'node:test'; +import { stripVTControlCharacters } from 'node:util'; +import { setStdout } from '../dist/index.js'; + +export function setup() { + const ctx = { messages: [] }; + before(() => { + setStdout( + Object.assign({}, process.stdout, { + write(buf) { + ctx.messages.push(stripVTControlCharacters(String(buf)).trim()); + return true; + }, + }), + ); + }); + beforeEach(() => { + ctx.messages = []; + }); + + return { + messages() { + return ctx.messages; + }, + length() { + return ctx.messages.length; + }, + hasMessage(content) { + return !!ctx.messages.find((msg) => msg.includes(content)); + }, + }; +} + +const resetEmptyFixture = () => + fs.promises.rm(new URL('./fixtures/empty/tsconfig.json', import.meta.url)); + +const resetNotEmptyFixture = async () => { + const packagePath = new URL('./fixtures/not-empty/package.json', import.meta.url); + const tsconfigPath = new URL('./fixtures/not-empty/tsconfig.json', import.meta.url); + + const packageJsonData = JSON.parse( + await fs.promises.readFile(packagePath, { encoding: 'utf-8' }), + ); + const overriddenPackageJson = Object.assign(packageJsonData, { + scripts: { + dev: 'astro dev', + build: 'astro build', + preview: 'astro preview', + }, + dependencies: undefined, + }); + + return Promise.all([ + fs.promises.writeFile(packagePath, JSON.stringify(overriddenPackageJson, null, 2), { + encoding: 'utf-8', + }), + fs.promises.writeFile(tsconfigPath, '{}', { encoding: 'utf-8' }), + ]); +}; + +export const resetFixtures = () => + Promise.allSettled([resetEmptyFixture(), resetNotEmptyFixture()]); |