/**
* `isVisibleErrorRow()` / `ERROR_ROW_VISIBLE_WHERE` の期待値表(指示書AX 表5 の可視性の列。U8・D12)
*
* ★表5 は指示書AX で U8 から導き、監督が確認したもの(§11 Q9。2026-10-19)★
*
* | 施設の deleted_at | 清掃エリアの deleted_at | 見えるか | 表5 |
* |---|---|---|---|
* | NULL | NULL | 見える | V1・V4・V9 |
* | 過去の日時 | NULL | 見えない | V2・V5 |
* | NULL | 過去の日時 | 見えない | V3・V6 |
* | 過去の日時 | 過去の日時 | 見えない | V7 |
* | ★未来の日時★ | NULL | ★見えない★(NULL か否かだけで決める。D12) | — |
*
* ★日時は `+09:00` 付きの ISO 文字列から `toDbJst(new Date(...))` で DB の壁時計値を作る★
*/
import { describe, expect, it } from "vitest";
import { ERROR_ROW_VISIBLE_WHERE, isVisibleErrorRow } from "@/lib/db/error-report-mapping";
import { toDbJst } from "@/lib/format/date";
const DELETED = toDbJst(new Date("2026-10-01T10:00:00+09:00"));
const FUTURE = toDbJst(new Date("2099-01-01T00:00:00+09:00"));
describe("isVisibleErrorRow(表5。指示書AX U8・D12)", () => {
it.each([
["V1・V4・V9: 施設・清掃エリアとも生きている", null, null, true],
["V2・V5: 施設だけ削除済み", DELETED, null, false],
["V3・V6: 清掃エリアだけ削除済み", null, DELETED, false],
["V7: 施設・清掃エリアとも削除済み", DELETED, DELETED, false],
["★未来の日時でも削除済み(NULL か否かだけ)★", FUTURE, null, false],
] as const)("%s → %s", (_label, facilityDeleted, sectionDeleted, expected) => {
expect(
isVisibleErrorRow({
facility: { deleted_at: facilityDeleted },
section: { deleted_at: sectionDeleted },
})
).toBe(expected);
});
});
describe("ERROR_ROW_VISIBLE_WHERE(SQL 側の写し)", () => {
it("施設・清掃エリアの deleted_at が NULL", () => {
expect(ERROR_ROW_VISIBLE_WHERE).toEqual({
facility: { deleted_at: null },
section: { deleted_at: null },
});
});
});