From ad27c5f6be8f02d7ced1e2dcaac6528f5dfd2850 Mon Sep 17 00:00:00 2001 From: jubnl Date: Sun, 12 Apr 2026 17:19:24 +0200 Subject: [PATCH] fix: restore broken tests after prerelease workflow refactor - Export __clearVersionCacheForTests() from adminService; call in versionNotification beforeEach to reset module-scoped cache between tests (VNOTIF-002..006 failed because VNOTIF-001 cached update_available:false, short-circuiting all subsequent test fetches) - Seed appVersion:'2.9.10' in Navbar test authStore; appVersion moved from local useEffect state to authStore in last commit so the test render no longer fetches it independently (FE-COMP-NAVBAR-016) - Add data-testid="weekend-days" to VacaySettings weekend-days container; use within() in tests to scope button count to that section, fixing false positives from the week-start buttons which share the same inline styles (FE-COMP-VACAYSETTINGS-003/004) - Pass isPrerelease={true} in GitHubPanel FE-ADMIN-GH-007; component filters out prerelease releases when isPrerelease=false so the badge was never rendered (pre-existing, unrelated to last commit) --- .../src/components/Admin/GitHubPanel.test.tsx | 2 +- client/src/components/Layout/Navbar.test.tsx | 2 +- .../components/Vacay/VacaySettings.test.tsx | 24 ++++--------------- client/src/components/Vacay/VacaySettings.tsx | 2 +- server/src/services/adminService.ts | 5 ++++ .../unit/services/versionNotification.test.ts | 3 ++- 6 files changed, 14 insertions(+), 24 deletions(-) diff --git a/client/src/components/Admin/GitHubPanel.test.tsx b/client/src/components/Admin/GitHubPanel.test.tsx index edf45fdf..617bdd88 100644 --- a/client/src/components/Admin/GitHubPanel.test.tsx +++ b/client/src/components/Admin/GitHubPanel.test.tsx @@ -133,7 +133,7 @@ describe('GitHubPanel', () => { server.use( http.get('/api/admin/github-releases', () => HttpResponse.json([r])), ); - render(); + render(); await screen.findByText('v3.0.0-beta.1'); expect(screen.getByText('Pre-release')).toBeInTheDocument(); }); diff --git a/client/src/components/Layout/Navbar.test.tsx b/client/src/components/Layout/Navbar.test.tsx index e76f70f0..b0f8df24 100644 --- a/client/src/components/Layout/Navbar.test.tsx +++ b/client/src/components/Layout/Navbar.test.tsx @@ -16,7 +16,7 @@ beforeEach(() => { http.get('/api/auth/app-config', () => HttpResponse.json({ version: '2.9.10' })), http.get('/api/addons', () => HttpResponse.json({ addons: [] })), ); - seedStore(useAuthStore, { user: buildUser({ username: 'testuser', role: 'user' }), isAuthenticated: true }); + seedStore(useAuthStore, { user: buildUser({ username: 'testuser', role: 'user' }), isAuthenticated: true, appVersion: '2.9.10' }); seedStore(useSettingsStore, { settings: buildSettings() }); }); diff --git a/client/src/components/Vacay/VacaySettings.test.tsx b/client/src/components/Vacay/VacaySettings.test.tsx index c2f4a5cc..efcc310a 100644 --- a/client/src/components/Vacay/VacaySettings.test.tsx +++ b/client/src/components/Vacay/VacaySettings.test.tsx @@ -1,5 +1,5 @@ import { describe, it, expect, vi, beforeEach } from 'vitest' -import { screen, waitFor } from '@testing-library/react' +import { screen, waitFor, within } from '@testing-library/react' import userEvent from '@testing-library/user-event' import { render } from '../../../tests/helpers/render' import { resetAllStores, seedStore } from '../../../tests/helpers/store' @@ -75,17 +75,7 @@ describe('VacaySettings', () => { render() // Day buttons should be visible (Mon, Tue, Wed, Thu, Fri, Sat, Sun) - // They have text from translation keys; in test env they fallback to keys or English - // Check that 7 day-selector buttons exist (they are inside the paddingLeft:36 div) - const allButtons = screen.getAllByRole('button') - // The day buttons are not toggle buttons (no inline-flex/rounded-full class) - const dayButtons = allButtons.filter(b => - !b.className.includes('inline-flex') && - !b.className.includes('rounded-full') && - !b.className.includes('rounded-md') && - !b.className.includes('rounded-xl') && - !b.className.includes('rounded-lg') - ) + const dayButtons = within(screen.getByTestId('weekend-days')).getAllByRole('button') // There should be 7 day buttons expect(dayButtons.length).toBe(7) }) @@ -98,14 +88,8 @@ describe('VacaySettings', () => { }) render() - // When block_weekends is false, the day selector section is not rendered - // There should only be toggle buttons (4 toggles), no day buttons - const allButtons = screen.getAllByRole('button') - // None of the buttons should be day selectors (they have borderRadius:8 inline style) - const dayButtons = allButtons.filter(b => - b.style.borderRadius === '8px' && b.style.padding === '4px 10px' - ) - expect(dayButtons).toHaveLength(0) + // When block_weekends is false, the weekend-days container is not rendered + expect(screen.queryByTestId('weekend-days')).toBeNull() }) it('FE-COMP-VACAYSETTINGS-005: clicking an active weekend day removes it', async () => { diff --git a/client/src/components/Vacay/VacaySettings.tsx b/client/src/components/Vacay/VacaySettings.tsx index 14efe606..124a3a1f 100644 --- a/client/src/components/Vacay/VacaySettings.tsx +++ b/client/src/components/Vacay/VacaySettings.tsx @@ -51,7 +51,7 @@ export default function VacaySettings({ onClose }: VacaySettingsProps) { {/* Weekend days selector */} {plan.block_weekends !== false && ( -
+

{t('vacay.weekendDays')}

{[ diff --git a/server/src/services/adminService.ts b/server/src/services/adminService.ts index 3a5a9321..eec43ecd 100644 --- a/server/src/services/adminService.ts +++ b/server/src/services/adminService.ts @@ -328,6 +328,11 @@ interface VersionInfo { const VERSION_CACHE_TTL = 5 * 60 * 1000; // 5 minutes let _versionCache: { data: VersionInfo; expiresAt: number } | null = null; +/** Test-only: clear the in-memory version cache. */ +export function __clearVersionCacheForTests(): void { + _versionCache = null; +} + export async function checkVersion(): Promise { if (_versionCache && Date.now() < _versionCache.expiresAt) { return _versionCache.data; diff --git a/server/tests/unit/services/versionNotification.test.ts b/server/tests/unit/services/versionNotification.test.ts index bbe1c15d..c43dba98 100644 --- a/server/tests/unit/services/versionNotification.test.ts +++ b/server/tests/unit/services/versionNotification.test.ts @@ -34,7 +34,7 @@ import { createTables } from '../../../src/db/schema'; import { runMigrations } from '../../../src/db/migrations'; import { resetTestDb } from '../../helpers/test-db'; import { createAdmin } from '../../helpers/factories'; -import { checkAndNotifyVersion } from '../../../src/services/adminService'; +import { checkAndNotifyVersion, __clearVersionCacheForTests } from '../../../src/services/adminService'; // Helper: mock the GitHub releases/latest endpoint function mockGitHubLatest(tagName: string, ok = true): void { @@ -63,6 +63,7 @@ beforeAll(() => { beforeEach(() => { resetTestDb(testDb); + __clearVersionCacheForTests(); vi.unstubAllGlobals(); });