From 294e915b9f0f84b95eb683df111773a1220283a1 Mon Sep 17 00:00:00 2001 From: Zachary Williams Date: Thu, 8 Dec 2022 11:44:24 -0600 Subject: [PATCH 1/3] fix: run-all-specs opens in new tab rather than new browser --- packages/app/cypress/e2e/run-all-specs.cy.ts | 10 ++-- packages/app/src/store/run-all-specs-store.ts | 2 +- .../src/actions/ProjectActions.ts | 12 ++++- packages/graphql/schemas/schema.graphql | 2 +- .../schemaTypes/objectTypes/gql-Mutation.ts | 3 +- packages/server/lib/makeDataContext.ts | 6 +++ .../cache/dev-darwin/snapshot-meta.cache.json | 54 +++++++++---------- 7 files changed, 51 insertions(+), 38 deletions(-) diff --git a/packages/app/cypress/e2e/run-all-specs.cy.ts b/packages/app/cypress/e2e/run-all-specs.cy.ts index 342de684b079..2acc735672f5 100644 --- a/packages/app/cypress/e2e/run-all-specs.cy.ts +++ b/packages/app/cypress/e2e/run-all-specs.cy.ts @@ -45,9 +45,10 @@ describe('run-all-specs', () => { cy.waitForSpecToFinish({ passCount: 2 }) - cy.withCtx((ctx, { specs }) => { + cy.withCtx((ctx, { specs, RUN_ALL_SPECS_KEY }) => { + expect(ctx.actions.project.launchProject).to.have.been.calledWith('e2e', { shouldLaunchNewTab: true }, RUN_ALL_SPECS_KEY) expect(ctx.project.runAllSpecs).to.include.members(specs.map((spec) => spec.relative)) - }, { specs: subDirectorySpecs }) + }, { specs: subDirectorySpecs, RUN_ALL_SPECS_KEY }) for (const spec of subDirectorySpecs) { cy.get('.runnable-title').contains(spec.name) @@ -100,10 +101,9 @@ describe('run-all-specs', () => { clickRunAllSpecs('all') - cy.withCtx((ctx, { specs, runAllSpecsKey }) => { - expect(ctx.actions.project.launchProject).to.have.been.calledWith('e2e', undefined, runAllSpecsKey) + cy.withCtx((ctx, { specs }) => { expect(ctx.project.runAllSpecs).to.include.members(specs.map((spec) => spec.relative)) - }, { specs: Object.values(ALL_SPECS), runAllSpecsKey: RUN_ALL_SPECS_KEY }) + }, { specs: Object.values(ALL_SPECS) }) cy.waitForSpecToFinish({ passCount: 6 }) diff --git a/packages/app/src/store/run-all-specs-store.ts b/packages/app/src/store/run-all-specs-store.ts index 066360cdf46a..d1f50b7bd218 100644 --- a/packages/app/src/store/run-all-specs-store.ts +++ b/packages/app/src/store/run-all-specs-store.ts @@ -22,7 +22,7 @@ query RunAllSpecsData { gql` mutation RunAllSpecs ($specPath: String!, $runAllSpecs: [String!]!) { setRunAllSpecs(runAllSpecs: $runAllSpecs) - launchOpenProject(specPath: $specPath) { + launchOpenProject(specPath: $specPath, shouldLaunchNewTab: true) { id } } diff --git a/packages/data-context/src/actions/ProjectActions.ts b/packages/data-context/src/actions/ProjectActions.ts index 605d499de02b..2a200c767a53 100644 --- a/packages/data-context/src/actions/ProjectActions.ts +++ b/packages/data-context/src/actions/ProjectActions.ts @@ -22,7 +22,7 @@ export interface ProjectApiShape { * order for CT to startup */ openProjectCreate(args: InitializeProjectOptions, options: OpenProjectLaunchOptions): Promise - launchProject(browser: FoundBrowser, spec: Cypress.Spec, options?: OpenProjectLaunchOpts): Promise + launchProject(browser: FoundBrowser, spec: Cypress.Spec, options?: Partial): Promise insertProjectToCache(projectRoot: string): Promise removeProjectFromCache(projectRoot: string): Promise getProjectRootsFromCache(): Promise @@ -46,6 +46,8 @@ export interface ProjectApiShape { emitter: EventEmitter } isListening: (url: string) => Promise + resetBrowserTabsForNextTest(shouldKeepTabOpen: boolean): Promise + resetServer(): void } export interface FindSpecs { @@ -228,7 +230,7 @@ export class ProjectActions { } } - async launchProject (testingType: Cypress.TestingType | null, options?: OpenProjectLaunchOpts, specPath?: string | null) { + async launchProject (testingType: Cypress.TestingType | null, options?: Partial, specPath?: string | null) { if (!this.ctx.currentProject) { return null } @@ -261,6 +263,12 @@ export class ProjectActions { specType: testingType === 'e2e' ? 'integration' : 'component', } + // Used for run-all-specs feature + if (options?.shouldLaunchNewTab) { + await this.api.resetBrowserTabsForNextTest(true) + this.api.resetServer() + } + await this.api.launchProject(browser, activeSpec ?? emptySpec, options) return diff --git a/packages/graphql/schemas/schema.graphql b/packages/graphql/schemas/schema.graphql index 42f5379c2919..2dc07eb675c1 100644 --- a/packages/graphql/schemas/schema.graphql +++ b/packages/graphql/schemas/schema.graphql @@ -1255,7 +1255,7 @@ type Mutation { internal_clearProjectPreferencesCache(projectTitle: String!): Boolean """Launches project from open_project global singleton""" - launchOpenProject(specPath: String): CurrentProject + launchOpenProject(shouldLaunchNewTab: Boolean, specPath: String): CurrentProject """Sets the active browser""" launchpadSetBrowser( diff --git a/packages/graphql/src/schemaTypes/objectTypes/gql-Mutation.ts b/packages/graphql/src/schemaTypes/objectTypes/gql-Mutation.ts index 52fc5dae1699..d47fe99f7413 100644 --- a/packages/graphql/src/schemaTypes/objectTypes/gql-Mutation.ts +++ b/packages/graphql/src/schemaTypes/objectTypes/gql-Mutation.ts @@ -294,10 +294,11 @@ export const mutation = mutationType({ type: CurrentProject, description: 'Launches project from open_project global singleton', args: { + shouldLaunchNewTab: booleanArg(), specPath: stringArg(), }, resolve: async (_, args, ctx) => { - await ctx.actions.project.launchProject(ctx.coreData.currentTestingType, undefined, args.specPath) + await ctx.actions.project.launchProject(ctx.coreData.currentTestingType, { shouldLaunchNewTab: args.shouldLaunchNewTab ?? false }, args.specPath) return ctx.lifecycleManager }, diff --git a/packages/server/lib/makeDataContext.ts b/packages/server/lib/makeDataContext.ts index 466e2f52476d..6f62113decfa 100644 --- a/packages/server/lib/makeDataContext.ts +++ b/packages/server/lib/makeDataContext.ts @@ -155,6 +155,12 @@ export function makeDataContext (options: MakeDataContextOptions): DataContext { return devServer }, isListening, + resetBrowserTabsForNextTest (shouldKeepTabOpen: boolean) { + return openProject.resetBrowserTabsForNextTest(shouldKeepTabOpen) + }, + resetServer () { + return openProject.getProject()?.reset() + }, }, electronApi: { openExternal (url: string) { diff --git a/tooling/v8-snapshot/cache/dev-darwin/snapshot-meta.cache.json b/tooling/v8-snapshot/cache/dev-darwin/snapshot-meta.cache.json index 7e77c05f0d64..20269456f0e3 100644 --- a/tooling/v8-snapshot/cache/dev-darwin/snapshot-meta.cache.json +++ b/tooling/v8-snapshot/cache/dev-darwin/snapshot-meta.cache.json @@ -4,10 +4,6 @@ "./get-stream/buffer-stream.js", "./graceful-fs/polyfills.js", "./lockfile/lockfile.js", - "./node_modules/@babel/traverse/lib/path/comments.js", - "./node_modules/@babel/traverse/lib/path/conversion.js", - "./node_modules/@babel/traverse/lib/path/family.js", - "./node_modules/@babel/traverse/lib/path/introspection.js", "./node_modules/@cspotcode/source-map-support/source-map-support.js", "./node_modules/@cypress/commit-info/node_modules/debug/src/node.js", "./node_modules/@cypress/get-windows-proxy/node_modules/debug/src/node.js", @@ -44,6 +40,10 @@ "./node_modules/tcp-port-used/node_modules/debug/src/node.js", "./node_modules/trash/node_modules/make-dir/index.js", "./node_modules/utif/UTIF.js", + "./packages/config/node_modules/@babel/traverse/lib/path/comments.js", + "./packages/config/node_modules/@babel/traverse/lib/path/conversion.js", + "./packages/config/node_modules/@babel/traverse/lib/path/family.js", + "./packages/config/node_modules/@babel/traverse/lib/path/introspection.js", "./packages/data-context/node_modules/debug/src/node.js", "./packages/data-context/node_modules/minimatch/minimatch.js", "./packages/graphql/node_modules/debug/src/node.js", @@ -73,17 +73,6 @@ "deferred": [ "./node_modules/@babel/generator/lib/node/index.js", "./node_modules/@babel/generator/lib/node/whitespace.js", - "./node_modules/@babel/helper-environment-visitor/lib/index.js", - "./node_modules/@babel/traverse/lib/context.js", - "./node_modules/@babel/traverse/lib/index.js", - "./node_modules/@babel/traverse/lib/path/ancestry.js", - "./node_modules/@babel/traverse/lib/path/context.js", - "./node_modules/@babel/traverse/lib/path/index.js", - "./node_modules/@babel/traverse/lib/path/modification.js", - "./node_modules/@babel/traverse/lib/path/removal.js", - "./node_modules/@babel/traverse/lib/path/replacement.js", - "./node_modules/@babel/traverse/lib/scope/index.js", - "./node_modules/@babel/traverse/lib/traverse-node.js", "./node_modules/@babel/types/lib/definitions/core.js", "./node_modules/@babel/types/lib/definitions/experimental.js", "./node_modules/@babel/types/lib/definitions/flow.js", @@ -632,6 +621,15 @@ "./node_modules/xml2js/lib/xml2js.js", "./node_modules/yauzl/index.js", "./node_modules/zip-stream/index.js", + "./packages/config/node_modules/@babel/traverse/lib/context.js", + "./packages/config/node_modules/@babel/traverse/lib/index.js", + "./packages/config/node_modules/@babel/traverse/lib/path/ancestry.js", + "./packages/config/node_modules/@babel/traverse/lib/path/context.js", + "./packages/config/node_modules/@babel/traverse/lib/path/index.js", + "./packages/config/node_modules/@babel/traverse/lib/path/modification.js", + "./packages/config/node_modules/@babel/traverse/lib/path/removal.js", + "./packages/config/node_modules/@babel/traverse/lib/path/replacement.js", + "./packages/config/node_modules/@babel/traverse/lib/scope/index.js", "./packages/data-context/node_modules/chokidar/index.js", "./packages/data-context/node_modules/chokidar/lib/constants.js", "./packages/data-context/node_modules/chokidar/lib/fsevents-handler.js", @@ -816,18 +814,6 @@ "./node_modules/@babel/template/lib/parse.js", "./node_modules/@babel/template/lib/populate.js", "./node_modules/@babel/template/lib/string.js", - "./node_modules/@babel/traverse/lib/cache.js", - "./node_modules/@babel/traverse/lib/hub.js", - "./node_modules/@babel/traverse/lib/path/evaluation.js", - "./node_modules/@babel/traverse/lib/path/inference/index.js", - "./node_modules/@babel/traverse/lib/path/inference/inferer-reference.js", - "./node_modules/@babel/traverse/lib/path/inference/inferers.js", - "./node_modules/@babel/traverse/lib/path/lib/hoister.js", - "./node_modules/@babel/traverse/lib/path/lib/removal-hooks.js", - "./node_modules/@babel/traverse/lib/path/lib/virtual-types.js", - "./node_modules/@babel/traverse/lib/scope/binding.js", - "./node_modules/@babel/traverse/lib/scope/lib/renamer.js", - "./node_modules/@babel/traverse/lib/visitors.js", "./node_modules/@babel/types/lib/asserts/assertNode.js", "./node_modules/@babel/types/lib/asserts/generated/index.js", "./node_modules/@babel/types/lib/ast-types/generated/index.js", @@ -3295,6 +3281,18 @@ "./node_modules/yallist/yallist.js", "./node_modules/yn/index.js", "./node_modules/yn/lenient.js", + "./packages/config/node_modules/@babel/traverse/lib/cache.js", + "./packages/config/node_modules/@babel/traverse/lib/hub.js", + "./packages/config/node_modules/@babel/traverse/lib/path/evaluation.js", + "./packages/config/node_modules/@babel/traverse/lib/path/inference/index.js", + "./packages/config/node_modules/@babel/traverse/lib/path/inference/inferer-reference.js", + "./packages/config/node_modules/@babel/traverse/lib/path/inference/inferers.js", + "./packages/config/node_modules/@babel/traverse/lib/path/lib/hoister.js", + "./packages/config/node_modules/@babel/traverse/lib/path/lib/removal-hooks.js", + "./packages/config/node_modules/@babel/traverse/lib/path/lib/virtual-types.js", + "./packages/config/node_modules/@babel/traverse/lib/scope/binding.js", + "./packages/config/node_modules/@babel/traverse/lib/scope/lib/renamer.js", + "./packages/config/node_modules/@babel/traverse/lib/visitors.js", "./packages/data-context/node_modules/@babel/code-frame/lib/index.js", "./packages/data-context/node_modules/@babel/parser/lib/index.js", "./packages/data-context/node_modules/anymatch/index.js", @@ -3542,5 +3540,5 @@ "./tooling/v8-snapshot/cache/dev-darwin/snapshot-entry.js" ], "deferredHashFile": "yarn.lock", - "deferredHash": "7da54eecbd832d3cd8ba75441a83e8c69c033664f25df5a2e43c1794d9d149de" + "deferredHash": "468a4c5e1401d9b675a4c746744a49a330bc411d8427447dd1bfdbf7c6bc59d4" } \ No newline at end of file From 4b77905ee121465417d109c26819296348ccb458 Mon Sep 17 00:00:00 2001 From: Zachary Williams Date: Thu, 8 Dec 2022 16:28:04 -0600 Subject: [PATCH 2/3] fix e2e tests --- packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts | 2 +- packages/app/cypress/e2e/top-nav.cy.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts b/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts index 7d1ecdd045d6..46f3f72cff39 100644 --- a/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts +++ b/packages/app/cypress/e2e/cypress-in-cypress-component.cy.ts @@ -147,7 +147,7 @@ describe('Cypress In Cypress CT', { viewportWidth: 1500, defaultCommandTimeout: expect(ctx.actions.browser.setActiveBrowserById).to.have.been.calledWith(browserId) expect(genId).to.eql('firefox-firefox-stable') expect(ctx.actions.project.launchProject).to.have.been.calledWith( - ctx.coreData.currentTestingType, undefined, o.sinon.match(new RegExp('cypress\-in\-cypress\/src\/TestComponent\.spec\.jsx$')), + ctx.coreData.currentTestingType, { shouldLaunchNewTab: false }, o.sinon.match(new RegExp('cypress\-in\-cypress\/src\/TestComponent\.spec\.jsx$')), ) }) }) diff --git a/packages/app/cypress/e2e/top-nav.cy.ts b/packages/app/cypress/e2e/top-nav.cy.ts index ebb3bc16f31f..779f7c824df2 100644 --- a/packages/app/cypress/e2e/top-nav.cy.ts +++ b/packages/app/cypress/e2e/top-nav.cy.ts @@ -110,7 +110,7 @@ describe('App Top Nav Workflows', () => { expect(ctx.actions.browser.setActiveBrowserById).to.have.been.calledWith(browserId) expect(genId).to.eql('edge-chromium-stable') expect(ctx.actions.project.launchProject).to.have.been.calledWith( - ctx.coreData.currentTestingType, undefined, undefined, + ctx.coreData.currentTestingType, { shouldLaunchNewTab: false }, undefined, ) }) }) From 524689802507a0e1c8cc76245d272f2b5a93266f Mon Sep 17 00:00:00 2001 From: Zachary Williams Date: Fri, 9 Dec 2022 15:15:15 -0600 Subject: [PATCH 3/3] reset server rather than project --- packages/server/lib/makeDataContext.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/lib/makeDataContext.ts b/packages/server/lib/makeDataContext.ts index 6f62113decfa..82857e8bc6cb 100644 --- a/packages/server/lib/makeDataContext.ts +++ b/packages/server/lib/makeDataContext.ts @@ -159,7 +159,7 @@ export function makeDataContext (options: MakeDataContextOptions): DataContext { return openProject.resetBrowserTabsForNextTest(shouldKeepTabOpen) }, resetServer () { - return openProject.getProject()?.reset() + return openProject.getProject()?.server.reset() }, }, electronApi: {