Loading app-backend/main.go +1 −2 Original line number Diff line number Diff line Loading @@ -14,14 +14,13 @@ import ( ) var root = flag.String("root", "app", "file system path") var r route.Router func init() { log.SetFlags(log.Ltime | log.Ldate | log.Lshortfile) r = new(route.Router) } func main() { r := new(route.Router) r.HandleFunc("/checkerboard", checkerboard.Checkerboard) Loading controllers/checkerboard/checkerboard_test.go +14 −11 Original line number Diff line number Diff line package checkerboard import ( "log" "net/http" "net/http/httptest" "testing" tgTesting "github.com/taironas/tinygraphs/testing" ) func TestCheckerboard(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(Checkerboard)) defer ts.Close() req, err := http.NewRequest("GET", "http://tinygraphs.com/checkerboard", nil) if err != nil { log.Fatal(err) test := tgTesting.GenerateHandlerFunc(t, Checkerboard) for _, p := range tgTesting.GoodParams { recorder := test("GET", p) if recorder.Code != http.StatusOK { t.Errorf("returned %v. Expected %v.", recorder.Code, http.StatusBadRequest) } } w := httptest.NewRecorder() Checkerboard(w, req) if w.Code != http.StatusOK { t.Errorf("Page didn't return %v", http.StatusOK) for _, p := range tgTesting.BadParams { recorder := test("GET", p) if recorder.Code != http.StatusOK { t.Errorf("returned %v. Expected %v.", recorder.Code, http.StatusBadRequest) } } } testing/testing.go 0 → 100644 +48 −0 Original line number Diff line number Diff line package testing import ( "net/http" "net/http/httptest" "strings" "testing" ) var GoodParams []string var BadParams []string func init() { GoodParams = []string{`{}`, `{"fmt":"jpeg"}`, `{"fmt":"svg"}`, `{"size":"200"}`, `{"bg":"ff4008","fg":"04d6f2"}`, `{"theme":"frogideas"}`, } BadParams = []string{ `{"wrongfmt":"wrongParameter"}`, `{"fmt":"wrongFormat"}`, `{"size":"wrongType"}`, `{"bg":"wrongType","fg":"wrongType"}`, `{"theme":"wrongTheme"}`, } } type HandlerFunc func(method, params string) *httptest.ResponseRecorder func GenerateHandlerFunc(t *testing.T, handler func(http.ResponseWriter, *http.Request)) HandlerFunc { return func(method, params string) *httptest.ResponseRecorder { if r, err := http.NewRequest(method, "", strings.NewReader(params)); err != nil { t.Errorf("%v", err) } else { r.Header.Set("Content-Type", "application/json") r.Body.Close() recorder := httptest.NewRecorder() handler(recorder, r) return recorder } return nil } } Loading
app-backend/main.go +1 −2 Original line number Diff line number Diff line Loading @@ -14,14 +14,13 @@ import ( ) var root = flag.String("root", "app", "file system path") var r route.Router func init() { log.SetFlags(log.Ltime | log.Ldate | log.Lshortfile) r = new(route.Router) } func main() { r := new(route.Router) r.HandleFunc("/checkerboard", checkerboard.Checkerboard) Loading
controllers/checkerboard/checkerboard_test.go +14 −11 Original line number Diff line number Diff line package checkerboard import ( "log" "net/http" "net/http/httptest" "testing" tgTesting "github.com/taironas/tinygraphs/testing" ) func TestCheckerboard(t *testing.T) { ts := httptest.NewServer(http.HandlerFunc(Checkerboard)) defer ts.Close() req, err := http.NewRequest("GET", "http://tinygraphs.com/checkerboard", nil) if err != nil { log.Fatal(err) test := tgTesting.GenerateHandlerFunc(t, Checkerboard) for _, p := range tgTesting.GoodParams { recorder := test("GET", p) if recorder.Code != http.StatusOK { t.Errorf("returned %v. Expected %v.", recorder.Code, http.StatusBadRequest) } } w := httptest.NewRecorder() Checkerboard(w, req) if w.Code != http.StatusOK { t.Errorf("Page didn't return %v", http.StatusOK) for _, p := range tgTesting.BadParams { recorder := test("GET", p) if recorder.Code != http.StatusOK { t.Errorf("returned %v. Expected %v.", recorder.Code, http.StatusBadRequest) } } }
testing/testing.go 0 → 100644 +48 −0 Original line number Diff line number Diff line package testing import ( "net/http" "net/http/httptest" "strings" "testing" ) var GoodParams []string var BadParams []string func init() { GoodParams = []string{`{}`, `{"fmt":"jpeg"}`, `{"fmt":"svg"}`, `{"size":"200"}`, `{"bg":"ff4008","fg":"04d6f2"}`, `{"theme":"frogideas"}`, } BadParams = []string{ `{"wrongfmt":"wrongParameter"}`, `{"fmt":"wrongFormat"}`, `{"size":"wrongType"}`, `{"bg":"wrongType","fg":"wrongType"}`, `{"theme":"wrongTheme"}`, } } type HandlerFunc func(method, params string) *httptest.ResponseRecorder func GenerateHandlerFunc(t *testing.T, handler func(http.ResponseWriter, *http.Request)) HandlerFunc { return func(method, params string) *httptest.ResponseRecorder { if r, err := http.NewRequest(method, "", strings.NewReader(params)); err != nil { t.Errorf("%v", err) } else { r.Header.Set("Content-Type", "application/json") r.Body.Close() recorder := httptest.NewRecorder() handler(recorder, r) return recorder } return nil } }