diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 8e6ed8724..b0df8ba60 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -174,7 +174,7 @@ jobs: TARGET: ${{ matrix.target }} - name: Upload E2E artifacts (${{ matrix.target }}) - if: failure() + if: always() uses: actions/upload-artifact@v4 with: name: e2e-test-results-${{ matrix.target }} diff --git a/e2e/helpers/index.ts b/e2e/helpers/index.ts index a8d63da96..c9d0d8fab 100644 --- a/e2e/helpers/index.ts +++ b/e2e/helpers/index.ts @@ -3,6 +3,7 @@ export { authenticateWithBitbucketDC, authenticateWithBitbucketCloud } from './b export { authenticateWithJiraCloud, authenticateWithJiraDC } from './jira-auth'; export { getIssueFrame, openAtlassianSettings, closeOnboardingQuickPick } from './common'; export { + resetWireMockMappings, cleanupWireMockMapping, setupWireMockMapping, setupSearchMock, diff --git a/e2e/helpers/setup-mock.ts b/e2e/helpers/setup-mock.ts index 1d256a6f0..e62742c2c 100644 --- a/e2e/helpers/setup-mock.ts +++ b/e2e/helpers/setup-mock.ts @@ -6,6 +6,15 @@ import { DetailedSiteInfo } from 'src/atlclients/authInfo'; import { JiraTypes, PullRequestComment } from './types'; import { updateIssueField } from './update-jira-issue'; +/** + * Helper function to reset all WireMock mappings + * This should be called before each test to prevent state pollution from previous tests + */ +export const resetWireMockMappings = async ({ request }: { request: APIRequestContext }) => { + await request.post('http://wiremock-mockedteams:8080/__admin/mappings/reset'); + await request.post('http://wiremock-bitbucket:8080/__admin/mappings/reset'); +}; + /** * Helper function to set up WireMock mapping */ diff --git a/e2e/scenarios/bitbucket/index.ts b/e2e/scenarios/bitbucket/index.ts index 237696ff9..ee2d9e3bd 100644 --- a/e2e/scenarios/bitbucket/index.ts +++ b/e2e/scenarios/bitbucket/index.ts @@ -6,7 +6,6 @@ import { connectRepository } from './connectRepository.spec'; import { createPullRequest } from './createPullRequest.spec'; import { startWorkFlow } from './startWorkFlow.spec'; import { viewPullRequest } from './viewPullRequest.spec'; - export const bitbucketScenarios = [ { name: 'Authenticate with Bitbucket', run: authFlow }, { name: 'Connect repository', run: connectRepository }, diff --git a/e2e/scenarios/bitbucket/startWorkFlow.spec.ts b/e2e/scenarios/bitbucket/startWorkFlow.spec.ts index 06ba0b6a1..c0e7dbdfc 100644 --- a/e2e/scenarios/bitbucket/startWorkFlow.spec.ts +++ b/e2e/scenarios/bitbucket/startWorkFlow.spec.ts @@ -3,6 +3,7 @@ import { authenticateWithJiraCloud, authenticateWithJiraDC, getIssueFrame, + resetWireMockMappings, setupIssueMock, setupSearchMock, } from 'e2e/helpers'; @@ -14,7 +15,10 @@ const CURRENT_STATUS = 'To Do'; const NEXT_STATUS = 'In Progress'; export async function startWorkFlow(page: Page, type: BitbucketTypes, request: APIRequestContext) { - test.setTimeout(50_000); + // This test is large and may run longer on slower machines + test.setTimeout(60_000); + await resetWireMockMappings({ request }); + // Login to Jira if (type === BitbucketTypes.Cloud) { await authenticateWithJiraCloud(page); diff --git a/e2e/tests/jira/jiraCloud.spec.ts b/e2e/tests/jira/jiraCloud.spec.ts index bdc493cad..31e4472f4 100644 --- a/e2e/tests/jira/jiraCloud.spec.ts +++ b/e2e/tests/jira/jiraCloud.spec.ts @@ -1,9 +1,11 @@ import { test } from '@playwright/test'; -import { authenticateWithJiraCloud, closeOnboardingQuickPick } from 'e2e/helpers'; +import { authenticateWithJiraCloud, closeOnboardingQuickPick, resetWireMockMappings } from 'e2e/helpers'; import { JiraTypes } from 'e2e/helpers/types'; import { jiraCloudScenarios, unAuthenticatedJiraScenarios } from 'e2e/scenarios/jira'; test.describe('Jira Cloud', () => { + test.beforeEach(resetWireMockMappings); + // Unauthenticated scenarios for (const scenario of unAuthenticatedJiraScenarios) { test(scenario.name, async ({ page }) => { diff --git a/e2e/tests/jira/jiraDC.spec.ts b/e2e/tests/jira/jiraDC.spec.ts index ba155d566..344e7394b 100644 --- a/e2e/tests/jira/jiraDC.spec.ts +++ b/e2e/tests/jira/jiraDC.spec.ts @@ -1,9 +1,11 @@ import { test } from '@playwright/test'; -import { authenticateWithJiraDC, closeOnboardingQuickPick } from 'e2e/helpers'; +import { authenticateWithJiraDC, closeOnboardingQuickPick, resetWireMockMappings } from 'e2e/helpers'; import { JiraTypes } from 'e2e/helpers/types'; import { jiraDCScenarios } from 'e2e/scenarios/jira'; test.describe('Jira DC', () => { + test.beforeEach(resetWireMockMappings); + for (const scenario of jiraDCScenarios) { test(scenario.name, async ({ page, request }) => { await authenticateWithJiraDC(page); diff --git a/playwright.config.js b/playwright.config.js index 04849c4e0..8ecef57d3 100644 --- a/playwright.config.js +++ b/playwright.config.js @@ -2,6 +2,10 @@ import { defineConfig } from '@playwright/test'; export default defineConfig({ retries: 3, + reporter: [ + ['list'], + ['github'], + ], use: { viewport: { width: 1600,