diff --git a/.circleci/config.yml b/.circleci/config.yml index 70b91eac36cd803f7c527c34fd8fe262d2e1dc47..ef419db159a0169bc64931c1a642b9845b39066f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -861,10 +861,10 @@ jobs: default: clojure-and-node-and-browsers cypress-group: type: string - only-single-database: - type: boolean - default: false - test-files-location: + source-folder: + type: string + default: "" + test-files: type: string default: "" before-steps: @@ -889,7 +889,7 @@ jobs: <<: *CacheKeyUberjar - steps: << parameters.before-steps >> command: | - run test-cypress-no-build <<# parameters.only-single-database >> --folder << parameters.test-files-location >> <</ parameters.only-single-database >> + run test-cypress-no-build <<# parameters.test-files >> --spec << parameters.test-files >> <</ parameters.test-files >> --folder << parameters.source-folder >> after-steps: - store_artifacts: path: /home/circleci/metabase/metabase/cypress @@ -1156,10 +1156,81 @@ workflows: matrix: parameters: edition: ["ee", "oss"] - name: e2e-tests-<< matrix.edition >> + name: e2e-tests-admin-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "admin-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/admin + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-collections-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "collections-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/collections + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-dashboard-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "dashboard-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/dashboard + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-onboarding-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "onboarding-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/onboarding + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-native-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "native-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/native + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-question-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "question-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/question + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-sharing-<< matrix.edition >> + requires: + - build-uberjar-<< matrix.edition >> + cypress-group: "sharing-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/sharing + + - fe-tests-cypress: + matrix: + parameters: + edition: ["ee", "oss"] + name: e2e-tests-visualizations-<< matrix.edition >> requires: - build-uberjar-<< matrix.edition >> - cypress-group: "default-<< matrix.edition >>" + cypress-group: "visualizations-<< matrix.edition >>" + source-folder: frontend/test/metabase/scenarios/visualizations - fe-tests-cypress: name: e2e-tests-mongo-4-<< matrix.edition >> @@ -1167,8 +1238,7 @@ workflows: - build-uberjar-<< matrix.edition >> e: fe-mongo-4 cypress-group: "mongo" - only-single-database: true - test-files-location: frontend/test/metabase-db/mongo + source-folder: frontend/test/metabase-db/mongo before-steps: - wait-for-port: port: 27017 @@ -1180,8 +1250,7 @@ workflows: - build-uberjar-<< matrix.edition >> e: fe-postgres-12 cypress-group: "postgres" - only-single-database: true - test-files-location: frontend/test/metabase-db/postgres + source-folder: frontend/test/metabase-db/postgres before-steps: - wait-for-port: port: 5432 @@ -1193,8 +1262,7 @@ workflows: - build-uberjar-<< matrix.edition >> e: fe-mysql-8 cypress-group: "mysql" - only-single-database: true - test-files-location: frontend/test/metabase-db/mysql + source-folder: frontend/test/metabase-db/mysql before-steps: - wait-for-port: port: 3306 diff --git a/frontend/test/__runner__/run_cypress_tests.js b/frontend/test/__runner__/run_cypress_tests.js index 9cb9f0149e20653f074376d3c8cd9275908cd266..64c8bc844fb3234e0d7529a7fbd1224edeb9122b 100644 --- a/frontend/test/__runner__/run_cypress_tests.js +++ b/frontend/test/__runner__/run_cypress_tests.js @@ -13,10 +13,12 @@ const server = BackendResource.get({ dbKey: "" }); // --spec <single-spec-path> - Specifies a path to a single test file const userArgs = process.argv.slice(2); const isOpenMode = userArgs.includes("--open"); -const sourceFolder = userArgs.includes("--folder"); -const singleFile = userArgs.includes("--spec"); +const isFolderFlag = userArgs.includes("--folder"); +const isSpecFlag = userArgs.includes("--spec"); const sourceFolderLocation = userArgs[userArgs.indexOf("--folder") + 1]; -const singleFileName = userArgs[userArgs.indexOf("--spec") + 1]; +const specs = userArgs[userArgs.indexOf("--spec") + 1]; +const isSingleSpec = !specs.match(/,/); +const testFiles = isSingleSpec ? specs : specs.split(","); function readFile(fileName) { return new Promise(function(resolve, reject) { @@ -38,46 +40,40 @@ const init = async () => { ); } - if (sourceFolder) { - console.log(chalk.bold(`Running tests in '${sourceFolderLocation}'`)); - } + const logMessage = isFolderFlag + ? `Running tests in '${sourceFolderLocation}'` + : `Running '${testFiles}'`; - if (singleFile) { - console.log(chalk.bold(`Running single spec '${singleFileName}'`)); - } + printBold(logMessage); try { const version = await readFile( __dirname + "/../../../resources/version.properties", ); - console.log(chalk.bold("Running e2e test runner with this build:")); + printBold("Running e2e test runner with this build:"); process.stdout.write(chalk.cyan(version)); - console.log( - chalk.bold( - "If that version seems too old, please run `./bin/build version uberjar`.\n", - ), + printBold( + "If that version seems too old, please run `./bin/build version uberjar`.\n", ); } catch (e) { - console.log( - chalk.bold( - "No version file found. Please run `./bin/build version uberjar`.", - ), + printBold( + "No version file found. Please run `./bin/build version uberjar`.", ); process.exit(1); } - console.log(chalk.bold("Starting backend")); + printBold("Starting backend"); await BackendResource.start(server); - console.log(chalk.bold("Generating snapshots")); + printBold("Generating snapshots"); await generateSnapshots(); - console.log(chalk.bold("Starting Cypress")); + printBold("Starting Cypress"); const baseConfig = { baseUrl: server.host }; - const folderConfig = sourceFolder && { + const folderConfig = isFolderFlag && { integrationFolder: sourceFolderLocation, }; - const specsConfig = singleFile && { testFiles: singleFileName }; + const specsConfig = isSpecFlag && { testFiles }; const ignoreConfig = // if we're not running specific tests, avoid including db and smoketests folderConfig || specsConfig @@ -127,7 +123,7 @@ const init = async () => { }; const cleanup = async (exitCode = 0) => { - console.log(chalk.bold("Cleaning up...")); + printBold("Cleaning up..."); await BackendResource.stop(server); process.exit(exitCode); }; @@ -163,3 +159,7 @@ async function generateSnapshots() { cypressProcess.on("exit", resolve); }); } + +function printBold(message) { + console.log(chalk.bold(message)); +} diff --git a/frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js b/frontend/test/metabase/scenarios/admin/audit/ad-hoc.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/audit/ad-hoc.cy.spec.js rename to frontend/test/metabase/scenarios/admin/audit/ad-hoc.cy.spec.js diff --git a/frontend/test/metabase/scenarios/audit/auditing.cy.spec.js b/frontend/test/metabase/scenarios/admin/audit/auditing.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/audit/auditing.cy.spec.js rename to frontend/test/metabase/scenarios/admin/audit/auditing.cy.spec.js diff --git a/frontend/test/metabase/scenarios/permissions.cy.spec.js b/frontend/test/metabase/scenarios/collections/permissions-baseline.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/permissions.cy.spec.js rename to frontend/test/metabase/scenarios/collections/permissions-baseline.cy.spec.js diff --git a/frontend/test/metabase/scenarios/question/data_ref.cy.spec.js b/frontend/test/metabase/scenarios/native/data_ref.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/question/data_ref.cy.spec.js rename to frontend/test/metabase/scenarios/native/data_ref.cy.spec.js diff --git a/frontend/test/metabase/scenarios/question/native.cy.spec.js b/frontend/test/metabase/scenarios/native/native.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/question/native.cy.spec.js rename to frontend/test/metabase/scenarios/native/native.cy.spec.js diff --git a/frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js b/frontend/test/metabase/scenarios/native/native_subquery.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/question/native_subquery.cy.spec.js rename to frontend/test/metabase/scenarios/native/native_subquery.cy.spec.js diff --git a/frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js b/frontend/test/metabase/scenarios/native/snippets/snippet-permissions.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/snippets/snippet-permissions.cy.spec.js rename to frontend/test/metabase/scenarios/native/snippets/snippet-permissions.cy.spec.js diff --git a/frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js b/frontend/test/metabase/scenarios/native/snippets/snippets.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/snippets/snippets.cy.spec.js rename to frontend/test/metabase/scenarios/native/snippets/snippets.cy.spec.js diff --git a/frontend/test/metabase/scenarios/auth/signin.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/auth/signin.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/auth/signin.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/auth/signin.cy.spec.js diff --git a/frontend/test/metabase/scenarios/auth/sso.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/auth/sso.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/auth/sso.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/auth/sso.cy.spec.js diff --git a/frontend/test/metabase/scenarios/home/activity-page.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/home/activity-page.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/home/activity-page.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/home/activity-page.cy.spec.js diff --git a/frontend/test/metabase/scenarios/home/overworld.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/home/overworld.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/home/overworld.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/home/overworld.cy.spec.js diff --git a/frontend/test/metabase/scenarios/home/search.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/home/search.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/home/search.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/home/search.cy.spec.js diff --git a/frontend/test/metabase/scenarios/reference/databases.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/reference/databases.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/reference/databases.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/reference/databases.cy.spec.js diff --git a/frontend/test/metabase/scenarios/reference/metrics.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/reference/metrics.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/reference/metrics.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/reference/metrics.cy.spec.js diff --git a/frontend/test/metabase/scenarios/auth/search.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/search.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/auth/search.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/search.cy.spec.js diff --git a/frontend/test/metabase/scenarios/setup/setup.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/setup/setup.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/setup/setup.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/setup/setup.cy.spec.js diff --git a/frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js b/frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/setup/user_settings.cy.spec.js rename to frontend/test/metabase/scenarios/onboarding/setup/user_settings.cy.spec.js diff --git a/frontend/test/metabase/scenarios/internal/question.cy.spec.js b/frontend/test/metabase/scenarios/question/internal/question.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/internal/question.cy.spec.js rename to frontend/test/metabase/scenarios/question/internal/question.cy.spec.js diff --git a/frontend/test/metabase/scenarios/alert/alert.cy.spec.js b/frontend/test/metabase/scenarios/sharing/alert/alert.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/alert/alert.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/alert/alert.cy.spec.js diff --git a/frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js b/frontend/test/metabase/scenarios/sharing/alert/alert_auth.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/alert/alert_auth.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/alert/alert_auth.cy.spec.js diff --git a/frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js b/frontend/test/metabase/scenarios/sharing/alert/email_alert.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/alert/email_alert.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/alert/email_alert.cy.spec.js diff --git a/frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js b/frontend/test/metabase/scenarios/sharing/embed.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/dashboard/embed.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/embed.cy.spec.js diff --git a/frontend/test/metabase/scenarios/public/public.cy.spec.js b/frontend/test/metabase/scenarios/sharing/public.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/public/public.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/public.cy.spec.js diff --git a/frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js b/frontend/test/metabase/scenarios/sharing/pulse.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/pulse/pulse.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/pulse.cy.spec.js diff --git a/frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js b/frontend/test/metabase/scenarios/sharing/subscriptions.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/dashboard/subscriptions.cy.spec.js rename to frontend/test/metabase/scenarios/sharing/subscriptions.cy.spec.js diff --git a/frontend/test/metabase/scenarios/question/trendline.cy.spec.js b/frontend/test/metabase/scenarios/visualizations/trendline.cy.spec.js similarity index 100% rename from frontend/test/metabase/scenarios/question/trendline.cy.spec.js rename to frontend/test/metabase/scenarios/visualizations/trendline.cy.spec.js