1
- import { execaNode } from "execa" ;
2
- import { renameSync } from "node:fs" ;
1
+ import { execa , execaNode } from "execa" ;
3
2
import { join , resolve } from "node:path" ;
4
3
import { typecheckProject } from "../src/commands/deploy" ;
5
4
import { readConfig } from "../src/utilities/configFiles" ;
6
5
import { rm } from "node:fs/promises" ;
6
+ import { readFileSync } from "node:fs" ;
7
7
8
8
type TestCase = {
9
9
name : string ;
@@ -22,21 +22,50 @@ const allTestCases: TestCase[] = [
22
22
] ;
23
23
24
24
const testCases = process . env . MOD
25
- ? [ allTestCases . find ( ( { name } ) => process . env . MOD === name ) ]
25
+ ? allTestCases . filter ( ( { name } ) => process . env . MOD === name )
26
26
: allTestCases ;
27
27
28
+ const commandPath = resolve ( join ( process . cwd ( ) , "dist/e2e.js" ) ) ;
29
+ const logLevel = process . env . LOG || "log" ;
30
+
28
31
if ( testCases . length > 0 ) {
29
- describe . each ( testCases as TestCase [ ] ) ( "fixture $name" , ( { name, skipTypecheck } ) => {
32
+ describe . each ( testCases ) ( "fixture $name" , ( { name, skipTypecheck } ) => {
33
+ const packageManager = process . env . PM || "npm" ;
30
34
const fixtureDir = resolve ( join ( process . cwd ( ) , "e2e/fixtures" , name ) ) ;
31
- const commandPath = resolve ( join ( process . cwd ( ) , "dist/e2e.js" ) ) ;
32
- const logLevel = process . env . LOG || "log" ;
33
35
34
36
beforeAll ( async ( ) => {
35
- await rm ( resolve ( join ( fixtureDir , ".trigger" ) ) , { recursive : true } ) ;
36
- // await rm(resolve(join(fixtureDir, "node_modules")), { recursive: true });
37
- // await rm(resolve(join(fixtureDir, ".pnpm_store")), { recursive: true });
37
+ await rm ( resolve ( join ( fixtureDir , ".trigger" ) ) , { force : true , recursive : true } ) ;
38
+ await rm ( resolve ( join ( fixtureDir , "node_modules" ) ) , { force : true , recursive : true } ) ;
38
39
} ) ;
39
40
41
+ test (
42
+ "installs" ,
43
+ async ( ) => {
44
+ await expect (
45
+ ( async ( ) => {
46
+ if ( [ "pnpm" , "yarn" ] . includes ( packageManager ) ) {
47
+ const buffer = readFileSync ( resolve ( join ( fixtureDir , "package.json" ) ) , "utf8" ) ;
48
+ const pkgJSON = JSON . parse ( buffer . toString ( ) ) ;
49
+ const version = pkgJSON . engines [ packageManager ] ;
50
+ console . log (
51
+ `Detected ${ packageManager } @${ version } from package.json 'engines' field`
52
+ ) ;
53
+ const { stdout } = await execa ( "corepack" , [ "use" , `${ packageManager } @${ version } ` ] , {
54
+ cwd : fixtureDir ,
55
+ } ) ;
56
+ console . log ( stdout ) ;
57
+ } else {
58
+ const { stdout } = await execa ( packageManager , installArgs ( packageManager ) , {
59
+ cwd : fixtureDir ,
60
+ } ) ;
61
+ console . log ( stdout ) ;
62
+ }
63
+ } ) ( )
64
+ ) . resolves . not . toThrowError ( ) ;
65
+ } ,
66
+ { timeout : 60_000 }
67
+ ) ;
68
+
40
69
test (
41
70
"compiles" ,
42
71
async ( ) => {
@@ -68,70 +97,21 @@ if (testCases.length > 0) {
68
97
) ;
69
98
} ) ;
70
99
} else if ( process . env . MOD ) {
71
- throw new Error ( `Unknown fixture ${ process . env . MOD } ` ) ;
100
+ throw new Error ( `Unknown fixture ' ${ process . env . MOD } ' ` ) ;
72
101
} else {
73
102
throw new Error ( "Nothing to test" ) ;
74
103
}
75
104
76
- // For now to avoid changes in codebase.
77
- function togglePackageManager ( toggle : boolean , dir : string , packageManager ?: string ) {
105
+ function installArgs ( packageManager : string ) {
78
106
switch ( packageManager ) {
79
107
case "bun" :
80
- renameSync (
81
- join ( dir , `pnpm-lock${ toggle ? "" : ".muted" } .yaml` ) ,
82
- join ( dir , `pnpm-lock${ toggle ? ".muted" : "" } .yaml` )
83
- ) ;
84
- renameSync (
85
- join ( dir , `yarn${ toggle ? "" : ".muted" } .lock` ) ,
86
- join ( dir , `yarn${ toggle ? ".muted" : "" } .lock` )
87
- ) ;
88
- renameSync (
89
- join ( dir , `package-lock${ toggle ? "" : ".muted" } .json` ) ,
90
- join ( dir , `package-lock${ toggle ? ".muted" : "" } .json` )
91
- ) ;
92
- break ;
108
+ return [ "install" , "--frozen-lockfile" ] ;
93
109
case "pnpm" :
94
- renameSync (
95
- join ( dir , `bun${ toggle ? "" : ".muted" } .lockb` ) ,
96
- join ( dir , `bun${ toggle ? ".muted" : "" } .lockb` )
97
- ) ;
98
- renameSync (
99
- join ( dir , `yarn${ toggle ? "" : ".muted" } .lock` ) ,
100
- join ( dir , `yarn${ toggle ? ".muted" : "" } .lock` )
101
- ) ;
102
- renameSync (
103
- join ( dir , `package-lock${ toggle ? "" : ".muted" } .json` ) ,
104
- join ( dir , `package-lock${ toggle ? ".muted" : "" } .json` )
105
- ) ;
106
- break ;
107
110
case "yarn" :
108
- renameSync (
109
- join ( dir , `bun${ toggle ? "" : ".muted" } .lockb` ) ,
110
- join ( dir , `bun${ toggle ? ".muted" : "" } .lockb` )
111
- ) ;
112
- renameSync (
113
- join ( dir , `pnpm-lock${ toggle ? "" : ".muted" } .yaml` ) ,
114
- join ( dir , `pnpm-lock${ toggle ? ".muted" : "" } .yaml` )
115
- ) ;
116
- renameSync (
117
- join ( dir , `package-lock${ toggle ? "" : ".muted" } .json` ) ,
118
- join ( dir , `package-lock${ toggle ? ".muted" : "" } .json` )
119
- ) ;
120
- break ;
111
+ throw new Error ( "pnpm and yarn version must be read from 'package.json' 'engines' field" ) ;
121
112
case "npm" :
113
+ return [ "ci" , "--no-audit" ] ;
122
114
default :
123
- renameSync (
124
- join ( dir , `pnpm-lock${ toggle ? "" : ".muted" } .yaml` ) ,
125
- join ( dir , `pnpm-lock${ toggle ? ".muted" : "" } .yaml` )
126
- ) ;
127
- renameSync (
128
- join ( dir , `bun${ toggle ? "" : ".muted" } .lockb` ) ,
129
- join ( dir , `bun${ toggle ? ".muted" : "" } .lockb` )
130
- ) ;
131
- renameSync (
132
- join ( dir , `yarn${ toggle ? "" : ".muted" } .lock` ) ,
133
- join ( dir , `yarn${ toggle ? ".muted" : "" } .lock` )
134
- ) ;
135
- break ;
115
+ throw new Error ( `Unknown package manager '${ packageManager } '` ) ;
136
116
}
137
117
}
0 commit comments