main
1package sparkles
2
3import (
4 "net/http"
5 "net/http/httptest"
6 "testing"
7
8 "github.com/stretchr/testify/assert"
9 "github.com/stretchr/testify/require"
10 "github.com/xlgmokha/x/pkg/serde"
11 "gitlab.com/mokhax/sparkled/pkg/db"
12 "gitlab.com/mokhax/sparkled/pkg/domain"
13 "gitlab.com/mokhax/sparkled/pkg/test"
14)
15
16func TestSparkles(t *testing.T) {
17 t.Run("GET /sparkles", func(t *testing.T) {
18 sparkle, _ := domain.NewSparkle("@tanuki for helping me")
19 store := db.NewRepository()
20 store.Save(sparkle)
21
22 controller := New(store)
23
24 t.Run("returns JSON", func(t *testing.T) {
25 request := test.Request("GET", "/sparkles",
26 test.WithAcceptHeader(serde.JSON),
27 )
28 response := httptest.NewRecorder()
29
30 controller.Index(response, request)
31
32 assert.Equal(t, http.StatusOK, response.Code)
33 items, err := serde.FromJSON[[]*domain.Sparkle](response.Body)
34 require.NoError(t, err)
35
36 assert.Equal(t, 1, len(items))
37 assert.Equal(t, "@tanuki", items[0].Sparklee)
38 assert.Equal(t, "for helping me", items[0].Reason)
39 })
40 })
41
42 t.Run("POST /sparkles", func(t *testing.T) {
43 t.Run("saves a new sparkle", func(t *testing.T) {
44 repository := db.NewRepository()
45 controller := New(repository)
46
47 sparkle, _ := domain.NewSparkle("@tanuki for reviewing my MR!")
48 request := test.Request("POST", "/sparkles", test.WithContentType(sparkle, serde.JSON))
49 response := httptest.NewRecorder()
50
51 controller.Create(response, request)
52
53 require.Equal(t, http.StatusCreated, response.Code)
54 assert.Equal(t, 1, len(repository.All()))
55 })
56 })
57}