feat: initial public version
This commit is contained in:
85
server/io_test.go
Normal file
85
server/io_test.go
Normal file
@@ -0,0 +1,85 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/nalgeon/codapi/engine"
|
||||
)
|
||||
|
||||
func Test_readJson(t *testing.T) {
|
||||
t.Run("success", func(t *testing.T) {
|
||||
req := httptest.NewRequest(http.MethodPost, "/example",
|
||||
strings.NewReader(`{"sandbox": "python", "command": "run"}`))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
got, err := readJson[engine.Request](req)
|
||||
if err != nil {
|
||||
t.Errorf("expected nil err, got %v", err)
|
||||
}
|
||||
|
||||
want := engine.Request{
|
||||
Sandbox: "python", Command: "run",
|
||||
}
|
||||
if !reflect.DeepEqual(got, want) {
|
||||
t.Errorf("expected %v, got %v", want, got)
|
||||
}
|
||||
})
|
||||
t.Run("unsupported media type", func(t *testing.T) {
|
||||
req := httptest.NewRequest(http.MethodPost, "/example", nil)
|
||||
req.Header.Set("Content-Type", "text/plain")
|
||||
|
||||
_, err := readJson[engine.Request](req)
|
||||
if err == nil || err.Error() != "Unsupported Media Type" {
|
||||
t.Errorf("unexpected error %v", err)
|
||||
}
|
||||
})
|
||||
t.Run("error", func(t *testing.T) {
|
||||
req := httptest.NewRequest(http.MethodPost, "/example", strings.NewReader("hello world"))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
_, err := readJson[engine.Request](req)
|
||||
if err == nil {
|
||||
t.Error("expected unmarshaling error")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func Test_writeJson(t *testing.T) {
|
||||
w := httptest.NewRecorder()
|
||||
obj := engine.Request{
|
||||
ID: "42", Sandbox: "python", Command: "run",
|
||||
}
|
||||
|
||||
err := writeJson(w, obj)
|
||||
if err != nil {
|
||||
t.Errorf("expected nil err, got %v", err)
|
||||
}
|
||||
|
||||
body := w.Body.String()
|
||||
contentType := w.Header().Get("content-type")
|
||||
if contentType != "application/json" {
|
||||
t.Errorf("unexpected content-type header %s", contentType)
|
||||
}
|
||||
|
||||
want := `{"id":"42","sandbox":"python","command":"run","files":null}`
|
||||
if body != want {
|
||||
t.Errorf("expected %s, got %s", body, want)
|
||||
}
|
||||
}
|
||||
|
||||
func Test_writeError(t *testing.T) {
|
||||
w := httptest.NewRecorder()
|
||||
obj := time.Date(2020, 10, 15, 0, 0, 0, 0, time.UTC)
|
||||
writeError(w, http.StatusForbidden, obj)
|
||||
if w.Code != http.StatusForbidden {
|
||||
t.Errorf("expected status code %d, got %d", http.StatusForbidden, w.Code)
|
||||
}
|
||||
if w.Body.String() != `"2020-10-15T00:00:00Z"` {
|
||||
t.Errorf("unexpected body %s", w.Body.String())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user