Skip to content

Commit 07478cb

Browse files
authored
fix: use correct path for scaffolding spec on CT (#21411)
* fix: use correct path for scaffolding spec on CT * Refactor code * Update with feedback
1 parent 123a930 commit 07478cb

File tree

3 files changed

+40
-28
lines changed

3 files changed

+40
-28
lines changed

packages/app/cypress/e2e/specs.cy.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,8 @@ describe('App: Specs', () => {
509509

510510
it('shows success modal when empty spec is created', () => {
511511
cy.get('@CreateEmptySpecDialog').within(() => {
512+
cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts'))
513+
512514
cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js')
513515

514516
cy.findByRole('button', { name: 'Create Spec' }).click()
@@ -533,6 +535,8 @@ describe('App: Specs', () => {
533535

534536
it('navigates to spec runner when selected', () => {
535537
cy.get('@CreateEmptySpecDialog').within(() => {
538+
cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts'))
539+
536540
cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js')
537541

538542
cy.findByRole('button', { name: 'Create Spec' }).click()
@@ -551,6 +555,8 @@ describe('App: Specs', () => {
551555

552556
it('displays alert with docs link on new spec', () => {
553557
cy.get('@CreateEmptySpecDialog').within(() => {
558+
cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts'))
559+
554560
cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js')
555561

556562
cy.findByRole('button', { name: 'Create Spec' }).click()

packages/data-context/src/sources/ProjectDataSource.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import os from 'os'
22
import chokidar from 'chokidar'
3-
import type { ResolvedFromConfig, RESOLVED_FROM, FoundSpec } from '@packages/types'
3+
import type { ResolvedFromConfig, RESOLVED_FROM, FoundSpec, TestingType } from '@packages/types'
44
import { WIZARD_FRAMEWORKS } from '@packages/scaffold-config'
55
import { scanFSForAvailableDependency } from 'create-cypress-tests'
66
import minimatch from 'minimatch'
@@ -104,7 +104,7 @@ export function transformSpec ({
104104
}
105105
}
106106

107-
export function getDefaultSpecFileName (specPattern: string, fileExtensionToUse?: 'js' | 'ts') {
107+
export function getDefaultSpecFileName (specPattern: string, testingType: TestingType, fileExtensionToUse?: 'js' | 'ts') {
108108
function replaceWildCard (s: string, fallback: string) {
109109
return s.replace(/\*/g, fallback)
110110
}
@@ -121,7 +121,7 @@ export function getDefaultSpecFileName (specPattern: string, fileExtensionToUse?
121121
dirname = dirname.replace('**', 'cypress')
122122
}
123123

124-
const splittedDirname = dirname.split('/').filter((s) => s !== '**').map((x) => replaceWildCard(x, 'e2e')).join('/')
124+
const splittedDirname = dirname.split('/').filter((s) => s !== '**').map((x) => replaceWildCard(x, testingType)).join('/')
125125
const fileName = replaceWildCard(parsedGlob.path.filename, 'filename')
126126

127127
const extnameWithoutExt = parsedGlob.path.extname.replace(parsedGlob.path.ext, '')
@@ -282,13 +282,15 @@ export class ProjectDataSource {
282282
}
283283

284284
async defaultSpecFileName () {
285-
const defaultFileName = 'cypress/e2e/filename.cy.js'
285+
const getDefaultFileName = (testingType: TestingType) => `cypress/${testingType}/filename.cy.${this.ctx.lifecycleManager.fileExtensionToUse}`
286286

287287
try {
288288
if (!this.ctx.currentProject || !this.ctx.coreData.currentTestingType) {
289289
return null
290290
}
291291

292+
const defaultFileName = getDefaultFileName(this.ctx.coreData.currentTestingType)
293+
292294
let specPatternSet: string | undefined
293295
const { specPattern = [] } = await this.ctx.project.specPatterns()
294296

@@ -300,15 +302,19 @@ export class ProjectDataSource {
300302
return defaultFileName
301303
}
302304

303-
const specFileName = getDefaultSpecFileName(specPatternSet, this.ctx.lifecycleManager.fileExtensionToUse)
305+
if (specPatternSet === defaultSpecPattern[this.ctx.coreData.currentTestingType]) {
306+
return defaultFileName
307+
}
308+
309+
const specFileName = getDefaultSpecFileName(specPatternSet, this.ctx.coreData.currentTestingType, this.ctx.lifecycleManager.fileExtensionToUse)
304310

305311
if (!specFileName) {
306312
return defaultFileName
307313
}
308314

309315
return specFileName
310316
} catch {
311-
return defaultFileName
317+
return getDefaultFileName(this.ctx.coreData.currentTestingType ?? 'e2e')
312318
}
313319
}
314320

packages/data-context/test/unit/sources/ProjectDataSource.spec.ts

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -192,145 +192,145 @@ describe('getDefaultSpecFileName', () => {
192192
context('dirname', () => {
193193
it('returns pattern without change if it is do not a glob', () => {
194194
const specPattern = 'cypress/e2e/foo.spec.ts'
195-
const defaultFileName = getDefaultSpecFileName(specPattern)
195+
const defaultFileName = getDefaultSpecFileName(specPattern, 'e2e')
196196

197197
expect(defaultFileName).to.eq(specPattern)
198198
})
199199

200200
it('remove ** from glob if it is not in the beginning', () => {
201-
const defaultFileName = getDefaultSpecFileName('cypress/**/foo.spec.ts')
201+
const defaultFileName = getDefaultSpecFileName('cypress/**/foo.spec.ts', 'e2e')
202202

203203
expect(defaultFileName).to.eq('cypress/foo.spec.ts')
204204
})
205205

206206
it('replace ** for cypress if it starts with **', () => {
207-
const defaultFileName = getDefaultSpecFileName('**/e2e/foo.spec.ts')
207+
const defaultFileName = getDefaultSpecFileName('**/e2e/foo.spec.ts', 'e2e')
208208

209209
expect(defaultFileName).to.eq('cypress/e2e/foo.spec.ts')
210210
})
211211

212212
it('replace ** for cypress if it starts with ** and omit extra **', () => {
213-
const defaultFileName = getDefaultSpecFileName('**/**/foo.spec.ts')
213+
const defaultFileName = getDefaultSpecFileName('**/**/foo.spec.ts', 'e2e')
214214

215215
expect(defaultFileName).to.eq('cypress/foo.spec.ts')
216216
})
217217

218218
it('selects first option if there are multiples possibilities of values', () => {
219-
const defaultFileName = getDefaultSpecFileName('{cypress,tests}/{integration,e2e}/foo.spec.ts')
219+
const defaultFileName = getDefaultSpecFileName('{cypress,tests}/{integration,e2e}/foo.spec.ts', 'e2e')
220220

221221
expect(defaultFileName).to.eq('cypress/integration/foo.spec.ts')
222222
})
223223
})
224224

225225
context('filename', () => {
226226
it('replace * for filename', () => {
227-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/*.spec.ts')
227+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/*.spec.ts', 'e2e')
228228

229229
expect(defaultFileName).to.eq('cypress/e2e/filename.spec.ts')
230230
})
231231

232232
it('selects first option if there are multiples possibilities of values', () => {
233-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/{foo,filename}.spec.ts')
233+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/{foo,filename}.spec.ts', 'e2e')
234234

235235
expect(defaultFileName).to.eq('cypress/e2e/foo.spec.ts')
236236
})
237237
})
238238

239239
context('test extension', () => {
240240
it('replace * for filename', () => {
241-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.*.ts')
241+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.*.ts', 'e2e')
242242

243243
expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts')
244244
})
245245

246246
it('selects first option if there are multiples possibilities of values', () => {
247-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.{spec,cy}.ts')
247+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.{spec,cy}.ts', 'e2e')
248248

249249
expect(defaultFileName).to.eq('cypress/e2e/filename.spec.ts')
250250
})
251251
})
252252

253253
context('lang extension', () => {
254254
it('if project use TS, set TS as extension if it exists in the glob', () => {
255-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.ts', 'ts')
255+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.ts', 'e2e', 'ts')
256256

257257
expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts')
258258
})
259259

260260
it('if project use TS, set TS as extension if it exists in the options of extensions', () => {
261-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,ts,tsx}', 'ts')
261+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,ts,tsx}', 'e2e', 'ts')
262262

263263
expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts')
264264
})
265265

266266
it('if project use TS, do not set TS as extension if it do not exists in the options of extensions', () => {
267-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,jsx}', 'ts')
267+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,jsx}', 'e2e', 'ts')
268268

269269
expect(defaultFileName).to.eq('cypress/e2e/filename.cy.js')
270270
})
271271

272272
it('selects first option if there are multiples possibilities of values', () => {
273-
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{ts,js}')
273+
const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{ts,js}', 'e2e')
274274

275275
expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts')
276276
})
277277
})
278278

279279
context('extra cases', () => {
280280
it('creates specName for tests/*.js', () => {
281-
const defaultFileName = getDefaultSpecFileName('tests/*.js')
281+
const defaultFileName = getDefaultSpecFileName('tests/*.js', 'e2e')
282282

283283
expect(defaultFileName).to.eq('tests/filename.js')
284284
})
285285

286286
it('creates specName for src/*-test.js', () => {
287-
const defaultFileName = getDefaultSpecFileName('src/*-test.js')
287+
const defaultFileName = getDefaultSpecFileName('src/*-test.js', 'e2e')
288288

289289
expect(defaultFileName).to.eq('src/filename-test.js')
290290
})
291291

292292
it('creates specName for src/*.foo.bar.js', () => {
293-
const defaultFileName = getDefaultSpecFileName('src/*.foo.bar.js')
293+
const defaultFileName = getDefaultSpecFileName('src/*.foo.bar.js', 'e2e')
294294

295295
expect(defaultFileName).to.eq('src/filename.foo.bar.js')
296296
})
297297

298298
it('creates specName for src/prefix.*.test.js', () => {
299-
const defaultFileName = getDefaultSpecFileName('src/prefix.*.test.js')
299+
const defaultFileName = getDefaultSpecFileName('src/prefix.*.test.js', 'e2e')
300300

301301
expect(defaultFileName).to.eq('src/prefix.cy.test.js')
302302
})
303303

304304
it('creates specName for src/*/*.test.js', () => {
305-
const defaultFileName = getDefaultSpecFileName('src/*/*.test.js')
305+
const defaultFileName = getDefaultSpecFileName('src/*/*.test.js', 'e2e')
306306

307307
expect(defaultFileName).to.eq('src/e2e/filename.test.js')
308308
})
309309

310310
it('creates specName for src-*/**/*.test.js', () => {
311-
const defaultFileName = getDefaultSpecFileName('src-*/**/*.test.js')
311+
const defaultFileName = getDefaultSpecFileName('src-*/**/*.test.js', 'e2e')
312312

313313
expect(defaultFileName).to.eq('src-e2e/filename.test.js')
314314
})
315315

316316
it('creates specName for src/*.test.(js|jsx)', () => {
317-
const defaultFileName = getDefaultSpecFileName('src/*.test.(js|jsx)')
317+
const defaultFileName = getDefaultSpecFileName('src/*.test.(js|jsx)', 'e2e')
318318

319319
const possiblesFileNames = ['src/filename.test.jsx', 'src/filename.test.js']
320320

321321
expect(possiblesFileNames.includes(defaultFileName)).to.eq(true)
322322
})
323323

324324
it('creates specName for (src|components)/**/*.test.js', () => {
325-
const defaultFileName = getDefaultSpecFileName('(src|components)/**/*.test.js')
325+
const defaultFileName = getDefaultSpecFileName('(src|components)/**/*.test.js', 'e2e')
326326

327327
const possiblesFileNames = ['src/filename.test.js', 'components/filename.test.js']
328328

329329
expect(possiblesFileNames.includes(defaultFileName)).to.eq(true)
330330
})
331331

332332
it('creates specName for e2e/**/*.cy.{js,jsx,ts,tsx}', () => {
333-
const defaultFileName = getDefaultSpecFileName('e2e/**/*.cy.{js,jsx,ts,tsx}')
333+
const defaultFileName = getDefaultSpecFileName('e2e/**/*.cy.{js,jsx,ts,tsx}', 'e2e')
334334

335335
expect(defaultFileName).to.eq('e2e/filename.cy.js')
336336
})

0 commit comments

Comments
 (0)