diff --git a/.github/workflows/elixir.yml b/.github/workflows/elixir.yml index cc753a094de7..fc70a08e12d5 100644 --- a/.github/workflows/elixir.yml +++ b/.github/workflows/elixir.yml @@ -108,7 +108,6 @@ jobs: MINIO_HOST_FOR_CLICKHOUSE: "172.17.0.1" MIX_TEST_PARTITION: ${{ matrix.mix_test_partition }} - - run: mix test --include slow --include migrations --max-failures 1 --warnings-as-errors --partitions 6 if: env.MIX_ENV == 'ce_test' env: @@ -219,8 +218,7 @@ jobs: - name: Install E2E Playwright Browsers if: steps.playwright-cache.outputs.cache-hit != 'true' - working-directory: ./e2e - run: npx playwright install --with-deps chromium + run: npx --prefix ./e2e playwright install --with-deps chromium - name: Run E2E Playwright tests run: npm --prefix ./e2e test -- --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --reporter=blob @@ -243,7 +241,7 @@ jobs: - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 with: node-version: 23.2.0 - cache: 'npm' + cache: "npm" cache-dependency-path: e2e/package-lock.json - name: Install dependencies run: npm --prefix ./e2e ci @@ -254,10 +252,17 @@ jobs: path: all-e2e-blob-reports pattern: e2e-blob-report-* merge-multiple: true - - name: Merge into list report - working-directory: ./e2e - run: npx playwright merge-reports --reporter list ../all-e2e-blob-reports + run: npx --prefix ./e2e playwright merge-reports all-e2e-blob-reports --reporter list,html && ls ./** + + - name: Upload E2E HTML report to GitHub Actions Artifacts + if: ${{ !cancelled() }} + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 + with: + name: e2e-html-report + path: playwright-report + retention-days: 1 + archive: false static: name: Static checks (format, credo, dialyzer) diff --git a/e2e/playwright.config.ts b/e2e/playwright.config.ts index d9e9e062aec2..43f3bcadace1 100644 --- a/e2e/playwright.config.ts +++ b/e2e/playwright.config.ts @@ -20,6 +20,7 @@ export default defineConfig({ reporter: 'list', /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ use: { + screenshot: 'on-first-failure', /* Base URL to use in actions like `await page.goto('')`. */ baseURL, diff --git a/e2e/tests/dashboard/filtering.spec.ts b/e2e/tests/dashboard/filtering.spec.ts index a106e02a7990..26ac2cb929d7 100644 --- a/e2e/tests/dashboard/filtering.spec.ts +++ b/e2e/tests/dashboard/filtering.spec.ts @@ -569,8 +569,7 @@ test.describe('location filtering tests', () => { name: 'pageview', country_code: 'EE', subdivision1_code: 'EE-37', - city_geoname_id: 588_409, - browser: 'Chrome' + city_geoname_id: 588_409 } ] }) @@ -619,18 +618,6 @@ test.describe('location filtering tests', () => { await test.step('filtering by city', async () => { const cityFilterRow = filterRow(page, 'city') const cityInput = page.getByPlaceholder('Select a City') - const browserFilterRow = filterRow(page, 'browser') - const browserInput = page.getByPlaceholder('Select a Browser', { - exact: true - }) - - // Add a browser filter so city ends up as the 4th pill. This ensures it overflows - // into "See more" regardless of viewport width. - await filterButton(page).click() - await filterItemButton(page, 'Browser').click() - await browserInput.fill('chrom') - await suggestedItem(browserFilterRow, 'Chrome').click() - await applyFilterButton(page).click() await filterButton(page).click() await locationFilterButton(page).click() @@ -640,7 +627,9 @@ test.describe('location filtering tests', () => { await applyFilterButton(page).click() - await page.getByRole('button', { name: /See.*more/ }).click() + await page + .getByRole('button', { name: 'See 1 more filter and actions' }) + .click() await expect( page.getByRole('link', { name: 'City is Tallinn' }) ).toBeVisible() @@ -769,9 +758,7 @@ test.describe('operating system filtering tests', () => { { name: 'pageview', operating_system: 'Windows', - operating_system_version: '11', - browser: 'Chrome', - browser_version: '14.0.7' + operating_system_version: '11' }, { name: 'pageview', @@ -811,28 +798,6 @@ test.describe('operating system filtering tests', () => { const operatingSystemVersionInput = page.getByPlaceholder( 'Select an Operating system version' ) - const browserFilterRow = filterRow(page, 'browser') - const browserVersionFilterRow = filterRow(page, 'browser_version') - const browserInput = page.getByPlaceholder('Select a Browser', { - exact: true - }) - const browserVersionInput = page.getByPlaceholder( - 'Select a Browser Version' - ) - - // Add browser and browser version filters so OS version ends up as the 4th pill. - // This ensures it overflows into "See more" regardless of viewport width - await filterButton(page).click() - await filterItemButton(page, 'Browser').click() - await browserInput.fill('chrom') - await suggestedItem(browserFilterRow, 'Chrome').click() - await applyFilterButton(page).click() - - await filterButton(page).click() - await filterItemButton(page, 'Browser').click() - await browserVersionInput.fill('14') - await suggestedItem(browserVersionFilterRow, '14.0.7').click() - await applyFilterButton(page).click() await filterButton(page).click() await operatingSystemFilterButton(page).click() @@ -842,7 +807,9 @@ test.describe('operating system filtering tests', () => { await applyFilterButton(page).click() - await page.getByRole('button', { name: /See.*more/ }).click() + await page + .getByRole('button', { name: 'See 1 more filter and actions' }) + .click() await expect( page.getByRole('link', { name: 'Operating system version is 11' }) ).toBeVisible()