internalhttp.TestGetShows   A
last analyzed

Complexity

Conditions 2

Size

Total Lines 41
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 23
dl 0
loc 41
rs 9.328
c 0
b 0
f 0
nop 1
1
package internalhttp
2
3
import (
4
	"context"
5
	"encoding/json"
6
	"io"
7
	"net/http"
8
	"net/http/httptest"
9
	"testing"
10
11
	"github.com/cronnoss/tk-api/internal/model"
12
	"github.com/cronnoss/tk-api/internal/server/mocks"
13
	"github.com/cronnoss/tk-api/internal/storage/models"
14
	"github.com/stretchr/testify/mock"
15
	"github.com/stretchr/testify/require"
16
)
17
18
func TestGetShows(t *testing.T) {
19
	showServiceMock := mocks.NewApplication(t)
20
	showServiceMock.On("CreateShow", mock.Anything, mock.Anything).Return(models.Show{}, nil)
21
22
	_, err := showServiceMock.CreateShow(context.Background(), models.Show{})
23
	require.NoError(t, err)
24
25
	// Step 1: Mock the remote API
26
	mockResponse := `{
27
	"response": [
28
		{"id": 1, "name": "Show #1"},
29
		{"id": 2, "name": "Show #2"}
30
	]
31
}`
32
	mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
33
		_, _ = w.Write([]byte(mockResponse))
34
	},
35
	))
36
37
	// Step 2: Make a GET request to the remote API
38
	req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, mockServer.URL, nil)
39
	require.NoError(t, err)
40
41
	resp, err := http.DefaultClient.Do(req)
42
	require.NoError(t, err)
43
44
	defer resp.Body.Close()
45
46
	// Step 3: Read and decode the remote API response
47
	body, err := io.ReadAll(resp.Body)
48
	require.NoError(t, err)
49
50
	var showListResponse model.ShowListResponse
51
	err = json.Unmarshal(body, &showListResponse)
52
	require.NoError(t, err)
53
54
	require.Equal(t, 2, len(showListResponse.Response))
55
	require.Equal(t, int64(1), showListResponse.Response[0].ID)
56
	require.Equal(t, "Show #1", showListResponse.Response[0].Name)
57
	require.Equal(t, int64(2), showListResponse.Response[1].ID)
58
	require.Equal(t, "Show #2", showListResponse.Response[1].Name)
59
}
60