mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-06-19 13:21:46 +00:00
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)
This commit is contained in:
@@ -133,7 +133,7 @@ describe('GitHubPanel', () => {
|
||||
server.use(
|
||||
http.get('/api/admin/github-releases', () => HttpResponse.json([r])),
|
||||
);
|
||||
render(<GitHubPanel />);
|
||||
render(<GitHubPanel isPrerelease={true} />);
|
||||
await screen.findByText('v3.0.0-beta.1');
|
||||
expect(screen.getByText('Pre-release')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
@@ -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() });
|
||||
});
|
||||
|
||||
|
||||
@@ -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(<VacaySettings onClose={vi.fn()} />)
|
||||
|
||||
// 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(<VacaySettings onClose={vi.fn()} />)
|
||||
|
||||
// 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 () => {
|
||||
|
||||
@@ -51,7 +51,7 @@ export default function VacaySettings({ onClose }: VacaySettingsProps) {
|
||||
|
||||
{/* Weekend days selector */}
|
||||
{plan.block_weekends !== false && (
|
||||
<div style={{ paddingLeft: 36 }}>
|
||||
<div data-testid="weekend-days" style={{ paddingLeft: 36 }}>
|
||||
<p className="text-xs font-medium mb-2" style={{ color: 'var(--text-muted)' }}>{t('vacay.weekendDays')}</p>
|
||||
<div className="flex flex-wrap gap-1.5">
|
||||
{[
|
||||
|
||||
@@ -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<VersionInfo> {
|
||||
if (_versionCache && Date.now() < _versionCache.expiresAt) {
|
||||
return _versionCache.data;
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user