From bfcf7964f189709673f2c86573f770ac295324be Mon Sep 17 00:00:00 2001 From: estrada9166 Date: Mon, 9 May 2022 14:32:26 -0500 Subject: [PATCH 1/3] fix: use correct path for scaffolding spec on CT --- packages/app/cypress/e2e/specs.cy.ts | 6 +++ .../src/sources/ProjectDataSource.ts | 18 +++++--- .../unit/sources/ProjectDataSource.spec.ts | 44 +++++++++---------- 3 files changed, 39 insertions(+), 29 deletions(-) diff --git a/packages/app/cypress/e2e/specs.cy.ts b/packages/app/cypress/e2e/specs.cy.ts index 231230afc37b..1ff6ce83d2b6 100644 --- a/packages/app/cypress/e2e/specs.cy.ts +++ b/packages/app/cypress/e2e/specs.cy.ts @@ -509,6 +509,8 @@ describe('App: Specs', () => { it('shows success modal when empty spec is created', () => { cy.get('@CreateEmptySpecDialog').within(() => { + cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts')) + cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') cy.findByRole('button', { name: 'Create Spec' }).click() @@ -533,6 +535,8 @@ describe('App: Specs', () => { it('navigates to spec runner when selected', () => { cy.get('@CreateEmptySpecDialog').within(() => { + cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts')) + cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') cy.findByRole('button', { name: 'Create Spec' }).click() @@ -551,6 +555,8 @@ describe('App: Specs', () => { it('displays alert with docs link on new spec', () => { cy.get('@CreateEmptySpecDialog').within(() => { + cy.findByLabelText('Enter a relative path...').invoke('val').should('eq', getPathForPlatform('cypress/component/filename.cy.ts')) + cy.findByLabelText('Enter a relative path...').clear().type('cypress/my-empty-spec.cy.js') cy.findByRole('button', { name: 'Create Spec' }).click() diff --git a/packages/data-context/src/sources/ProjectDataSource.ts b/packages/data-context/src/sources/ProjectDataSource.ts index 6a395c3eba2d..07e0e7f5a9cf 100644 --- a/packages/data-context/src/sources/ProjectDataSource.ts +++ b/packages/data-context/src/sources/ProjectDataSource.ts @@ -1,6 +1,6 @@ import os from 'os' import chokidar from 'chokidar' -import type { ResolvedFromConfig, RESOLVED_FROM, FoundSpec } from '@packages/types' +import type { ResolvedFromConfig, RESOLVED_FROM, FoundSpec, TestingType } from '@packages/types' import { WIZARD_FRAMEWORKS } from '@packages/scaffold-config' import { scanFSForAvailableDependency } from 'create-cypress-tests' import minimatch from 'minimatch' @@ -104,7 +104,7 @@ export function transformSpec ({ } } -export function getDefaultSpecFileName (specPattern: string, fileExtensionToUse?: 'js' | 'ts') { +export function getDefaultSpecFileName (specPattern: string, testingType: TestingType, fileExtensionToUse?: 'js' | 'ts') { function replaceWildCard (s: string, fallback: string) { return s.replace(/\*/g, fallback) } @@ -121,7 +121,7 @@ export function getDefaultSpecFileName (specPattern: string, fileExtensionToUse? dirname = dirname.replace('**', 'cypress') } - const splittedDirname = dirname.split('/').filter((s) => s !== '**').map((x) => replaceWildCard(x, 'e2e')).join('/') + const splittedDirname = dirname.split('/').filter((s) => s !== '**').map((x) => replaceWildCard(x, testingType)).join('/') const fileName = replaceWildCard(parsedGlob.path.filename, 'filename') const extnameWithoutExt = parsedGlob.path.extname.replace(parsedGlob.path.ext, '') @@ -280,13 +280,13 @@ export class ProjectDataSource { } async defaultSpecFileName () { - const defaultFileName = 'cypress/e2e/filename.cy.js' - try { if (!this.ctx.currentProject || !this.ctx.coreData.currentTestingType) { return null } + const defaultFileName = `cypress/${this.ctx.coreData.currentTestingType}/filename.cy.${this.ctx.lifecycleManager.fileExtensionToUse}` + let specPatternSet: string | undefined const { specPattern = [] } = await this.ctx.project.specPatterns() @@ -298,7 +298,11 @@ export class ProjectDataSource { return defaultFileName } - const specFileName = getDefaultSpecFileName(specPatternSet, this.ctx.lifecycleManager.fileExtensionToUse) + if (specPatternSet === defaultSpecPattern[this.ctx.coreData.currentTestingType]) { + return defaultFileName + } + + const specFileName = getDefaultSpecFileName(specPatternSet, this.ctx.coreData.currentTestingType, this.ctx.lifecycleManager.fileExtensionToUse) if (!specFileName) { return defaultFileName @@ -306,7 +310,7 @@ export class ProjectDataSource { return specFileName } catch { - return defaultFileName + return 'cypress/e2e/filename.cy.js' } } diff --git a/packages/data-context/test/unit/sources/ProjectDataSource.spec.ts b/packages/data-context/test/unit/sources/ProjectDataSource.spec.ts index f393ae74adbb..2a864587227a 100644 --- a/packages/data-context/test/unit/sources/ProjectDataSource.spec.ts +++ b/packages/data-context/test/unit/sources/ProjectDataSource.spec.ts @@ -192,31 +192,31 @@ describe('getDefaultSpecFileName', () => { context('dirname', () => { it('returns pattern without change if it is do not a glob', () => { const specPattern = 'cypress/e2e/foo.spec.ts' - const defaultFileName = getDefaultSpecFileName(specPattern) + const defaultFileName = getDefaultSpecFileName(specPattern, 'e2e') expect(defaultFileName).to.eq(specPattern) }) it('remove ** from glob if it is not in the beginning', () => { - const defaultFileName = getDefaultSpecFileName('cypress/**/foo.spec.ts') + const defaultFileName = getDefaultSpecFileName('cypress/**/foo.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/foo.spec.ts') }) it('replace ** for cypress if it starts with **', () => { - const defaultFileName = getDefaultSpecFileName('**/e2e/foo.spec.ts') + const defaultFileName = getDefaultSpecFileName('**/e2e/foo.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/foo.spec.ts') }) it('replace ** for cypress if it starts with ** and omit extra **', () => { - const defaultFileName = getDefaultSpecFileName('**/**/foo.spec.ts') + const defaultFileName = getDefaultSpecFileName('**/**/foo.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/foo.spec.ts') }) it('selects first option if there are multiples possibilities of values', () => { - const defaultFileName = getDefaultSpecFileName('{cypress,tests}/{integration,e2e}/foo.spec.ts') + const defaultFileName = getDefaultSpecFileName('{cypress,tests}/{integration,e2e}/foo.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/integration/foo.spec.ts') }) @@ -224,13 +224,13 @@ describe('getDefaultSpecFileName', () => { context('filename', () => { it('replace * for filename', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/*.spec.ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/*.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/filename.spec.ts') }) it('selects first option if there are multiples possibilities of values', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/{foo,filename}.spec.ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/{foo,filename}.spec.ts', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/foo.spec.ts') }) @@ -238,13 +238,13 @@ describe('getDefaultSpecFileName', () => { context('test extension', () => { it('replace * for filename', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.*.ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.*.ts', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts') }) it('selects first option if there are multiples possibilities of values', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.{spec,cy}.ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.{spec,cy}.ts', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/filename.spec.ts') }) @@ -252,25 +252,25 @@ describe('getDefaultSpecFileName', () => { context('lang extension', () => { it('if project use TS, set TS as extension if it exists in the glob', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.ts', 'ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.ts', 'e2e', 'ts') expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts') }) it('if project use TS, set TS as extension if it exists in the options of extensions', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,ts,tsx}', 'ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,ts,tsx}', 'e2e', 'ts') expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts') }) it('if project use TS, do not set TS as extension if it do not exists in the options of extensions', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,jsx}', 'ts') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{js,jsx}', 'e2e', 'ts') expect(defaultFileName).to.eq('cypress/e2e/filename.cy.js') }) it('selects first option if there are multiples possibilities of values', () => { - const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{ts,js}') + const defaultFileName = getDefaultSpecFileName('cypress/e2e/filename.cy.{ts,js}', 'e2e') expect(defaultFileName).to.eq('cypress/e2e/filename.cy.ts') }) @@ -278,43 +278,43 @@ describe('getDefaultSpecFileName', () => { context('extra cases', () => { it('creates specName for tests/*.js', () => { - const defaultFileName = getDefaultSpecFileName('tests/*.js') + const defaultFileName = getDefaultSpecFileName('tests/*.js', 'e2e') expect(defaultFileName).to.eq('tests/filename.js') }) it('creates specName for src/*-test.js', () => { - const defaultFileName = getDefaultSpecFileName('src/*-test.js') + const defaultFileName = getDefaultSpecFileName('src/*-test.js', 'e2e') expect(defaultFileName).to.eq('src/filename-test.js') }) it('creates specName for src/*.foo.bar.js', () => { - const defaultFileName = getDefaultSpecFileName('src/*.foo.bar.js') + const defaultFileName = getDefaultSpecFileName('src/*.foo.bar.js', 'e2e') expect(defaultFileName).to.eq('src/filename.foo.bar.js') }) it('creates specName for src/prefix.*.test.js', () => { - const defaultFileName = getDefaultSpecFileName('src/prefix.*.test.js') + const defaultFileName = getDefaultSpecFileName('src/prefix.*.test.js', 'e2e') expect(defaultFileName).to.eq('src/prefix.cy.test.js') }) it('creates specName for src/*/*.test.js', () => { - const defaultFileName = getDefaultSpecFileName('src/*/*.test.js') + const defaultFileName = getDefaultSpecFileName('src/*/*.test.js', 'e2e') expect(defaultFileName).to.eq('src/e2e/filename.test.js') }) it('creates specName for src-*/**/*.test.js', () => { - const defaultFileName = getDefaultSpecFileName('src-*/**/*.test.js') + const defaultFileName = getDefaultSpecFileName('src-*/**/*.test.js', 'e2e') expect(defaultFileName).to.eq('src-e2e/filename.test.js') }) it('creates specName for src/*.test.(js|jsx)', () => { - const defaultFileName = getDefaultSpecFileName('src/*.test.(js|jsx)') + const defaultFileName = getDefaultSpecFileName('src/*.test.(js|jsx)', 'e2e') const possiblesFileNames = ['src/filename.test.jsx', 'src/filename.test.js'] @@ -322,7 +322,7 @@ describe('getDefaultSpecFileName', () => { }) it('creates specName for (src|components)/**/*.test.js', () => { - const defaultFileName = getDefaultSpecFileName('(src|components)/**/*.test.js') + const defaultFileName = getDefaultSpecFileName('(src|components)/**/*.test.js', 'e2e') const possiblesFileNames = ['src/filename.test.js', 'components/filename.test.js'] @@ -330,7 +330,7 @@ describe('getDefaultSpecFileName', () => { }) it('creates specName for e2e/**/*.cy.{js,jsx,ts,tsx}', () => { - const defaultFileName = getDefaultSpecFileName('e2e/**/*.cy.{js,jsx,ts,tsx}') + const defaultFileName = getDefaultSpecFileName('e2e/**/*.cy.{js,jsx,ts,tsx}', 'e2e') expect(defaultFileName).to.eq('e2e/filename.cy.js') }) From d4eadecaf864e5febe4f2220689851ad02acd572 Mon Sep 17 00:00:00 2001 From: estrada9166 Date: Mon, 9 May 2022 16:21:02 -0500 Subject: [PATCH 2/3] Refactor code --- packages/data-context/src/sources/ProjectDataSource.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/data-context/src/sources/ProjectDataSource.ts b/packages/data-context/src/sources/ProjectDataSource.ts index 28efa2a01b18..df61afbd548a 100644 --- a/packages/data-context/src/sources/ProjectDataSource.ts +++ b/packages/data-context/src/sources/ProjectDataSource.ts @@ -282,12 +282,14 @@ export class ProjectDataSource { } async defaultSpecFileName () { + const getDefaultFileName = (testingType: TestingType) => `cypress/${testingType}/filename.cy.${this.ctx.lifecycleManager.fileExtensionToUse}` + try { if (!this.ctx.currentProject || !this.ctx.coreData.currentTestingType) { return null } - const defaultFileName = `cypress/${this.ctx.coreData.currentTestingType}/filename.cy.${this.ctx.lifecycleManager.fileExtensionToUse}` + const defaultFileName = getDefaultFileName(this.ctx.coreData.currentTestingType) let specPatternSet: string | undefined const { specPattern = [] } = await this.ctx.project.specPatterns() @@ -312,7 +314,7 @@ export class ProjectDataSource { return specFileName } catch { - return 'cypress/e2e/filename.cy.js' + return getDefaultFileName('e2e') } } From 9f28c9025b19fda886a8d2ab85dfc6ad390be3bc Mon Sep 17 00:00:00 2001 From: estrada9166 Date: Wed, 11 May 2022 21:13:50 -0500 Subject: [PATCH 3/3] Update with feedback --- packages/data-context/src/sources/ProjectDataSource.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/data-context/src/sources/ProjectDataSource.ts b/packages/data-context/src/sources/ProjectDataSource.ts index df61afbd548a..f44803205557 100644 --- a/packages/data-context/src/sources/ProjectDataSource.ts +++ b/packages/data-context/src/sources/ProjectDataSource.ts @@ -314,7 +314,7 @@ export class ProjectDataSource { return specFileName } catch { - return getDefaultFileName('e2e') + return getDefaultFileName(this.ctx.coreData.currentTestingType ?? 'e2e') } }