From b364f649af3a95d82befbdad28f5541f28c733ee Mon Sep 17 00:00:00 2001 From: rickstaa Date: Sun, 25 Sep 2022 17:48:40 +0200 Subject: [PATCH] ci: add e2e vercel test action This commit adds several end-to-end tests that can be used to test whether the Vercel Preview deployment successfully returns the cards. --- .github/workflows/e2e-test.yml | 20 +++++++++++++++ jest.config.js | 6 +++++ jest.e2e.config.js | 7 ++++++ package.json | 3 ++- tests/e2e/e2e.test.js | 46 ++++++++++++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/e2e-test.yml create mode 100644 jest.e2e.config.js create mode 100644 tests/e2e/e2e.test.js diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml new file mode 100644 index 00000000000000..4699b67d5ba15f --- /dev/null +++ b/.github/workflows/e2e-test.yml @@ -0,0 +1,20 @@ +name: Test Deployment +on: + deployment_status: + +jobs: + preview: + if: + github.event_name == 'deployment_status' && + github.event.deployment_status.state == 'success' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install dependencies + run: npm ci + env: + CI: true + - name: Run end-to-end tests. + run: npm run test:e2e + env: + VERCEL_PREVIEW_URL: ${{ github.event.deployment_status.target_url }} diff --git a/jest.config.js b/jest.config.js index 312d88ad8e023a..b4578cf5aaad5a 100644 --- a/jest.config.js +++ b/jest.config.js @@ -3,4 +3,10 @@ export default { transform: {}, testEnvironment: "jsdom", coverageProvider: "v8", + testPathIgnorePatterns: ["/node_modules/", "/tests/e2e/"], + modulePathIgnorePatterns: ["/node_modules/", "/tests/e2e/"], + coveragePathIgnorePatterns: [ + "/node_modules/", + "/tests/E2E/", + ], }; diff --git a/jest.e2e.config.js b/jest.e2e.config.js new file mode 100644 index 00000000000000..b298cbfadaf243 --- /dev/null +++ b/jest.e2e.config.js @@ -0,0 +1,7 @@ +export default { + clearMocks: true, + transform: {}, + testEnvironment: "jsdom", + coverageProvider: "v8", + testMatch: ["/tests/e2e/**/*.test.js"], +}; diff --git a/package.json b/package.json index c2562293401453..b1bce12bfe7bc7 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --coverage", "test:watch": "node --experimental-vm-modules node_modules/jest/bin/jest.js --watch", "test:update:snapshot": "node --experimental-vm-modules node_modules/jest/bin/jest.js -u", + "test:e2e": "node --experimental-vm-modules node_modules/jest/bin/jest.js --config jest.e2e.config.js", "theme-readme-gen": "node scripts/generate-theme-doc", "preview-theme": "node scripts/preview-theme", "generate-langs-json": "node scripts/generate-langs-json", @@ -17,7 +18,7 @@ "author": "Anurag Hazra", "license": "MIT", "devDependencies": { - "@actions/core": "^1.2.4", + "@actions/core": "^1.9.1", "@actions/github": "^4.0.0", "@testing-library/dom": "^8.17.1", "@testing-library/jest-dom": "^5.16.5", diff --git a/tests/e2e/e2e.test.js b/tests/e2e/e2e.test.js new file mode 100644 index 00000000000000..38c78385af3034 --- /dev/null +++ b/tests/e2e/e2e.test.js @@ -0,0 +1,46 @@ +/** + * @file Contains end-to-end tests for the vercel preview instance. + */ +import { describe } from "@jest/globals"; +import axios from "axios"; +import dotenv from "dotenv"; +dotenv.config(); + +describe("Fetch Cards", () => { + let VERCEL_PREVIEW_URL; + + beforeAll(() => { + VERCEL_PREVIEW_URL = process.env.VERCEL_PREVIEW_URL; + console.debug(`VERCEL_PREVIEW_URL: ${VERCEL_PREVIEW_URL}`); + }); + + test("retrieve stats card", async () => { + expect(VERCEL_PREVIEW_URL).toBeDefined(); + await expect( + axios.get(`${VERCEL_PREVIEW_URL}/api?username=anuraghazra`), + ).resolves.not.toThrow(); + }); + + test("retrieve language card", async () => { + expect(VERCEL_PREVIEW_URL).toBeDefined(); + await expect( + axios.get(`${VERCEL_PREVIEW_URL}/api/top-langs/?username=anuraghazra`), + ).resolves.not.toThrow(); + }); + + test("retrieve WakaTime card", async () => { + expect(VERCEL_PREVIEW_URL).toBeDefined(); + await expect( + axios.get(`${VERCEL_PREVIEW_URL}/api/wakatime?username=willianrod`), + ).resolves.not.toThrow(); + }); + + test("retrieve repo card", async () => { + expect(VERCEL_PREVIEW_URL).toBeDefined(); + await expect( + axios.get( + `${VERCEL_PREVIEW_URL}/api/pin/?username=anuraghazra&repo=github-readme-stats`, + ), + ).resolves.not.toThrow(); + }); +});