74 lines
3.1 KiB
Go
74 lines
3.1 KiB
Go
package ingest
|
|
|
|
import "testing"
|
|
|
|
// notes_test.go pins the seam's most quietly dangerous map: what a reader is told about a flagged
|
|
// pair. It had no test at all, and its whole purpose is that a word of the engine's never reaches a
|
|
// client.
|
|
|
|
// Every reason of appendix A answers ITS code, and no engine word survives the crossing.
|
|
//
|
|
// Mutation caught: dropping a row; forwarding `reason` verbatim; renaming a code.
|
|
func TestEveryEngineReasonAnswersTheContractCodeOfAppendixA(t *testing.T) {
|
|
for reason, want := range map[string]string{
|
|
"hard_refusal": "content_withheld", "soft_refusal": "content_withheld",
|
|
"content_filter": "content_withheld", "hard_block": "content_withheld",
|
|
"cjk_artifact": "source_residue", "excision_suspect": "text_possibly_dropped",
|
|
"coverage_fail": "incomplete_coverage", "sanitizer_defect": "markup_defect",
|
|
"loop_degenerate": "repetition", "decode_error": "unreadable_answer",
|
|
"glossary_miss": "term_not_applied", "length": "length_mismatch",
|
|
"empty": "empty_answer", "sanitizer_stripped": "markup_cleaned",
|
|
"upstream_not_ok": "unavailable",
|
|
} {
|
|
code, step := NoteCode(reason)
|
|
if code != want {
|
|
t.Errorf("%s answers %q, want %q", reason, code, want)
|
|
}
|
|
if code == reason {
|
|
t.Errorf("%s crossed the seam verbatim", reason)
|
|
}
|
|
if step != StepAttention && step != StepGlance {
|
|
t.Errorf("%s answers step %q, which is not a contract value", reason, step)
|
|
}
|
|
}
|
|
}
|
|
|
|
// A reason this build has never heard of gets the stable placeholder rather than the producer's own
|
|
// word — the window between two independent releases (PD-246).
|
|
func TestAReasonOutsideTheMapAnswersTheStablePlaceholder(t *testing.T) {
|
|
code, step := NoteCode("a_reason_invented_after_this_build")
|
|
if code != NoteCodeUnspecified {
|
|
t.Errorf("an unknown reason answered %q", code)
|
|
}
|
|
if step != StepGlance {
|
|
t.Errorf("an unknown reason answered step %q, want the quiet one", step)
|
|
}
|
|
if empty, _ := NoteCode(""); empty != NoteCodeUnspecified {
|
|
t.Errorf("an empty reason answered %q", empty)
|
|
}
|
|
}
|
|
|
|
// Every row's STEP is pinned, not just its code: a typo in one of the fifteen sends a withheld
|
|
// answer to the reader as a minor remark, and the reader skips a chapter that has no translation.
|
|
//
|
|
// Mutation caught: moving any row between the two steps.
|
|
func TestEveryReasonAnswersItsOwnStep(t *testing.T) {
|
|
for reason, want := range map[string]string{
|
|
"hard_refusal": StepAttention, "soft_refusal": StepAttention,
|
|
"content_filter": StepAttention, "hard_block": StepAttention,
|
|
"cjk_artifact": StepAttention, "excision_suspect": StepAttention,
|
|
"coverage_fail": StepAttention, "sanitizer_defect": StepAttention,
|
|
"loop_degenerate": StepAttention, "decode_error": StepAttention,
|
|
"empty": StepAttention, "upstream_not_ok": StepAttention,
|
|
"glossary_miss": StepGlance, "length": StepGlance, "sanitizer_stripped": StepGlance,
|
|
// The sixteenth (minor 0.10.0): the reader lost the chapter, so Attention.
|
|
"off_target_lang": StepAttention,
|
|
} {
|
|
if _, step := NoteCode(reason); step != want {
|
|
t.Errorf("%s answers step %q, want %q", reason, step, want)
|
|
}
|
|
}
|
|
if len(notes) != 16 {
|
|
t.Errorf("appendix A has sixteen reasons, the map has %d", len(notes))
|
|
}
|
|
}
|