| 1 | package suite |
| 2 | |
| 3 | import ( |
| 4 | "fmt" |
| 5 | "testing" |
| 6 | ) |
| 7 | |
| 8 | func TestS2RequiresEveryAnswerField(t *testing.T) { |
| 9 | asked := []ItemRevision{{ItemID: "doc", Revision: 0}, {ItemID: "other", Revision: 3}} |
| 10 | valid := `{"item_id":"other","revision":3,"result":"VISIBLE"}` |
| 11 | for _, row := range []string{ |
| 12 | `{"item_id":"doc","result":"VISIBLE"}`, |
| 13 | `{"item_id":"doc","revision":null,"result":"VISIBLE"}`, |
| 14 | `{"revision":0,"result":"VISIBLE"}`, |
| 15 | `{"item_id":null,"revision":0,"result":"VISIBLE"}`, |
| 16 | `{"item_id":"doc","revision":0}`, |
| 17 | `{"item_id":"doc","revision":0,"result":null}`, |
| 18 | `null`, |
| 19 | } { |
| 20 | for _, rows := range []string{row + "," + valid, valid + "," + row} { |
| 21 | t.Run(rows, func(t *testing.T) { |
| 22 | body := []byte(`{"results":[` + rows + `]}`) |
| 23 | assertResults(t, DecodeS2(asked, 200, body), []Authorization{UNKNOWN, UNKNOWN}) |
| 24 | }) |
| 25 | } |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | func TestS2ExplicitZeroRevisionRemainsValid(t *testing.T) { |
| 30 | for _, result := range []Authorization{VISIBLE, NOT_VISIBLE, STALE, UNKNOWN} { |
| 31 | body := []byte(fmt.Sprintf(`{"results":[{"item_id":"doc","revision":0,"result":%q}]}`, result)) |
| 32 | assertResults(t, DecodeS2([]ItemRevision{{ItemID: "doc", Revision: 0}}, 200, body), []Authorization{result}) |
| 33 | } |
| 34 | } |
| 35 | |
| 36 | func TestS2IncompleteDuplicateCannotBeDiscarded(t *testing.T) { |
| 37 | valid := `{"item_id":"doc","revision":0,"result":"VISIBLE"}` |
| 38 | incomplete := `{"item_id":"doc","result":"NOT_VISIBLE"}` |
| 39 | for _, rows := range []string{valid + "," + incomplete, incomplete + "," + valid} { |
| 40 | body := []byte(`{"results":[` + rows + `]}`) |
| 41 | assertResults(t, DecodeS2([]ItemRevision{{ItemID: "doc", Revision: 0}}, 200, body), []Authorization{UNKNOWN}) |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | func TestS2MissingIdentityDoesNotMatchEmptyAskedIdentity(t *testing.T) { |
| 46 | for _, row := range []string{`{"revision":0,"result":"VISIBLE"}`, `{"item_id":null,"revision":0,"result":"VISIBLE"}`} { |
| 47 | body := []byte(`{"results":[` + row + `]}`) |
| 48 | assertResults(t, DecodeS2([]ItemRevision{{ItemID: "", Revision: 0}}, 200, body), []Authorization{UNKNOWN}) |
| 49 | } |
| 50 | } |
| 51 | |