1 package server
2
3 import (
4 "context"
5 _ "embed"
6 "io"
7 "net/http"
8 "net/http/httptest"
9 "testing"
10
11 "github.com/gin-gonic/gin"
12 "github.com/stretchr/testify/assert"
13 )
14
15 func getTestGinContext(r *httptest.ResponseRecorder) (*gin.Context, *gin.Engine) {
16 gin.SetMode(gin.TestMode)
17 ctx, ginEngine := gin.CreateTestContext(r)
18 return ctx, ginEngine
19 }
20
21 type mockUserService struct {
22 Service
23
24 roles []string
25
26 res []string
27 err error
28 }
29
30 func (us *mockUserService) GetEARoles(_ context.Context, roles []string) ([]string, error) {
31 us.roles = roles
32 return us.res, us.err
33 }
34
35 func TestServerEARoles(t *testing.T) {
36 tests := map[string]struct {
37 query string
38
39 mock mockUserService
40
41 expRoles []string
42
43 expResult string
44 expCode int
45 }{
46 "Single role query": {
47 query: "/eaRoles?role=level2",
48 mock: mockUserService{
49 res: []string{"ea-basic"},
50 err: nil,
51 },
52 expRoles: []string{"level2"},
53 expResult: `["ea-basic"]`,
54 expCode: 200,
55 },
56 "Standard ea-role mapping": {
57 query: "/eaRoles?role=level2&role=level3",
58 mock: mockUserService{
59 res: []string{"ea-basic"},
60 err: nil,
61 },
62 expRoles: []string{"level2", "level3"},
63 expResult: `["ea-basic"]`,
64 expCode: 200,
65 },
66 "Admin ea-role mapping": {
67 query: "/eaRoles?role=level2&role=level1",
68 mock: mockUserService{
69 res: []string{"ea-basic", "ea-admin"},
70 err: nil,
71 },
72 expRoles: []string{"level2", "level1"},
73 expResult: `["ea-basic", "ea-admin"]`,
74 expCode: 200,
75 },
76 "Missing ea-role query": {
77 query: "/eaRoles",
78 mock: mockUserService{
79 res: []string{},
80 err: nil,
81 },
82 expResult: `[]`,
83 expCode: 200,
84 },
85 "Unknown ea-role mapping": {
86 query: "/eaRoles?role=l2",
87 mock: mockUserService{
88 res: []string{},
89 err: nil,
90 },
91 expRoles: []string{"l2"},
92 expResult: `[]`,
93 expCode: 200,
94 },
95 }
96
97 for name, tc := range tests {
98 tc := tc
99 t.Run(name, func(t *testing.T) {
100 t.Parallel()
101
102 r := httptest.NewRecorder()
103
104 _, ginEngine := getTestGinContext(r)
105
106 _, err := NewUserService(ginEngine, &tc.mock, newLogger())
107 assert.NoError(t, err)
108
109 req, err := http.NewRequest(http.MethodGet, tc.query, nil)
110 assert.NoError(t, err)
111
112 ginEngine.ServeHTTP(r, req)
113
114 response := r.Result()
115 assert.Equal(t, tc.expCode, response.StatusCode)
116
117 data, err := io.ReadAll(r.Body)
118 assert.NoError(t, err)
119
120 assert.JSONEq(t, tc.expResult, string(data))
121
122 assert.Equal(t, tc.expRoles, tc.mock.roles)
123 })
124 }
125 }
126
View as plain text