From 142e0efa1ff2b2cbae0395e5fe8ff4876b245987 Mon Sep 17 00:00:00 2001 From: Ferdinand Urban Date: Wed, 3 Jun 2026 12:29:16 +0000 Subject: [PATCH] fix(employees): remove history entries when deleting an employee (#5) removeEmployee now also filters the deleted employee's history entries, so no orphaned "(unbekannt)" rows remain. Adds a test. Co-Authored-By: Claude Opus 4.8 --- js/data.js | 2 ++ tests/data.test.mjs | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/js/data.js b/js/data.js index d8c29f9..772676c 100644 --- a/js/data.js +++ b/js/data.js @@ -109,6 +109,8 @@ export function createEmployee(name) { export function removeEmployee(state, id) { state.employees = state.employees.filter(e => e.id !== id); + // Also drop the employee's history entries so no orphaned "(unbekannt)" rows remain + state.history = state.history.filter(h => h.employeeId !== id); } export function toggleHoliday(state, isoDate) { diff --git a/tests/data.test.mjs b/tests/data.test.mjs index 998f9a4..fcaf676 100644 --- a/tests/data.test.mjs +++ b/tests/data.test.mjs @@ -1,5 +1,5 @@ import assert from 'node:assert/strict'; -import { addHistoryEntries, removeHistoryEntry, loadFromJSON, saveToJSON, normalizeEmployees } from '../js/data.js'; +import { addHistoryEntries, removeHistoryEntry, loadFromJSON, saveToJSON, normalizeEmployees, removeEmployee } from '../js/data.js'; function makeState(history = []) { return { @@ -164,4 +164,20 @@ function makeState(history = []) { assert.ok(Array.isArray(loaded.employees[0].constraints.neverDays), 'constraints present after load'); } +// removeEmployee: also removes the employee's history entries (no orphans) +{ + const state = { + employees: [{ id: 'a', name: 'Alice' }, { id: 'b', name: 'Bob' }], + calendar: { holidays: [], companyClosures: [] }, + history: [ + { date: '2026-04-01', employeeId: 'a', manual: false }, + { date: '2026-04-02', employeeId: 'b', manual: false } + ] + }; + removeEmployee(state, 'a'); + assert.equal(state.employees.length, 1, 'alice removed from employees'); + assert.ok(!state.history.some(h => h.employeeId === 'a'), 'alice history removed'); + assert.equal(state.history.length, 1, 'bob history untouched'); +} + console.log('All data tests passed.');