summaryrefslogtreecommitdiff
path: root/app/controllers/sparkles/controller_test.go
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-04-12 18:11:05 -0600
committermo khan <mo@mokhan.ca>2025-04-12 18:11:05 -0600
commit0bef608297d7def2a18d054e7230fe0e0a3710a7 (patch)
tree93a8ec34baa695705832ace22266e1f13cb9e64e /app/controllers/sparkles/controller_test.go
parent54715831a2d307390c05214b6ae8bc721ade6680 (diff)
refactor: extract mountable interface to allow controllers to mount themselves into the mux
Diffstat (limited to 'app/controllers/sparkles/controller_test.go')
-rw-r--r--app/controllers/sparkles/controller_test.go57
1 files changed, 57 insertions, 0 deletions
diff --git a/app/controllers/sparkles/controller_test.go b/app/controllers/sparkles/controller_test.go
new file mode 100644
index 0000000..a351da1
--- /dev/null
+++ b/app/controllers/sparkles/controller_test.go
@@ -0,0 +1,57 @@
+package sparkles
+
+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)
+
+ controller := New(store)
+
+ t.Run("returns JSON", func(t *testing.T) {
+ request := test.Request("GET", "/sparkles",
+ test.WithAcceptHeader(serde.JSON),
+ )
+ response := httptest.NewRecorder()
+
+ controller.Index(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()
+ controller := New(repository)
+
+ sparkle, _ := domain.NewSparkle("@tanuki for reviewing my MR!")
+ request := test.Request("POST", "/sparkles", test.WithContentType(sparkle, serde.JSON))
+ response := httptest.NewRecorder()
+
+ controller.Create(response, request)
+
+ require.Equal(t, http.StatusCreated, response.Code)
+ assert.Equal(t, 1, len(repository.All()))
+ })
+ })
+}