From 819b182a1db89fc1973680c8f735ab65594573af Mon Sep 17 00:00:00 2001 From: Peter Amstutz Date: Wed, 19 Jun 2024 15:51:09 -0400 Subject: [PATCH] 15814: Add cypress fail fast and tweak some process tests Arvados-DCO-1.1-Signed-off-by: Peter Amstutz --- build/run-tests.sh | 6 +++- services/workbench2/Makefile | 5 +-- services/workbench2/cypress.config.ts | 18 +++++----- services/workbench2/cypress/e2e/process.cy.js | 36 +++++++++++++------ services/workbench2/cypress/support/e2e.js | 1 + services/workbench2/package.json | 1 + services/workbench2/yarn.lock | 32 +++++++++++------ 7 files changed, 67 insertions(+), 32 deletions(-) diff --git a/build/run-tests.sh b/build/run-tests.sh index 0eb421454e..1088070b7f 100755 --- a/build/run-tests.sh +++ b/build/run-tests.sh @@ -993,7 +993,11 @@ test_services/workbench2_units() { } test_services/workbench2_integration() { - cd "$WORKSPACE/services/workbench2" && make integration-tests ARVADOS_DIRECTORY="${WORKSPACE}" WORKSPACE="$(pwd)" ${testargs[services/workbench2]} + if [[ -n ${interactive} ]]; then + INTERACTIVE=-i + fi + echo make integration-tests ARVADOS_DIRECTORY="${WORKSPACE}" WORKSPACE="$(pwd)" INTERACTIVE=$INTERACTIVE ${testargs[services/workbench2]} + cd "$WORKSPACE/services/workbench2" && make integration-tests ARVADOS_DIRECTORY="${WORKSPACE}" WORKSPACE="$(pwd)" INTERACTIVE=$INTERACTIVE ${testargs[services/workbench2]} } install_deps() { diff --git a/services/workbench2/Makefile b/services/workbench2/Makefile index 72235b96f7..4b917cd227 100644 --- a/services/workbench2/Makefile +++ b/services/workbench2/Makefile @@ -91,10 +91,11 @@ unit-tests: yarn-install integration-tests: yarn-install check-arvados-directory yarn run cypress install + echo $(INTERACTIVE) ifeq ($(SPECFILE), ALL) - $(WORKSPACE)/tools/run-integration-tests.sh -a $(ARVADOS_DIRECTORY) + $(WORKSPACE)/tools/run-integration-tests.sh $(INTERACTIVE) -a $(ARVADOS_DIRECTORY) else - $(WORKSPACE)/tools/run-integration-tests.sh -a $(ARVADOS_DIRECTORY) -- --spec $(SPECFILE) + $(WORKSPACE)/tools/run-integration-tests.sh $(INTERACTIVE) -a $(ARVADOS_DIRECTORY) -- --spec $(SPECFILE) endif integration-tests-in-docker: workbench2-build-image check-arvados-directory diff --git a/services/workbench2/cypress.config.ts b/services/workbench2/cypress.config.ts index d5698b0bfb..1a3b1ec56e 100644 --- a/services/workbench2/cypress.config.ts +++ b/services/workbench2/cypress.config.ts @@ -13,13 +13,15 @@ export default defineConfig({ e2e: { // We've imported your old cypress plugins here. // You may want to clean this up later by importing these. - setupNodeEvents(on, config) { - return require('./cypress/plugins/index.js')(on, config) - }, - baseUrl: 'https://localhost:3000/', - experimentalRunAllSpecs: true, - // The 2 options below make Electron crash a lot less and Firefox behave better - experimentalMemoryManagement: true, - numTestsKeptInMemory: 0, + setupNodeEvents(on, config) { + require("cypress-fail-fast/plugin")(on, config); + require('./cypress/plugins/index.js')(on, config) + return config; + }, + baseUrl: 'https://localhost:3000/', + experimentalRunAllSpecs: true, + // The 2 options below make Electron crash a lot less and Firefox behave better + experimentalMemoryManagement: true, + numTestsKeptInMemory: 2, }, }) diff --git a/services/workbench2/cypress/e2e/process.cy.js b/services/workbench2/cypress/e2e/process.cy.js index 412576c05e..ea4da31b2b 100644 --- a/services/workbench2/cypress/e2e/process.cy.js +++ b/services/workbench2/cypress/e2e/process.cy.js @@ -145,7 +145,19 @@ describe("Process tests", function () { cy.get("[data-cy=process-details-attributes-runtime-user]").should("not.exist"); }); - // Fake submitted by another user + // Fake submitted by another user to test "runtime user" field. + // + // Need to override both group contents and direct get, + // because it displays the the cached value from + // 'contents' for a few moments while requesting the full + // object. + cy.intercept({ method: "GET", url: "**/arvados/v1/groups/*/contents?*" }, req => { + req.on('response', res => { + res.body.items.forEach(item => { + item.modified_by_user_uuid = "zzzzz-tpzed-000000000000000"; + }); + }); + }); cy.intercept({ method: "GET", url: "**/arvados/v1/container_requests/*" }, req => { req.on('response', res => { res.body.modified_by_user_uuid = "zzzzz-tpzed-000000000000000"; @@ -223,16 +235,18 @@ describe("Process tests", function () { }); }); - cy.getAll("@containerRequest").then(function ([containerRequest]) { - cy.goToPath(`/processes/${containerRequest.uuid}`); - cy.get("[data-cy=process-runtime-status-retry-warning]", { timeout: 7000 }).should("contain", "Process retried 1 time"); - }); - - cy.getAll("@containerRequest").then(function ([containerRequest]) { - containerCount = 3; - cy.goToPath(`/processes/${containerRequest.uuid}`); - cy.get("[data-cy=process-runtime-status-retry-warning]", { timeout: 7000 }).should("contain", "Process retried 2 times"); - }); + cy.getAll("@containerRequest", "@runningContainer").then(function ([containerRequest]) { + cy.goToPath(`/processes/${containerRequest.uuid}`); + cy.reload(); + cy.get("[data-cy=process-runtime-status-retry-warning]", { timeout: 7000 }).should("contain", "Process retried 1 time") + }).as("retry1"); + + cy.getAll("@containerRequest", "@runningContainer", "@retry1").then(function ([containerRequest]) { + containerCount = 3; + cy.goToPath(`/processes/${containerRequest.uuid}`); + cy.reload(); + cy.get("[data-cy=process-runtime-status-retry-warning]", { timeout: 7000 }).should("contain", "Process retried 2 times"); + }); }); it("allows copying processes", function () { diff --git a/services/workbench2/cypress/support/e2e.js b/services/workbench2/cypress/support/e2e.js index 0a89cb5baf..e8b030a32e 100644 --- a/services/workbench2/cypress/support/e2e.js +++ b/services/workbench2/cypress/support/e2e.js @@ -19,6 +19,7 @@ // Import commands.js using ES2015 syntax: import './commands' +import "cypress-fail-fast"; // Alternatively you can use CommonJS syntax: // require('./commands') diff --git a/services/workbench2/package.json b/services/workbench2/package.json index d69185d614..0d35c675ef 100644 --- a/services/workbench2/package.json +++ b/services/workbench2/package.json @@ -45,6 +45,7 @@ "css-loader": "^6.5.1", "css-minimizer-webpack-plugin": "^3.2.0", "cwlts": "1.15.29", + "cypress-fail-fast": "^7.1.0", "date-fns": "^2.28.0", "debounce": "1.2.0", "dompurify": "^3.0.6", diff --git a/services/workbench2/yarn.lock b/services/workbench2/yarn.lock index dbe764e567..cedbcde185 100644 --- a/services/workbench2/yarn.lock +++ b/services/workbench2/yarn.lock @@ -5321,6 +5321,7 @@ __metadata: css-minimizer-webpack-plugin: ^3.2.0 cwlts: 1.15.29 cypress: ^13.6.6 + cypress-fail-fast: ^7.1.0 cypress-wait-until: ^3.0.1 date-fns: ^2.28.0 debounce: 1.2.0 @@ -6243,6 +6244,16 @@ __metadata: languageName: node linkType: hard +"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + "chalk@npm:^2.0.0, chalk@npm:^2.3.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -6254,16 +6265,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - "change-emitter@npm:^0.1.2": version: 0.1.6 resolution: "change-emitter@npm:0.1.6" @@ -7163,6 +7164,17 @@ __metadata: languageName: node linkType: hard +"cypress-fail-fast@npm:^7.1.0": + version: 7.1.0 + resolution: "cypress-fail-fast@npm:7.1.0" + dependencies: + chalk: 4.1.2 + peerDependencies: + cypress: ">=8.0.0" + checksum: 0666d283fc61e015eb99b04047dc9ec796963f50e21acee8e6c0a5ff24fd79cfa54068361ffb05a8c576e71b646b0f86ab4793f91909fcc4ae19a772f113d397 + languageName: node + linkType: hard + "cypress-wait-until@npm:^3.0.1": version: 3.0.1 resolution: "cypress-wait-until@npm:3.0.1" -- 2.30.2