blob: 90fad0732265ebe020056a77d2e646fe2f9923d9 [file] [log] [blame]
giolekva62b93bd2020-05-02 08:49:23 +04001package importer
giolekva60e87d32020-05-01 23:07:42 +04002
3import (
4 "net/http"
5 "net/http/httptest"
6 "strings"
7 "testing"
8)
9
10func checkErr(err error, t *testing.T) {
11 if err != nil {
12 t.Fatal(err)
13 }
14}
15
16type OkHandler struct {
17}
18
19func (h *OkHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
20
21}
22
23type ErrorHandler struct {
24}
25
26func (h *ErrorHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
27 http.Error(w, "", http.StatusBadRequest)
28}
29
30func TestValidEvent(t *testing.T) {
31 q, err := EventToQuery(`{"Key": "foo/bar"}`)
32 if err != nil {
33 t.Fatal(err)
34 }
35 expected := `mutation {
36 addImage(input: [{ objectPath: "foo/bar" }]) {
37 image {
38 id
39 }
40 }
41}`
42 if q.Query != expected {
43 t.Fatal(q.Query)
44 }
45}
46
47func TestValidEventEscaping(t *testing.T) {
48 q, err := EventToQuery(`{"Key": "foo\"bar"}`)
49 if err != nil {
50 t.Fatal(err)
51 }
52 expected := `mutation {
53 addImage(input: [{ objectPath: "foo\"bar" }]) {
54 image {
55 id
56 }
57 }
58}`
59 if q.Query != expected {
60 t.Fatal(q.Query)
61 }
62}
63
64func TestNoKey(t *testing.T) {
65 _, err := EventToQuery(`{"foo": "bar"}`)
66 if err == nil {
67 t.Fatal("Got key")
68 }
69}
70
71func TestInvalidKey(t *testing.T) {
72 _, err := EventToQuery(`{"foo": 123}`)
73 if err == nil {
74 t.Fatal("Got key")
75 }
76}
77
78func TestInvalidKeyComplex(t *testing.T) {
79 _, err := EventToQuery(`{"foo": {"bar": 5}}`)
80 if err == nil {
81 t.Fatal("Got key")
82 }
83}
84
85func TestHandlerOk(t *testing.T) {
86 mockApi := httptest.NewServer(&OkHandler{})
87 r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": "foo/bar"}`))
88 checkErr(err, t)
89 rec := httptest.NewRecorder()
90 (&Handler{mockApi.URL}).ServeHTTP(rec, r)
91 if rec.Code != http.StatusOK {
92 t.Fatal(rec.Code)
93 }
94}
95
96func TestHandlerInvalidEvent(t *testing.T) {
97 mockApi := httptest.NewServer(&OkHandler{})
98 r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": 123}`))
99 checkErr(err, t)
100 rec := httptest.NewRecorder()
101 (&Handler{mockApi.URL}).ServeHTTP(rec, r)
102 if rec.Code != http.StatusBadRequest {
103 t.Fatal(rec.Code)
104 }
105}
106
107func TestHandlerError(t *testing.T) {
108 mockApi := httptest.NewServer(&ErrorHandler{})
109 r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": "foo/bar"}`))
110 checkErr(err, t)
111 rec := httptest.NewRecorder()
112 (&Handler{mockApi.URL}).ServeHTTP(rec, r)
113 if rec.Code == http.StatusOK {
114 t.Fatal(rec.Code)
115 }
116}