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}) } }