From 8e24ac6a417d7c6cdcccb6f89f7674defcf09c43 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Tue, 30 Apr 2019 11:29:48 +0200 Subject: [PATCH] Add more tests --- database_test.go | 91 ++++++++++++++++++++++++++++++++++++++++++++---- main.go | 4 +-- main_test.go | 26 ++++++++++++++ 3 files changed, 113 insertions(+), 8 deletions(-) create mode 100644 main_test.go diff --git a/database_test.go b/database_test.go index 3ca9e51..c7ad0a7 100644 --- a/database_test.go +++ b/database_test.go @@ -5,13 +5,76 @@ import ( "testing" ) + + +func TestViewsRequest_buildDateTimeFilter(t *testing.T) { + t.Run("No DateTime filter", func(t *testing.T) { + request := &ViewsRequest{ + from: "", + to: "", + } + namedArgs := &[]sql.NamedArg{} + if gotDateTimeFilter := request.buildDateTimeFilter(namedArgs); + gotDateTimeFilter != "" || + len(*namedArgs) != 0 { + t.Errorf("ViewsRequest.buildDateTimeFilter(): Wrong return string or length of namedArgs, should be empty") + } + }) + t.Run("From filter", func(t *testing.T) { + request := &ViewsRequest{ + from: "2019-01-01", + to: "", + } + namedArgs := &[]sql.NamedArg{} + if gotDateTimeFilter := request.buildDateTimeFilter(namedArgs); + gotDateTimeFilter != "datetime(time, 'localtime') >= :from" || + len(*namedArgs) != 1 || + (*namedArgs)[0].Name != "from" || + (*namedArgs)[0].Value != "2019-01-01" { + t.Errorf("ViewsRequest.buildDateTimeFilter(): Wrong return string or namedArgs") + } + }) + t.Run("To filter", func(t *testing.T) { + request := &ViewsRequest{ + from: "", + to: "2019-01-01", + } + namedArgs := &[]sql.NamedArg{} + if gotDateTimeFilter := request.buildDateTimeFilter(namedArgs); + gotDateTimeFilter != "datetime(time, 'localtime') <= :to" || + len(*namedArgs) != 1 || + (*namedArgs)[0].Name != "to" || + (*namedArgs)[0].Value != "2019-01-01" { + t.Errorf("ViewsRequest.buildDateTimeFilter(): Wrong return string or namedArgs") + } + }) + t.Run("From & To filter", func(t *testing.T) { + request := &ViewsRequest{ + from: "2018-01-01", + to: "2019-01-01", + } + namedArgs := &[]sql.NamedArg{} + if gotDateTimeFilter := request.buildDateTimeFilter(namedArgs); + gotDateTimeFilter != "datetime(time, 'localtime') between :from and :to" || + len(*namedArgs) != 2 || + (*namedArgs)[0].Name != "from" || + (*namedArgs)[0].Value != "2018-01-01" || + (*namedArgs)[1].Name != "to" || + (*namedArgs)[1].Value != "2019-01-01" { + t.Errorf("ViewsRequest.buildDateTimeFilter(): Wrong return string or namedArgs") + } + }) +} + func TestViewsRequest_buildUrlFilter(t *testing.T) { t.Run("No url filter", func(t *testing.T) { request := &ViewsRequest{ url: "", } namedArgs := &[]sql.NamedArg{} - if gotUrlFilter := request.buildUrlFilter(namedArgs); gotUrlFilter != "" || len(*namedArgs) != 0 { + if gotUrlFilter := request.buildUrlFilter(namedArgs); + gotUrlFilter != "" || + len(*namedArgs) != 0 { t.Errorf("ViewsRequest.buildUrlFilter(): Wrong return string or length of namedArgs, should be empty") } }) @@ -20,7 +83,11 @@ func TestViewsRequest_buildUrlFilter(t *testing.T) { url: "google", } namedArgs := &[]sql.NamedArg{} - if gotUrlFilter := request.buildUrlFilter(namedArgs); gotUrlFilter != "url like :url" || len(*namedArgs) != 1 || (*namedArgs)[0].Name != "url" || (*namedArgs)[0].Value != "%google%" { + if gotUrlFilter := request.buildUrlFilter(namedArgs); + gotUrlFilter != "url like :url" || + len(*namedArgs) != 1 || + (*namedArgs)[0].Name != "url" || + (*namedArgs)[0].Value != "%google%" { t.Errorf("ViewsRequest.buildUrlFilter(): Wrong return string or namedArgs") } }) @@ -32,7 +99,9 @@ func TestViewsRequest_buildRefFilter(t *testing.T) { ref: "", } namedArgs := &[]sql.NamedArg{} - if gotRefFilter := request.buildRefFilter(namedArgs); gotRefFilter != "" || len(*namedArgs) != 0 { + if gotRefFilter := request.buildRefFilter(namedArgs); + gotRefFilter != "" || + len(*namedArgs) != 0 { t.Errorf("ViewsRequest.buildRefFilter(): Wrong return string or length of namedArgs, should be empty") } }) @@ -41,7 +110,11 @@ func TestViewsRequest_buildRefFilter(t *testing.T) { ref: "google", } namedArgs := &[]sql.NamedArg{} - if gotRefFilter := request.buildRefFilter(namedArgs); gotRefFilter != "ref like :ref" || len(*namedArgs) != 1 || (*namedArgs)[0].Name != "ref" || (*namedArgs)[0].Value != "%google%" { + if gotRefFilter := request.buildRefFilter(namedArgs); + gotRefFilter != "ref like :ref" || + len(*namedArgs) != 1 || + (*namedArgs)[0].Name != "ref" || + (*namedArgs)[0].Value != "%google%" { t.Errorf("ViewsRequest.buildRefFilter(): Wrong return string or namedArgs") } }) @@ -53,7 +126,9 @@ func TestViewsRequest_buildUseragentFilter(t *testing.T) { ua: "", } namedArgs := &[]sql.NamedArg{} - if gotUseragentFilter := request.buildUseragentFilter(namedArgs); gotUseragentFilter != "" || len(*namedArgs) != 0 { + if gotUseragentFilter := request.buildUseragentFilter(namedArgs); + gotUseragentFilter != "" || + len(*namedArgs) != 0 { t.Errorf("ViewsRequest.buildUseragentFilter(): Wrong return string or length of namedArgs, should be empty") } }) @@ -62,7 +137,11 @@ func TestViewsRequest_buildUseragentFilter(t *testing.T) { ua: "Firefox", } namedArgs := &[]sql.NamedArg{} - if gotUseragentFilter := request.buildUseragentFilter(namedArgs); gotUseragentFilter != "useragent like :ua" || len(*namedArgs) != 1 || (*namedArgs)[0].Name != "ua" || (*namedArgs)[0].Value != "%Firefox%" { + if gotUseragentFilter := request.buildUseragentFilter(namedArgs); + gotUseragentFilter != "useragent like :ua" || + len(*namedArgs) != 1 || + (*namedArgs)[0].Name != "ua" || + (*namedArgs)[0].Value != "%Firefox%" { t.Errorf("ViewsRequest.buildUseragentFilter(): Wrong return string or namedArgs") } }) diff --git a/main.go b/main.go index 436f3bd..88088d7 100644 --- a/main.go +++ b/main.go @@ -56,7 +56,7 @@ func setupRouter() { staticRouter := app.router.PathPrefix("").Subrouter() staticRouter.Use(corsHandler) staticRouter.HandleFunc("/kis3.js", serveTrackingScript) - staticRouter.PathPrefix("").Handler(http.HandlerFunc(sendHelloResponse)) + staticRouter.PathPrefix("").Handler(http.HandlerFunc(HelloResponseHandler)) } func startListening() { @@ -77,7 +77,7 @@ func trackView(w http.ResponseWriter, r *http.Request) { } } -func sendHelloResponse(w http.ResponseWriter, _ *http.Request) { +func HelloResponseHandler(w http.ResponseWriter, _ *http.Request) { _, _ = fmt.Fprint(w, "Hello from KISSS") } diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..33a2186 --- /dev/null +++ b/main_test.go @@ -0,0 +1,26 @@ +package main + +import ( + "net/http" + "net/http/httptest" + "testing" +) + +func TestHelloResponseHandler(t *testing.T) { + t.Run("Hello response", func(t *testing.T) { + req, err := http.NewRequest("GET", "/", nil) + if err != nil { + t.Fatal(err) + } + rr := httptest.NewRecorder() + handler := http.HandlerFunc(HelloResponseHandler) + handler.ServeHTTP(rr, req) + if status := rr.Code; status != http.StatusOK { + t.Errorf("handler returned wrong status code: got %v want %v", status, http.StatusOK) + } + expected := "Hello from KISSS" + if rr.Body.String() != expected { + t.Errorf("handler returned unexpected body: got %v want %v", rr.Body.String(), expected) + } + }) +}