blob: 90fad0732265ebe020056a77d2e646fe2f9923d9 [file] [log] [blame]
package importer
import (
"net/http"
"net/http/httptest"
"strings"
"testing"
)
func checkErr(err error, t *testing.T) {
if err != nil {
t.Fatal(err)
}
}
type OkHandler struct {
}
func (h *OkHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
type ErrorHandler struct {
}
func (h *ErrorHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
http.Error(w, "", http.StatusBadRequest)
}
func TestValidEvent(t *testing.T) {
q, err := EventToQuery(`{"Key": "foo/bar"}`)
if err != nil {
t.Fatal(err)
}
expected := `mutation {
addImage(input: [{ objectPath: "foo/bar" }]) {
image {
id
}
}
}`
if q.Query != expected {
t.Fatal(q.Query)
}
}
func TestValidEventEscaping(t *testing.T) {
q, err := EventToQuery(`{"Key": "foo\"bar"}`)
if err != nil {
t.Fatal(err)
}
expected := `mutation {
addImage(input: [{ objectPath: "foo\"bar" }]) {
image {
id
}
}
}`
if q.Query != expected {
t.Fatal(q.Query)
}
}
func TestNoKey(t *testing.T) {
_, err := EventToQuery(`{"foo": "bar"}`)
if err == nil {
t.Fatal("Got key")
}
}
func TestInvalidKey(t *testing.T) {
_, err := EventToQuery(`{"foo": 123}`)
if err == nil {
t.Fatal("Got key")
}
}
func TestInvalidKeyComplex(t *testing.T) {
_, err := EventToQuery(`{"foo": {"bar": 5}}`)
if err == nil {
t.Fatal("Got key")
}
}
func TestHandlerOk(t *testing.T) {
mockApi := httptest.NewServer(&OkHandler{})
r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": "foo/bar"}`))
checkErr(err, t)
rec := httptest.NewRecorder()
(&Handler{mockApi.URL}).ServeHTTP(rec, r)
if rec.Code != http.StatusOK {
t.Fatal(rec.Code)
}
}
func TestHandlerInvalidEvent(t *testing.T) {
mockApi := httptest.NewServer(&OkHandler{})
r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": 123}`))
checkErr(err, t)
rec := httptest.NewRecorder()
(&Handler{mockApi.URL}).ServeHTTP(rec, r)
if rec.Code != http.StatusBadRequest {
t.Fatal(rec.Code)
}
}
func TestHandlerError(t *testing.T) {
mockApi := httptest.NewServer(&ErrorHandler{})
r, err := http.NewRequest("GET", "/foo", strings.NewReader(`{"Key": "foo/bar"}`))
checkErr(err, t)
rec := httptest.NewRecorder()
(&Handler{mockApi.URL}).ServeHTTP(rec, r)
if rec.Code == http.StatusOK {
t.Fatal(rec.Code)
}
}