Files
F-r-ldraledigplannerare/frontend/tests/fixtures/mockData.ts
T
jacobh2 6a7c0ef255 Draw a leave period as one band, and make red days look red
A six-week summer used to render as a row of disconnected bars, because bars
were derived per week row and grouped by parent and day type. They carried no
identity and ignored pointer events, so there was nothing to click. Bands now
group by the wish that produced them, bridge the weekends and red days inside
a period, and round only the ends that are genuinely the first and last day.
Each day still shows what pays for it, and a hand-edited day is marked as one
the planner will leave alone.

Sundays and public holidays now render red and Saturdays a neutral grey,
following the printed almanacka people compare against, and a holiday's name
is visible in the cell rather than hidden in a tooltip. This also explains the
report that months looked unshaded: weekends had no styling at all, since the
day component handled only red days and klämdagar.

The year selector follows the range the calendar API actually serves instead
of a hardcoded span.
2026-09-17 18:28:16 +02:00

207 lines
5.6 KiB
TypeScript

/**
* Shared test fixtures — domain entities.
*
* Prefer the `make*` factories over the `MOCK_*` constants in new tests: a
* factory returns a complete, correctly-typed object, so overriding one field
* can't silently leave the rest `undefined`/wrong the way a hand-rolled
* partial object cast with `as any` can. See `frontend/tests/fixtures/index.ts`
* for the full barrel of factories (plan, analytics, calendar, scraper, hooks).
*/
import type {
Child,
DayOverride,
LeaveWish,
ParentalLeaveFetch,
PersonalData,
PlannedLeaveDay,
TierData,
Tip,
VacationDays,
Workspace,
} from '@/types'
// ---------------------------------------------------------------------------
// Workspace
// ---------------------------------------------------------------------------
export function makeWorkspace(overrides: Partial<Workspace> = {}): Workspace {
return {
id: 'ws-1',
name: 'Familjen Testsson',
planningMode: 'solo',
createdAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Personal data (parents)
// ---------------------------------------------------------------------------
export function makePersonalData(overrides: Partial<PersonalData> = {}): PersonalData {
return {
uuid: 'pd-a',
workspaceId: 'ws-1',
name: 'Förälder A',
salaryType: 'monthly',
employmentStatus: 'employed',
createdAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Child
// ---------------------------------------------------------------------------
export function makeChild(overrides: Partial<Child> = {}): Child {
return {
id: 'child-1',
workspaceId: 'ws-1',
name: 'Barnet',
birthDate: '2025-06-01',
preschoolStartDate: null,
preschoolPlanningDaysPerYear: 6,
createdAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Vacation days
// ---------------------------------------------------------------------------
export function makeVacationDays(overrides: Partial<VacationDays> = {}): VacationDays {
return {
id: 'vd-1',
personalDataUuid: 'pd-a',
workspaceId: 'ws-1',
year: 2026,
totalDays: 25,
savedDaysIn: 0,
createdAt: '2026-01-01T00:00:00',
updatedAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Parental leave fetch (+ tier data)
// ---------------------------------------------------------------------------
export function makeTierData(overrides: Partial<TierData> = {}): TierData {
return {
sjukpenningTotal: 390,
sjukpenningUsed: 80,
sjukpenningLeft: 310,
lagstaNivaTotal: 90,
lagstaNivaUsed: 0,
lagstaNivaLeft: 90,
...overrides,
}
}
export function makeParentalLeaveFetch(overrides: Partial<ParentalLeaveFetch> = {}): ParentalLeaveFetch {
return {
id: 'plf-1',
personalDataUuid: 'pd-a',
workspaceId: 'ws-1',
childId: 'child-1',
source: 'manual',
fetchedAt: '2026-05-01T10:00:00',
totalDays: 240,
daysUsed: 80,
daysLeft: 160,
reservedDaysTotal: 90,
reservedDaysLeft: 70,
transferableDaysLeft: 50,
dubbeldagarLeft: 55,
tierData: makeTierData(),
createdAt: '2026-05-01T10:00:00',
updatedAt: '2026-05-01T10:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Leave wishes
// ---------------------------------------------------------------------------
export function makeLeaveWish(overrides: Partial<LeaveWish> = {}): LeaveWish {
return {
id: 'lw-1',
workspaceId: 'ws-1',
childId: null,
name: 'Sommar',
nameMessageKey: null,
windowStartMonth: 6,
windowStartDay: 15,
windowEndMonth: 7,
windowEndDay: 26,
targetWeeks: 6,
recurrence: 'yearly',
firstYear: 2026,
lastYear: null,
priority: 1,
parentMode: 'either',
parentPersonalDataUuid: null,
windowMode: 'fixed',
createdAt: '2026-01-01T00:00:00',
updatedAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Planned leave days
// ---------------------------------------------------------------------------
export function makePlannedLeaveDay(overrides: Partial<PlannedLeaveDay> = {}): PlannedLeaveDay {
return {
id: 'pld-1',
workspaceId: 'ws-1',
childId: 'child-1',
parentPersonalDataUuid: 'pd-a',
date: '2026-06-15',
dayType: 'vacation',
isDubbeldag: false,
wishId: null,
isPinned: false,
createdAt: '2026-01-01T00:00:00',
updatedAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Day overrides (calendar exceptions)
// ---------------------------------------------------------------------------
export function makeDayOverride(overrides: Partial<DayOverride> = {}): DayOverride {
return {
id: 'do-1',
workspaceId: 'ws-1',
date: '2026-12-24',
isWorkingDay: false,
note: null,
createdAt: '2026-01-01T00:00:00',
updatedAt: '2026-01-01T00:00:00',
...overrides,
}
}
// ---------------------------------------------------------------------------
// Tips
// ---------------------------------------------------------------------------
export function makeTip(overrides: Partial<Tip> = {}): Tip {
return {
id: 'tip-1',
severity: 'info',
messageKey: 'tips.example',
data: {},
...overrides,
}
}