/**
* テスト用: `robot_error_reports.robot_id` が NULL の行を Prisma が読んだときの失敗をスタブで再現する
* (指示書AU 段階0-4。§11 Q6。D-158)。
*
* ★先方の DDL では `robot_id` が NULL 可(TeamWorks 第11回 P-8 b)、`prisma/schema.prisma` は NOT NULL のまま★。
* ★`select` なし(=全列)・`select.robot_id`・`select.robot`・`include.robot` で NULL の行を読むと、
* 本物の Prisma は読み取りで落ちる★。スタブは何でも返してしまうので、ここで同じ失敗を起こす。
*
* ★`select` で読む列を絞っていれば何もしない★(=NULL の行が入っても落ちないことをテストで確かめられる)。
*/
export function guardNullRobotId(
rows: readonly Record<string, unknown>[],
args: Record<string, unknown> | undefined
): void {
if (!rows.some((row) => row.robot_id === null)) return;
const select = args?.select as Record<string, unknown> | undefined;
const include = args?.include as Record<string, unknown> | undefined;
const readsRobotId =
select === undefined ||
Boolean(select.robot_id) ||
Boolean(select.robot) ||
Boolean(include?.robot);
if (readsRobotId) {
throw new Error(
"[stub] robot_error_reports.robot_id が NULL の行を robot_id / robot ごと読んだ(Prisma は NOT NULL として読むので落ちる)。select で必要な列だけにすること(指示書AU 段階0-4)"
);
}
}