summaryrefslogtreecommitdiff
path: root/handlers_test.go
diff options
context:
space:
mode:
authorxengineering <me@xengineering.eu>2026-06-21 11:49:42 +0200
committerxengineering <me@xengineering.eu>2026-06-21 11:55:44 +0200
commit7ab03af3f662c90b1868f5ef14e70f443b2d91cd (patch)
treeb82e9fc9b102bec32aa9f0705b52c446df8da60b /handlers_test.go
parent383cf7a521f7bfcdf552cd18ea9919930af2e9cf (diff)
downloadfinserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.tar
finserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.tar.zst
finserv-7ab03af3f662c90b1868f5ef14e70f443b2d91cd.zip
Add `register` HTTP handler
This allows users to register.
Diffstat (limited to 'handlers_test.go')
-rw-r--r--handlers_test.go82
1 files changed, 69 insertions, 13 deletions
diff --git a/handlers_test.go b/handlers_test.go
index 4e28de7..3e226d0 100644
--- a/handlers_test.go
+++ b/handlers_test.go
@@ -1,30 +1,86 @@
package main
import (
+ "bytes"
+ "database/sql"
"net/http"
"net/http/httptest"
"testing"
)
+type Handler func(db *sql.DB) http.Handler
+
+type httpCase struct {
+ name string
+ method string
+ input []byte
+ output []byte
+ status int
+}
+
+func testHandler(
+ t *testing.T,
+ handler Handler,
+ cases []httpCase,
+ setup func(t *testing.T) *sql.DB,
+) {
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ db := setup(t)
+
+ in := bytes.NewReader(c.input)
+
+ rr := httptest.NewRecorder()
+
+ req, err := http.NewRequest("POST", "/", in)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ handler(db).ServeHTTP(rr, req)
+
+ if rr.Code != c.status {
+ t.Errorf("handler returned wrong status code: got %v want %v",
+ rr.Code, c.status)
+ }
+
+ if rr.Body.String() != string(c.output) {
+ t.Errorf("handler returned unexpected body: got %v want %v",
+ rr.Body.String(), string(c.output))
+ }
+ })
+ }
+}
+
func TestHTTPVersion(t *testing.T) {
- req, err := http.NewRequest("GET", "/", nil)
- if err != nil {
- t.Fatal(err)
+ cases := []httpCase{
+ {"basic", "GET", []byte(``), []byte(versionTxt), http.StatusOK},
}
- rr := httptest.NewRecorder()
- handler := http.HandlerFunc(version)
+ setup := func(t *testing.T) *sql.DB {
+ return nil
+ }
- handler.ServeHTTP(rr, req)
+ testHandler(t, version, cases, setup)
+}
- if status := rr.Code; status != http.StatusOK {
- t.Errorf("handler returned wrong status code: got %v want %v",
- status, http.StatusOK)
+func TestHTTPRegister(t *testing.T) {
+ cases := []httpCase{
+ {"basic", "POST", []byte(`{"username":"testuser","password":"mypass"}`), []byte(""), http.StatusOK},
+ {"missing-password", "POST", []byte(`{"username":"testuser"}`), []byte(""), http.StatusBadRequest},
+ {"missing-username", "POST", []byte(`{"password":"mypass"}`), []byte(""), http.StatusBadRequest},
+ {"unknown-field", "POST", []byte(`{"username":"testuser","password":"mypass","foo":"bar"}`), []byte(""), http.StatusBadRequest},
+ {"invalid-json", "POST", []byte(`{username":"testuser","password":"mypass"}`), []byte(""), http.StatusBadRequest},
}
- expected := versionTxt
- if rr.Body.String() != expected {
- t.Errorf("handler returned unexpected body: got %v want %v",
- rr.Body.String(), expected)
+ setup := func(t *testing.T) *sql.DB {
+ db, _ := emptyDB(t)
+ err := MigrateToLatest(db)
+ if err != nil {
+ t.Fatalf("Could not migrate test database: %v", err)
+ }
+ return db
}
+
+ testHandler(t, register, cases, setup)
}