gitlab.com/picnic-app/backend/role-api@v0.0.0-20230614140944-06a76ff3696d/internal/controller/assing_role_test.go (about)

     1  package controller_test
     2  
     3  import (
     4  	"context"
     5  	"reflect"
     6  	"testing"
     7  
     8  	"github.com/google/uuid"
     9  	"github.com/stretchr/testify/require"
    10  	"google.golang.org/grpc/codes"
    11  	"google.golang.org/grpc/status"
    12  
    13  	v1 "gitlab.com/picnic-app/backend/libs/golang/protobuf-registry/gen/role-api/role/v1"
    14  )
    15  
    16  func TestController_AssignRole_Validation(t *testing.T) {
    17  	t.Parallel()
    18  
    19  	container := initContainer(t)
    20  
    21  	role, err := setUpRole(container)
    22  	require.NoError(t, err)
    23  
    24  	for _, test := range []struct {
    25  		name string
    26  		ctx  context.Context
    27  		req  *v1.AssignRoleRequest
    28  		want codes.Code
    29  	}{
    30  		{
    31  			name: "no request",
    32  			ctx:  context.Background(),
    33  			req:  nil,
    34  			want: codes.InvalidArgument,
    35  		},
    36  		{
    37  			name: "no entity id",
    38  			ctx:  context.Background(),
    39  			req: &v1.AssignRoleRequest{
    40  				RoleId: role.Id,
    41  			},
    42  			want: codes.InvalidArgument,
    43  		},
    44  		{
    45  			name: "no role id",
    46  			ctx:  context.Background(),
    47  			req: &v1.AssignRoleRequest{
    48  				EntityId: uuid.NewString(),
    49  			},
    50  			want: codes.InvalidArgument,
    51  		},
    52  	} {
    53  		test := test
    54  		t.Run(test.name, func(t *testing.T) {
    55  			_, err := container.controller.AssignRole(test.ctx, test.req)
    56  			got := status.Code(err)
    57  			require.Equal(t, test.want, got, err)
    58  		})
    59  	}
    60  }
    61  
    62  func TestController_AssignRole(t *testing.T) {
    63  	t.Parallel()
    64  
    65  	container := initContainer(t)
    66  
    67  	role, err := setUpRole(container)
    68  	require.NoError(t, err)
    69  
    70  	entityID := uuid.NewString()
    71  	circleID := uuid.NewString()
    72  	userID := uuid.NewString()
    73  
    74  	ctx := context.Background()
    75  
    76  	// assign
    77  	_, err = container.controller.AssignRole(
    78  		ctx,
    79  		&v1.AssignRoleRequest{
    80  			EntityId: entityID,
    81  			RoleId:   role.Id,
    82  			CircleId: circleID,
    83  			UserId:   userID,
    84  		},
    85  	)
    86  	require.NoError(t, err)
    87  
    88  	// get assigned roles
    89  	getResponse, err := container.controller.GetAssignedRoles(
    90  		ctx,
    91  		&v1.GetAssignedRolesRequest{
    92  			EntityId: entityID,
    93  			CircleId: circleID,
    94  			UserId:   userID,
    95  		},
    96  	)
    97  	require.NoError(t, err)
    98  
    99  	require.NotNil(t, getResponse.Scopes)
   100  	require.Len(t, getResponse.Scopes, 1)
   101  	scope := getResponse.Scopes[0]
   102  	require.Equal(t, scope.RoleId, role.Id)
   103  	require.Equal(t, scope.CircleId, circleID)
   104  	require.Equal(t, scope.UserId, userID)
   105  
   106  	require.NotNil(t, getResponse.Roles)
   107  	require.Len(t, getResponse.Roles, 1)
   108  	assigned := getResponse.Roles[0]
   109  	require.True(t, reflect.DeepEqual(role, assigned))
   110  }