From a13ff87d0bad2434857f828d26fd635a95a307c2 Mon Sep 17 00:00:00 2001 From: roble Date: Thu, 19 Mar 2026 09:42:54 +0000 Subject: [PATCH] refactor: simplify test structure by removing redundant beforeEach in suggest feature tests --- tests/e2e/tests/roadmap.basic.spec.ts | 280 ++++++++++++------------ tests/e2e/tests/roadmap.suggest.spec.ts | 4 - 2 files changed, 140 insertions(+), 144 deletions(-) diff --git a/tests/e2e/tests/roadmap.basic.spec.ts b/tests/e2e/tests/roadmap.basic.spec.ts index bdccc23..a78fcb5 100644 --- a/tests/e2e/tests/roadmap.basic.spec.ts +++ b/tests/e2e/tests/roadmap.basic.spec.ts @@ -1,188 +1,188 @@ import { expect, test } from '@e2e/fixtures'; -test.describe('Roadmap — auth-required page', () => { +test.describe('Roadmap', () => { test.describe.configure({ mode: 'serial' }); - test.beforeEach(async ({ laravel }) => { - await laravel.callFunction('Modules\\Roadmap\\Tests\\Support\\RoadmapTestHelper::clean'); - }); - - test('guest is redirected to login page', async ({ page }) => { - await page.goto('/roadmap'); + test.describe('Roadmap — auth-required page', () => { + test.beforeEach(async ({ laravel }) => { + await laravel.callFunction('Modules\\Roadmap\\Tests\\Support\\RoadmapTestHelper::clean'); + }); - await expect(page).toHaveURL(/login/); - }); + test('guest is redirected to login page', async ({ page }) => { + await page.goto('/roadmap'); - test('approved item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { - await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Dark mode support', - status: 'approved', - type: 'feature', + await expect(page).toHaveURL(/login/); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); - await page.waitForLoadState('networkidle'); + test('approved item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { + await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Dark mode support', + status: 'approved', + type: 'feature', + }); - await expect(page.getByText('Dark mode support')).toBeVisible(); - }); + await loginAs(credentials.user); + await page.goto('/roadmap'); + await page.waitForLoadState('networkidle'); - test('pending approval item is not visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { - await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Hidden suggestion', - status: 'pending_approval', - type: 'feature', + await expect(page.getByText('Dark mode support')).toBeVisible(); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); + test('pending approval item is not visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { + await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Hidden suggestion', + status: 'pending_approval', + type: 'feature', + }); - await expect(page.getByText('Hidden suggestion')).not.toBeVisible(); - }); + await loginAs(credentials.user); + await page.goto('/roadmap'); - test('rejected item is not visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { - await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Rejected idea', - status: 'rejected', - type: 'feature', + await expect(page.getByText('Hidden suggestion')).not.toBeVisible(); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); + test('rejected item is not visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { + await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Rejected idea', + status: 'rejected', + type: 'feature', + }); - await expect(page.getByText('Rejected idea')).not.toBeVisible(); - }); + await loginAs(credentials.user); + await page.goto('/roadmap'); - test('in_progress item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { - await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Work in progress', - status: 'in_progress', - type: 'feature', + await expect(page.getByText('Rejected idea')).not.toBeVisible(); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); + test('in_progress item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { + await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Work in progress', + status: 'in_progress', + type: 'feature', + }); - await expect(page.getByText('Work in progress')).toBeVisible(); - }); + await loginAs(credentials.user); + await page.goto('/roadmap'); - test('completed item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { - await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Done feature', - status: 'completed', - type: 'feature', + await expect(page.getByText('Work in progress')).toBeVisible(); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); - - await expect(page.getByText('Done feature')).toBeVisible(); - }); + test('completed item is visible on the roadmap', async ({ page, laravel, credentials, loginAs }) => { + await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Done feature', + status: 'completed', + type: 'feature', + }); - test('authenticated user sees suggest a feature button', async ({ page, credentials, loginAs }) => { - await loginAs(credentials.user); - await page.goto('/roadmap'); - await page.waitForLoadState('networkidle'); + await loginAs(credentials.user); + await page.goto('/roadmap'); - await expect(page.getByTestId('suggest-btn')).toBeVisible(); - }); -}); + await expect(page.getByText('Done feature')).toBeVisible(); + }); -test.describe('Roadmap — voting (no page reload)', () => { - test.describe.configure({ mode: 'serial' }); + test('authenticated user sees suggest a feature button', async ({ page, credentials, loginAs }) => { + await loginAs(credentials.user); + await page.goto('/roadmap'); + await page.waitForLoadState('networkidle'); - test.beforeEach(async ({ laravel }) => { - await laravel.callFunction('Modules\\Roadmap\\Tests\\Support\\RoadmapTestHelper::clean'); + await expect(page.getByTestId('suggest-btn')).toBeVisible(); + }); }); - test('vote count increments instantly without full page reload', async ({ - page, - laravel, - credentials, - loginAs, - }) => { - const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Votable feature', - status: 'approved', - type: 'feature', + test.describe('Roadmap — voting (no page reload)', () => { + test.beforeEach(async ({ laravel }) => { + await laravel.callFunction('Modules\\Roadmap\\Tests\\Support\\RoadmapTestHelper::clean'); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); - await page.waitForLoadState('networkidle'); + test('vote count increments instantly without full page reload', async ({ + page, + laravel, + credentials, + loginAs, + }) => { + const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Votable feature', + status: 'approved', + type: 'feature', + }); - const voteScore = page.getByTestId(`vote-score-${item.id}`); - await expect(voteScore).toHaveText('0'); + await loginAs(credentials.user); + await page.goto('/roadmap'); + await page.waitForLoadState('networkidle'); - // Plant a marker on the window — survives Inertia SPA navigations (pushState) - // but is wiped out by a real full page reload - await page.evaluate(() => { (window as any).__noReload = true; }); + const voteScore = page.getByTestId(`vote-score-${item.id}`); + await expect(voteScore).toHaveText('0'); - await page.getByTestId(`upvote-btn-${item.id}`).click(); + // Plant a marker on the window — survives Inertia SPA navigations (pushState) + // but is wiped out by a real full page reload + await page.evaluate(() => { (window as any).__noReload = true; }); - // Score updates to 1 - await expect(voteScore).toHaveText('1'); + await page.getByTestId(`upvote-btn-${item.id}`).click(); - // Marker must still be present — a real reload would have cleared it - expect(await page.evaluate(() => (window as any).__noReload)).toBe(true); - }); + // Score updates to 1 + await expect(voteScore).toHaveText('1'); - test('upvote button shows active state after voting', async ({ - page, - laravel, - credentials, - loginAs, - }) => { - const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Active vote feature', - status: 'approved', - type: 'feature', + // Marker must still be present — a real reload would have cleared it + expect(await page.evaluate(() => (window as any).__noReload)).toBe(true); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); - await page.waitForLoadState('networkidle'); + test('upvote button shows active state after voting', async ({ + page, + laravel, + credentials, + loginAs, + }) => { + const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Active vote feature', + status: 'approved', + type: 'feature', + }); - const voteBox = page.getByTestId(`vote-box-${item.id}`); - await expect(voteBox).toHaveAttribute('data-user-vote', 'none'); + await loginAs(credentials.user); + await page.goto('/roadmap'); + await page.waitForLoadState('networkidle'); - await page.getByTestId(`upvote-btn-${item.id}`).click(); + const voteBox = page.getByTestId(`vote-box-${item.id}`); + await expect(voteBox).toHaveAttribute('data-user-vote', 'none'); - await expect(voteBox).toHaveAttribute('data-user-vote', 'up'); - }); + await page.getByTestId(`upvote-btn-${item.id}`).click(); - test('vote score decrements instantly when toggling upvote off', async ({ - page, - laravel, - credentials, - loginAs, - }) => { - const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { - title: 'Toggle vote feature', - status: 'approved', - type: 'feature', + await expect(voteBox).toHaveAttribute('data-user-vote', 'up'); }); - await loginAs(credentials.user); - await page.goto('/roadmap'); - await page.waitForLoadState('networkidle'); - - const upvoteBtn = page.getByTestId(`upvote-btn-${item.id}`); - const voteScore = page.getByTestId(`vote-score-${item.id}`); - - // Upvote - await upvoteBtn.click(); - await expect(voteScore).toHaveText('1'); - await page.waitForLoadState('networkidle'); - - // Plant a marker — survives Inertia SPA navigations but not a full reload - await page.evaluate(() => { (window as any).__noReload = true; }); - - // Toggle off - await upvoteBtn.click(); - await expect(voteScore).toHaveText('0'); - await expect(page.getByTestId(`vote-box-${item.id}`)).toHaveAttribute('data-user-vote', 'none'); - - expect(await page.evaluate(() => (window as any).__noReload)).toBe(true); + test('vote score decrements instantly when toggling upvote off', async ({ + page, + laravel, + credentials, + loginAs, + }) => { + const item = await laravel.factory('Modules\\Roadmap\\Models\\RoadmapItem', { + title: 'Toggle vote feature', + status: 'approved', + type: 'feature', + }); + + await loginAs(credentials.user); + await page.goto('/roadmap'); + await page.waitForLoadState('networkidle'); + + const upvoteBtn = page.getByTestId(`upvote-btn-${item.id}`); + const voteScore = page.getByTestId(`vote-score-${item.id}`); + + // Upvote + await upvoteBtn.click(); + await expect(voteScore).toHaveText('1'); + await page.waitForLoadState('networkidle'); + + // Plant a marker — survives Inertia SPA navigations but not a full reload + await page.evaluate(() => { (window as any).__noReload = true; }); + + // Toggle off + await upvoteBtn.click(); + await expect(voteScore).toHaveText('0'); + await expect(page.getByTestId(`vote-box-${item.id}`)).toHaveAttribute('data-user-vote', 'none'); + + expect(await page.evaluate(() => (window as any).__noReload)).toBe(true); + }); }); }); diff --git a/tests/e2e/tests/roadmap.suggest.spec.ts b/tests/e2e/tests/roadmap.suggest.spec.ts index c00a9db..6783e18 100644 --- a/tests/e2e/tests/roadmap.suggest.spec.ts +++ b/tests/e2e/tests/roadmap.suggest.spec.ts @@ -3,10 +3,6 @@ import { expect, test } from '@e2e/fixtures'; test.describe('Roadmap — suggest a feature (dialog)', () => { test.describe.configure({ mode: 'serial' }); - test.beforeEach(async ({ laravel }) => { - await laravel.callFunction('Modules\\Roadmap\\Tests\\Support\\RoadmapTestHelper::clean'); - }); - test('authenticated user sees the suggest button', async ({ page, credentials, loginAs }) => { await loginAs(credentials.user); await page.goto('/roadmap');