| new file mode 100644 |
| index 0000000..f33ad2a |
| --- /dev/null |
| +++ b/s2_required_fields_test.go |
| @@ -0,0 +1,50 @@ |
| +package suite |
| + |
| +import ( |
| + "fmt" |
| + "testing" |
| +) |
| + |
| +func TestS2RequiresEveryAnswerField(t *testing.T) { |
| + asked := []ItemRevision{{ItemID: "doc", Revision: 0}, {ItemID: "other", Revision: 3}} |
| + valid := `{"item_id":"other","revision":3,"result":"VISIBLE"}` |
| + for _, row := range []string{ |
| + `{"item_id":"doc","result":"VISIBLE"}`, |
| + `{"item_id":"doc","revision":null,"result":"VISIBLE"}`, |
| + `{"revision":0,"result":"VISIBLE"}`, |
| + `{"item_id":null,"revision":0,"result":"VISIBLE"}`, |
| + `{"item_id":"doc","revision":0}`, |
| + `{"item_id":"doc","revision":0,"result":null}`, |
| + `null`, |
| + } { |
| + for _, rows := range []string{row + "," + valid, valid + "," + row} { |
| + t.Run(rows, func(t *testing.T) { |
| + body := []byte(`{"results":[` + rows + `]}`) |
| + assertResults(t, DecodeS2(asked, 200, body), []Authorization{UNKNOWN, UNKNOWN}) |
| + }) |
| + } |
| + } |
| +} |
| + |
| +func TestS2ExplicitZeroRevisionRemainsValid(t *testing.T) { |
| + for _, result := range []Authorization{VISIBLE, NOT_VISIBLE, STALE, UNKNOWN} { |
| + body := []byte(fmt.Sprintf(`{"results":[{"item_id":"doc","revision":0,"result":%q}]}`, result)) |
| + assertResults(t, DecodeS2([]ItemRevision{{ItemID: "doc", Revision: 0}}, 200, body), []Authorization{result}) |
| + } |
| +} |
| + |
| +func TestS2IncompleteDuplicateCannotBeDiscarded(t *testing.T) { |
| + valid := `{"item_id":"doc","revision":0,"result":"VISIBLE"}` |
| + incomplete := `{"item_id":"doc","result":"NOT_VISIBLE"}` |
| + for _, rows := range []string{valid + "," + incomplete, incomplete + "," + valid} { |
| + body := []byte(`{"results":[` + rows + `]}`) |
| + assertResults(t, DecodeS2([]ItemRevision{{ItemID: "doc", Revision: 0}}, 200, body), []Authorization{UNKNOWN}) |
| + } |
| +} |
| + |
| +func TestS2MissingIdentityDoesNotMatchEmptyAskedIdentity(t *testing.T) { |
| + for _, row := range []string{`{"revision":0,"result":"VISIBLE"}`, `{"item_id":null,"revision":0,"result":"VISIBLE"}`} { |
| + body := []byte(`{"results":[` + row + `]}`) |
| + assertResults(t, DecodeS2([]ItemRevision{{ItemID: "", Revision: 0}}, 200, body), []Authorization{UNKNOWN}) |
| + } |
| +} |