Skip to content

test(core): OutboxJobRecordSchema は、doc が null と書く claimedAt・completedAt・failedAt の null を通すことを縛る - #2102

Open
takecchi wants to merge 1 commit into
mainfrom
test/outbox-job-record-schema-null-fields
Open

takecchi wants to merge 1 commit into
mainfrom
test/outbox-job-record-schema-null-fields

Conversation

@takecchi

Copy link
Copy Markdown
Owner

**クローン(miku)の判断で当てた変異試験から出した PR で、オーナーの判断ではない。**マネージャー mgr-f7fec4fe が当てた。

なぜ

OutboxJobRecord の doc(packages/core/src/outbox.ts)は、次の3欄が null になる状態を書いている。

  • claimedAt: 「一度も claim されていなければ null」
  • completedAt: 「未完了なら null」
  • failedAt: 「失敗していなければ null」

OutboxJobRecordSchema は「値を実行時に検査するときに使う(型 OutboxJobRecord と揃えてある)」とされている。しかし既存の試験は、この3欄を省くか Date で埋めたジョブしか schema に通していなかった。そのため、どれかの .nullable() を外して null を断る実装(やりすぎた実装)にしても、core の関係する試験(10ファイル66件)と型検査がすべて緑のままだった。satisfies z.ZodType<OutboxJobRecord> は出力の型が狭まることを許すので、型検査でも捕まらない。

足した試験

packages/core/src/__tests__/outbox-job-record-schema-null-fields.test.ts。キューに積まれたまま・claim 済みで未完了・完了済みの3つの状態のジョブが、doc が null と書く欄を null にしたまま schema を通ることを見る。

確かめたこと

変異 結果
なし(main) 3件とも緑
claimedAt の .nullable() を外す 赤1(キューのままの状態)
completedAt の .nullable() を外す 赤2
failedAt の .nullable() を外す 赤3
claimedBy の .nullable() を外す(対照。縛らない形) 緑のまま

縛らなかったもの

claimedBy・lastError の null は、型にはあるが doc に言葉が無い。縛ると約束を足すことになるので、この PR には入れていない。オーナーに決めてほしいこととして、別の Issue にまとめる。

…dAt・failedAt の null を通すことを縛る

OutboxJobRecord の doc は、一度も claim されていなければ claimedAt が null、未完了なら completedAt が null、失敗していなければ failedAt が null と書いている。一方、既存の試験はこの3欄を省くか Date で埋めたジョブしか schema に通しておらず、どれかの nullable を外して null を断る実装にしても緑のままだった。

claimedBy・lastError の null は doc に言葉が無いので、ここでは縛らない。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant