11import { Linter } from "eslint"
22import fs from "node:fs"
3+ import os from "node:os"
34import path from "node:path"
45import { expect , test } from "vite-plus/test"
56
@@ -10,6 +11,10 @@ function lint(code: string, filename = "cartridges/app_sfra/cartridge/controller
1011 return linter . verify ( code , recommended , { filename } )
1112}
1213
14+ function createTempTestRoot ( ) : string {
15+ return fs . mkdtempSync ( path . join ( os . tmpdir ( ) , "sfcc-test-root-" ) )
16+ }
17+
1318test ( "allows dw requires" , ( ) => {
1419 const messages = lint ( `
1520 const OrderMgr = require("dw/order/OrderMgr")
@@ -77,15 +82,17 @@ test("ignores dynamic requires", () => {
7782} )
7883
7984test ( "supports checkCartridgeExists option" , ( ) => {
80- const testSuffix = `${ Date . now ( ) } _${ Math . floor ( Math . random ( ) * 1_000_000 ) } `
81- const existingCartridgeName = `app_storefront_${ testSuffix } `
82- const ownCartridgeName = `app_sfra_${ testSuffix } `
83- const cartridgesDir = path . join ( process . cwd ( ) , "cartridges" )
84- const existingCartridge = path . join ( cartridgesDir , existingCartridgeName )
85- const ownCartridge = path . join ( cartridgesDir , ownCartridgeName )
85+ const tempRoot = createTempTestRoot ( )
86+ const tempCartridgesDir = path . join ( tempRoot , "cartridges" )
87+ const ownCartridgeName = "app_sfra"
88+ const existingCartridgeName = "app_storefront"
89+ const existingCartridge = path . join ( tempCartridgesDir , existingCartridgeName )
90+ const ownCartridge = path . join ( tempCartridgesDir , ownCartridgeName )
91+ const filename = "cartridges/app_sfra/cartridge/controllers/Home.js"
8692
8793 fs . mkdirSync ( path . join ( existingCartridge , "cartridge" , "scripts" ) , { recursive : true } )
8894 fs . mkdirSync ( path . join ( ownCartridge , "cartridge" , "scripts" ) , { recursive : true } )
95+ fs . mkdirSync ( path . dirname ( filename ) , { recursive : true } )
8996 fs . writeFileSync (
9097 path . join ( existingCartridge , "cartridge" , "scripts" , "ok.js" ) ,
9198 "module.exports = true" ,
@@ -95,51 +102,51 @@ test("supports checkCartridgeExists option", () => {
95102 "module.exports = true" ,
96103 )
97104
98- const linter = new Linter ( )
99- const config = createRecommendedConfig ( {
100- cartridgesDir : "cartridges" ,
101- sfcc : {
102- checkCartridgeExists : true ,
103- } ,
104- } )
105-
106- const messages = linter . verify (
107- `
108- const ok = require("${ existingCartridgeName } /cartridge/scripts/ok")
109- const okStar = require("*/cartridge/scripts/ok")
110- const okTilde = require("~/cartridge/scripts/local")
111- const bad = require("missing_cartridge/cartridge/scripts/bad")
112- const badStar = require("*/cartridge/scripts/does-not-exist")
113- const badTilde = require("~/cartridge/scripts/does-not-exist")
114- module.exports = { ok, okStar, okTilde, bad, badStar, badTilde }
115- ` ,
116- config ,
117- { filename : `cartridges/${ ownCartridgeName } /cartridge/controllers/Home.js` } ,
118- )
105+ try {
106+ const linter = new Linter ( )
107+ const config = createRecommendedConfig ( {
108+ sfcc : {
109+ checkCartridgeExists : true ,
110+ cartridgesDir : tempCartridgesDir ,
111+ } ,
112+ } )
119113
120- fs . rmSync ( existingCartridge , { recursive : true , force : true } )
121- fs . rmSync ( ownCartridge , { recursive : true , force : true } )
114+ const messages = linter . verify (
115+ `
116+ const ok = require("${ existingCartridgeName } /cartridge/scripts/ok")
117+ const okStar = require("*/cartridge/scripts/ok")
118+ const bad = require("missing_cartridge/cartridge/scripts/bad")
119+ const badStar = require("*/cartridge/scripts/does-not-exist")
120+ module.exports = { ok, okStar, bad, badStar }
121+ ` ,
122+ config ,
123+ { filename } ,
124+ )
122125
123- const hits = messages . filter ( ( m ) => m . ruleId === "sfcc/valid-require-path" )
124- expect ( hits ) . toHaveLength ( 3 )
125- expect ( hits [ 0 ] ?. message . includes ( "missing_cartridge" ) ) . toBe ( true )
126- expect ( hits . some ( ( m ) => m . message . includes ( "*/cartridge/scripts/does-not-exist" ) ) ) . toBe ( true )
127- expect ( hits . some ( ( m ) => m . message . includes ( "~/cartridge/scripts/does-not-exist" ) ) ) . toBe ( true )
126+ const hits = messages . filter ( ( m ) => m . ruleId === "sfcc/valid-require-path" )
127+ expect ( hits ) . toHaveLength ( 2 )
128+ expect ( hits [ 0 ] ?. message . includes ( "missing_cartridge" ) ) . toBe ( true )
129+ expect ( hits . some ( ( m ) => m . message . includes ( "*/cartridge/scripts/does-not-exist" ) ) ) . toBe ( true )
130+ } finally {
131+ fs . rmSync ( tempRoot , { recursive : true , force : true } )
132+ }
128133} )
129134
130135test ( "supports cartridge order from site template" , ( ) => {
131- const testSuffix = ` ${ Date . now ( ) } _ ${ Math . floor ( Math . random ( ) * 1_000_000 ) } `
132- const cartridgeName = `app_storefront_ ${ testSuffix } `
133- const ownCartridgeName = `app_sfra_ ${ testSuffix } `
134- const cartridgesDir = path . join ( process . cwd ( ) , "cartridges" )
135- const targetCartridge = path . join ( cartridgesDir , cartridgeName )
136- const ownCartridge = path . join ( cartridgesDir , ownCartridgeName )
137- const siteTemplatePath = path . join ( process . cwd ( ) , `site_template_ ${ testSuffix } ` )
136+ const tempRoot = createTempTestRoot ( )
137+ const tempCartridgesDir = path . join ( tempRoot , "cartridges" )
138+ const cartridgeName = "app_storefront"
139+ const ownCartridgeName = "app_sfra"
140+ const targetCartridge = path . join ( tempCartridgesDir , cartridgeName )
141+ const ownCartridge = path . join ( tempCartridgesDir , ownCartridgeName )
142+ const siteTemplatePath = path . join ( tempRoot , "site_template" )
138143 const site = "example"
139144 const siteTemplateXmlPath = path . join ( siteTemplatePath , "sites" , site , "site.xml" )
145+ const filename = "cartridges/app_sfra/cartridge/controllers/Home.js"
140146
141147 fs . mkdirSync ( path . join ( targetCartridge , "cartridge" , "scripts" ) , { recursive : true } )
142148 fs . mkdirSync ( path . join ( ownCartridge , "cartridge" , "scripts" ) , { recursive : true } )
149+ fs . mkdirSync ( path . dirname ( filename ) , { recursive : true } )
143150 fs . mkdirSync ( path . dirname ( siteTemplateXmlPath ) , { recursive : true } )
144151 fs . writeFileSync (
145152 path . join ( targetCartridge , "cartridge" , "scripts" , "ok.js" ) ,
@@ -153,9 +160,9 @@ test("supports cartridge order from site template", () => {
153160
154161 const linter = new Linter ( )
155162 const config = createRecommendedConfig ( {
156- cartridgesDir : "cartridges" ,
157163 sfcc : {
158164 checkCartridgeExists : true ,
165+ cartridgesDir : tempCartridgesDir ,
159166 siteTemplatePath,
160167 site,
161168 } ,
@@ -167,14 +174,12 @@ test("supports cartridge order from site template", () => {
167174 module.exports = { okStar }
168175 ` ,
169176 config ,
170- { filename : `cartridges/ ${ ownCartridgeName } /cartridge/controllers/Home.js` } ,
177+ { filename } ,
171178 )
172179
173180 expect ( messages . some ( ( m ) => m . ruleId === "sfcc/valid-require-path" ) ) . toBe ( false )
174181 } finally {
175- fs . rmSync ( targetCartridge , { recursive : true , force : true } )
176- fs . rmSync ( ownCartridge , { recursive : true , force : true } )
177- fs . rmSync ( siteTemplatePath , { recursive : true , force : true } )
182+ fs . rmSync ( tempRoot , { recursive : true , force : true } )
178183 }
179184} )
180185
0 commit comments