123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- // Copyright 2019-2021 Tauri Programme within The Commons Conservancy
- // SPDX-License-Identifier: Apache-2.0
- // SPDX-License-Identifier: MIT
- import execa from 'execa'
- import fixtures from 'fixturez'
- const f = fixtures(__dirname)
- import path from 'path'
- import fs from 'fs'
- const ctaBinary = path.resolve('./bin/create-tauri-app.js')
- const clijs = path.resolve('../cli.js/')
- const api = path.resolve('../api/')
- const manager = process.env.TAURI_RUN_MANAGER ?? 'npm'
- const recipes = process.env.TAURI_RECIPE
- ? [process.env.TAURI_RECIPE]
- : ['vanillajs', 'reactjs', 'reactts', 'vite', 'vuecli']
- const timeoutLong = 900000
- const timeoutLittleLonger = 930000
- const logOut = false ? 'inherit' : 'pipe'
- beforeAll(async () => {
- const installCLI = await execa('yarn', [], {
- stdio: logOut,
- cwd: clijs,
- timeout: timeoutLong
- })
- const buildCLI = await execa('yarn', ['build-release'], {
- stdio: logOut,
- cwd: clijs,
- timeout: timeoutLong
- })
- const linkCLI = await execa('yarn', ['link'], {
- stdio: logOut,
- cwd: clijs,
- timeout: timeoutLong
- })
- const installAPI = await execa('yarn', [], {
- stdio: logOut,
- cwd: api,
- timeout: timeoutLong
- })
- const buildAPI = await execa('yarn', ['build'], {
- stdio: logOut,
- cwd: api,
- timeout: timeoutLong
- })
- const linkAPI = await execa('yarn', ['link'], {
- stdio: logOut,
- cwd: api,
- timeout: timeoutLong
- })
- }, timeoutLittleLonger)
- describe('CTA', () => {
- describe.each(recipes.map((recipe) => [recipe, 'tauri-app']))(
- `%s recipe`,
- (recipe: string, appName: string) => {
- it(
- 'runs',
- async () => {
- // creates a temp folder to run CTA within (this is our cwd)
- const folder = f.temp()
- const appFolder = path.join(folder, appName)
- // runs CTA with all args set to avoid any prompts
- const cta = await execa(
- 'node',
- [
- ctaBinary,
- '--manager',
- manager,
- '--recipe',
- recipe,
- '--ci',
- '--dev'
- ],
- {
- all: true,
- stdio: logOut,
- cwd: folder,
- timeout: timeoutLong
- }
- )
- // check to make certain it didn't fail anywhere
- expect(cta.failed).toBe(false)
- expect(cta.timedOut).toBe(false)
- expect(cta.isCanceled).toBe(false)
- expect(cta.killed).toBe(false)
- expect(cta.signal).toBe(undefined)
- // run a tauri build to check if what we produced
- // can actually create an app
- // TODO long term we will want to hook this up to a real test harness
- // and then run that test suite instead
- let opts: string[] = []
- if (manager === 'npm') {
- opts = ['run', 'tauri', '--', 'build']
- } else if (manager === 'yarn') {
- opts = ['tauri', 'build']
- }
- const tauriBuild = await execa(manager, opts, {
- all: true,
- stdio: logOut,
- cwd: appFolder,
- timeout: timeoutLong
- })
- expect(tauriBuild.failed).toBe(false)
- expect(tauriBuild.timedOut).toBe(false)
- expect(tauriBuild.isCanceled).toBe(false)
- expect(tauriBuild.killed).toBe(false)
- expect(tauriBuild.signal).toBe(undefined)
- const packageFileOutput: {
- [k: string]: string | object
- } = JSON.parse(
- await fs.promises.readFile(
- path.join(appFolder, 'package.json'),
- 'utf-8'
- )
- )
- expect(packageFileOutput['name']).toBe(appName)
- const assertCustom: { [k: string]: Function } = {
- vanillajs: () => {
- expect(packageFileOutput['scripts']).toMatchObject({
- tauri: 'tauri'
- })
- },
- reactjs: () => {
- expect(packageFileOutput['scripts']).toEqual(
- expect.objectContaining({
- tauri: 'tauri'
- })
- )
- },
- reactts: () => {
- expect(packageFileOutput['scripts']).toEqual(
- expect.objectContaining({
- tauri: 'tauri'
- })
- )
- }
- }
- const getCustomAsserts = assertCustom[recipe]
- if (getCustomAsserts) getCustomAsserts()
- },
- timeoutLittleLonger
- )
- }
- )
- })
|