...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/user/server/server_test.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/user/server

     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