Commit bb61d404 authored by santiaago's avatar santiaago
Browse files

add checkerboard testing

parent 679fd07a
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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)

+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
	}
}