package proposal_generation import ( "errors" "testing" "gitea.maximumdirect.net/eric/audita/v3/internal/framework/outcomes" "gitea.maximumdirect.net/eric/audita/v3/internal/framework/structuredoutput" ) func TestDecodeRepairResponse(t *testing.T) { for _, tc := range []struct { name, content string valid bool }{ {"revision with deletion", `{"proposal_ref":2,"action":"revise","correction":{"id":1,"original_text":" ","corrected_text":"","confidence":0.5}}`, true}, {"withdrawal", `{"proposal_ref":2,"action":"withdraw","correction":null}`, true}, {"wrong reference", `{"proposal_ref":1,"action":"withdraw","correction":null}`, false}, {"missing revision", `{"proposal_ref":2,"action":"revise","correction":null}`, false}, {"withdrawal with revision", `{"proposal_ref":2,"action":"withdraw","correction":{"id":1}}`, false}, } { t.Run(tc.name, func(t *testing.T) { _, err := DecodeRepairResponse([]byte(tc.content), 2) if tc.valid && err != nil { t.Fatal(err) } if !tc.valid { var failure *structuredoutput.Failure if !errors.As(err, &failure) || failure.Reason != outcomes.ReasonInvalidOutput || failure.Class != structuredoutput.FailureRecoverable { t.Fatalf("failure = %v", err) } } }) } }