feat: add kitchen-tabs utility, CSS, token and test

This commit is contained in:
Ulas Kalayci
2026-04-29 19:55:28 +02:00
parent b59c63bbb7
commit 7e137d1c21
5 changed files with 220 additions and 1 deletions
+63
View File
@@ -0,0 +1,63 @@
/**
* Tests: Kitchen-Tabs Utility (pure functions)
* Läuft mit: node --loader ./test-browser-loader.mjs test-kitchen-tabs.js
*/
import { test } from 'node:test';
import assert from 'node:assert/strict';
const { KITCHEN_ROUTES, KITCHEN_STORAGE_KEY, getLastKitchenRoute, isKitchenRoute } = await (async () => {
global.window = { oikos: null };
global.document = {
createElement: () => ({
className: '', dataset: {}, style: {},
setAttribute() {}, appendChild() {},
classList: { add() {}, toggle() {} },
insertAdjacentElement() {},
addEventListener() {},
}),
};
const storage = {
_d: {},
getItem(k) { return this._d[k] ?? null; },
setItem(k, v) { this._d[k] = v; },
};
global.sessionStorage = storage;
global.t = (k) => k;
return import('./public/utils/kitchen-tabs.js');
})();
test('KITCHEN_ROUTES enthält alle drei Sub-Routen', () => {
assert.deepEqual(KITCHEN_ROUTES, ['/meals', '/recipes', '/shopping']);
});
test('KITCHEN_STORAGE_KEY ist korrekt', () => {
assert.equal(KITCHEN_STORAGE_KEY, 'oikos-kitchen-tab');
});
test('getLastKitchenRoute: Standardwert /meals wenn kein Storage-Eintrag', () => {
global.sessionStorage._d = {};
assert.equal(getLastKitchenRoute(), '/meals');
});
test('getLastKitchenRoute: gibt gespeicherte Route zurück', () => {
global.sessionStorage._d = { 'oikos-kitchen-tab': '/recipes' };
assert.equal(getLastKitchenRoute(), '/recipes');
});
test('getLastKitchenRoute: ignoriert ungültige gespeicherte Route', () => {
global.sessionStorage._d = { 'oikos-kitchen-tab': '/admin' };
assert.equal(getLastKitchenRoute(), '/meals');
});
test('isKitchenRoute: erkennt Kitchen-Routen', () => {
assert.equal(isKitchenRoute('/meals'), true);
assert.equal(isKitchenRoute('/recipes'), true);
assert.equal(isKitchenRoute('/shopping'), true);
});
test('isKitchenRoute: lehnt Nicht-Kitchen-Routen ab', () => {
assert.equal(isKitchenRoute('/tasks'), false);
assert.equal(isKitchenRoute('/'), false);
assert.equal(isKitchenRoute('/calendar'), false);
assert.equal(isKitchenRoute(''), false);
});