trails/apps/planner/app/lib/overnight.test.ts
Ullrich Schäfer 5604fe1c82
Add per-day map coloring and remaining unit tests
- RouteMapThumbnail: Color route segments per day with alternating colors
  when dayBreaks are present, pass through from route detail page
- overnight.test.ts: 6 tests for isOvernight/setOvernight with Y.Doc
- daybreaks-extraction.test.ts: 3 tests for GPX → dayBreaks index extraction

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 00:12:27 +02:00

80 lines
2.2 KiB
TypeScript

import { describe, it, expect } from "vitest";
import * as Y from "yjs";
import { setOvernight, isOvernight } from "./overnight.ts";
import type { YjsState } from "./use-yjs.ts";
function createTestYjs(): YjsState {
const doc = new Y.Doc();
const waypoints = doc.getArray<Y.Map<unknown>>("waypoints");
return { doc, waypoints } as unknown as YjsState;
}
function addWaypoint(yjs: YjsState, lat: number, lon: number): void {
const yMap = new Y.Map();
yMap.set("lat", lat);
yMap.set("lon", lon);
yjs.waypoints.push([yMap]);
}
function createDocMap(): Y.Map<unknown> {
const doc = new Y.Doc();
const arr = doc.getArray<Y.Map<unknown>>("test");
const yMap = new Y.Map<unknown>();
arr.push([yMap]);
return yMap;
}
describe("isOvernight", () => {
it("returns false for a waypoint without overnight flag", () => {
const yMap = createDocMap();
yMap.set("lat", 52.52);
yMap.set("lon", 13.405);
expect(isOvernight(yMap)).toBe(false);
});
it("returns true for a waypoint with overnight flag", () => {
const yMap = createDocMap();
yMap.set("lat", 52.52);
yMap.set("lon", 13.405);
yMap.set("overnight", true);
expect(isOvernight(yMap)).toBe(true);
});
it("returns false for non-boolean overnight value", () => {
const yMap = createDocMap();
yMap.set("overnight", "yes");
expect(isOvernight(yMap)).toBe(false);
});
});
describe("setOvernight", () => {
it("sets overnight flag on a waypoint", () => {
const yjs = createTestYjs();
addWaypoint(yjs, 52.52, 13.405);
setOvernight(yjs, 0, true);
const yMap = yjs.waypoints.get(0)!;
expect(yMap.get("overnight")).toBe(true);
});
it("clears overnight flag from a waypoint", () => {
const yjs = createTestYjs();
addWaypoint(yjs, 52.52, 13.405);
setOvernight(yjs, 0, true);
expect(yjs.waypoints.get(0)!.get("overnight")).toBe(true);
setOvernight(yjs, 0, false);
expect(yjs.waypoints.get(0)!.get("overnight")).toBeUndefined();
});
it("does nothing for out-of-bounds index", () => {
const yjs = createTestYjs();
addWaypoint(yjs, 52.52, 13.405);
// Should not throw
setOvernight(yjs, 5, true);
expect(yjs.waypoints.get(0)!.get("overnight")).toBeUndefined();
});
});