diff options
| author | mo khan <mo@mokhan.ca> | 2025-04-12 18:11:05 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-04-12 18:11:05 -0600 |
| commit | 0bef608297d7def2a18d054e7230fe0e0a3710a7 (patch) | |
| tree | 93a8ec34baa695705832ace22266e1f13cb9e64e /pkg/web | |
| parent | 54715831a2d307390c05214b6ae8bc721ade6680 (diff) | |
refactor: extract mountable interface to allow controllers to mount themselves into the mux
Diffstat (limited to 'pkg/web')
| -rw-r--r-- | pkg/web/mountable.go | 7 | ||||
| -rw-r--r-- | pkg/web/server.go | 28 | ||||
| -rw-r--r-- | pkg/web/server_test.go | 31 | ||||
| -rw-r--r-- | pkg/web/sparkles_test.go | 57 |
4 files changed, 7 insertions, 116 deletions
diff --git a/pkg/web/mountable.go b/pkg/web/mountable.go new file mode 100644 index 0000000..6e04b86 --- /dev/null +++ b/pkg/web/mountable.go @@ -0,0 +1,7 @@ +package web + +import "net/http" + +type Mountable interface { + MountTo(*http.ServeMux) +} diff --git a/pkg/web/server.go b/pkg/web/server.go deleted file mode 100644 index cccb4e1..0000000 --- a/pkg/web/server.go +++ /dev/null @@ -1,28 +0,0 @@ -package web - -import ( - "net/http" - - "gitlab.com/mokhax/sparkled/app/controllers/health" - "gitlab.com/mokhax/sparkled/app/controllers/sparkles" - "gitlab.com/mokhax/sparkled/pkg/db" -) - -type Server struct { - mux *http.ServeMux -} - -func New(storage db.Repository) *Server { - mux := http.NewServeMux() - c := sparkles.New(storage) - mux.HandleFunc("GET /sparkles", c.Index) - mux.HandleFunc("POST /sparkles", c.Create) - mux.HandleFunc("GET /health", health.New().Index) - mux.Handle("GET /", http.FileServer(http.Dir("public"))) - - return &Server{mux: mux} -} - -func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { - s.mux.ServeHTTP(w, r) -} diff --git a/pkg/web/server_test.go b/pkg/web/server_test.go deleted file mode 100644 index fd3c0ad..0000000 --- a/pkg/web/server_test.go +++ /dev/null @@ -1,31 +0,0 @@ -package web - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "gitlab.com/mokhax/sparkled/pkg/db" - "gitlab.com/mokhax/sparkled/pkg/test" -) - -func TestServer(t *testing.T) { - server := New(db.NewRepository()) - - t.Run("GET /index.html", func(t *testing.T) { - t.Skip() - response := httptest.NewRecorder() - - server.ServeHTTP(response, test.Request("GET", "/")) - assert.Equal(t, http.StatusOK, response.Code) - assert.Contains(t, response.Body.String(), "SparkleLab") - }) - - t.Run("GET /health", func(t *testing.T) { - response := httptest.NewRecorder() - - server.ServeHTTP(response, test.Request("GET", "/health")) - assert.Equal(t, http.StatusOK, response.Code) - }) -} diff --git a/pkg/web/sparkles_test.go b/pkg/web/sparkles_test.go deleted file mode 100644 index b4b7f54..0000000 --- a/pkg/web/sparkles_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package web - -import ( - "net/http" - "net/http/httptest" - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - "github.com/xlgmokha/x/pkg/serde" - "gitlab.com/mokhax/sparkled/pkg/db" - "gitlab.com/mokhax/sparkled/pkg/domain" - "gitlab.com/mokhax/sparkled/pkg/test" -) - -func TestSparkles(t *testing.T) { - t.Run("GET /sparkles", func(t *testing.T) { - sparkle, _ := domain.NewSparkle("@tanuki for helping me") - store := db.NewRepository() - store.Save(sparkle) - - server := New(store) - - t.Run("returns JSON", func(t *testing.T) { - request := test.Request("GET", "/sparkles", - test.WithAcceptHeader(serde.JSON), - ) - response := httptest.NewRecorder() - - server.ServeHTTP(response, request) - - assert.Equal(t, http.StatusOK, response.Code) - items, err := serde.FromJSON[[]*domain.Sparkle](response.Body) - require.NoError(t, err) - - assert.Equal(t, 1, len(items)) - assert.Equal(t, "@tanuki", items[0].Sparklee) - assert.Equal(t, "for helping me", items[0].Reason) - }) - }) - - t.Run("POST /sparkles", func(t *testing.T) { - t.Run("saves a new sparkle", func(t *testing.T) { - repository := db.NewRepository() - server := New(repository) - - sparkle, _ := domain.NewSparkle("@tanuki for reviewing my MR!") - request := test.Request("POST", "/sparkles", test.WithContentType(sparkle, serde.JSON)) - response := httptest.NewRecorder() - - server.ServeHTTP(response, request) - - require.Equal(t, http.StatusCreated, response.Code) - assert.Equal(t, 1, len(repository.All())) - }) - }) -} |
