diff --git a/server/src/api/boards.go b/server/src/api/boards.go index 2b10e089d9..d80bb0c622 100644 --- a/server/src/api/boards.go +++ b/server/src/api/boards.go @@ -215,7 +215,7 @@ func (s *Server) joinBoard(w http.ResponseWriter, r *http.Request) { } if b.AccessPolicy == boards.Public { - _, err := s.sessions.Create(ctx, board, user) + _, err := s.sessions.Create(ctx, sessions.BoardSessionCreateRequest{Board: board, User: user, Role: common.ParticipantRole}) if err != nil { span.SetStatus(codes.Error, "failed to create session") span.RecordError(err) @@ -251,7 +251,7 @@ func (s *Server) joinBoard(w http.ResponseWriter, r *http.Request) { } encodedPassphrase := common.Sha512BySalt(body.Passphrase, *b.Salt) if encodedPassphrase == *b.Passphrase { - _, err := s.sessions.Create(ctx, board, user) + _, err := s.sessions.Create(ctx, sessions.BoardSessionCreateRequest{Board: board, User: user, Role: common.ParticipantRole}) if err != nil { span.SetStatus(codes.Error, "failed to create session") span.RecordError(err) diff --git a/server/src/api/boards_test.go b/server/src/api/boards_test.go index 52d0f57aea..649a070cad 100644 --- a/server/src/api/boards_test.go +++ b/server/src/api/boards_test.go @@ -293,7 +293,8 @@ func (suite *BoardTestSuite) TestJoinBoard() { } } else { if !te.sessionExists { - sessionMock.EXPECT().Create(mock.Anything, boardID, userID).Return(new(sessions.BoardSession), te.err) + sessionMock.EXPECT().Create(mock.Anything, sessions.BoardSessionCreateRequest{Board: boardID, User: userID, Role: common.ParticipantRole}). + Return(new(sessions.BoardSession), te.err) } } diff --git a/server/src/sessionrequests/service.go b/server/src/sessionrequests/service.go index 97f4a558a8..f1ed2fee17 100644 --- a/server/src/sessionrequests/service.go +++ b/server/src/sessionrequests/service.go @@ -107,7 +107,7 @@ func (service *BoardSessionRequestService) Update(ctx context.Context, body Boar } if request.Status == RequestAccepted { - _, err := service.sessionService.Create(ctx, request.Board, request.User) + _, err := service.sessionService.Create(ctx, sessions.BoardSessionCreateRequest{Board: request.Board, User: request.User, Role: common.ParticipantRole}) if err != nil { span.SetStatus(codes.Error, "failed to create board session") span.RecordError(err) diff --git a/server/src/sessionrequests/service_test.go b/server/src/sessionrequests/service_test.go index 17343c69a0..cde9e2bdb4 100644 --- a/server/src/sessionrequests/service_test.go +++ b/server/src/sessionrequests/service_test.go @@ -9,6 +9,7 @@ import ( "testing" "time" + "scrumlr.io/server/common" "scrumlr.io/server/sessions" "github.com/google/uuid" @@ -264,6 +265,7 @@ func TestCreateSessionRequest_DBError(t *testing.T) { func TestUpdatesessionRequest(t *testing.T) { boardId := uuid.New() userId := uuid.New() + role := common.ParticipantRole user := sessions.User{ ID: userId, @@ -273,8 +275,8 @@ func TestUpdatesessionRequest(t *testing.T) { Return(DatabaseBoardSessionRequest{Board: boardId, User: userId, Status: RequestAccepted}, nil) mockSessionService := sessions.NewMockSessionService(t) - mockSessionService.EXPECT().Create(mock.Anything, boardId, userId). - Return(&sessions.BoardSession{Board: boardId, User: user}, nil) + mockSessionService.EXPECT().Create(mock.Anything, sessions.BoardSessionCreateRequest{Board: boardId, User: userId, Role: role}). + Return(&sessions.BoardSession{Board: boardId, User: user, Role: role}, nil) mockBroker := realtime.NewMockClient(t) mockBroker.EXPECT().Publish(mock.Anything, mock.AnythingOfType("string"), mock.Anything).Return(nil) diff --git a/server/src/sessions/api_sessions.go b/server/src/sessions/api_sessions.go index 794e8ee334..305b2d1af5 100644 --- a/server/src/sessions/api_sessions.go +++ b/server/src/sessions/api_sessions.go @@ -8,7 +8,7 @@ import ( ) type SessionService interface { - Create(ctx context.Context, boardID, userID uuid.UUID) (*BoardSession, error) + Create(ctx context.Context, body BoardSessionCreateRequest) (*BoardSession, error) Update(ctx context.Context, body BoardSessionUpdateRequest) (*BoardSession, error) UpdateAll(ctx context.Context, body BoardSessionsUpdateRequest) ([]*BoardSession, error) UpdateUserBoards(ctx context.Context, body BoardSessionUpdateRequest) ([]*BoardSession, error) diff --git a/server/src/sessions/database_session_test.go b/server/src/sessions/database_session_test.go index f438bfb683..47d9790393 100644 --- a/server/src/sessions/database_session_test.go +++ b/server/src/sessions/database_session_test.go @@ -3,7 +3,6 @@ package sessions import ( "context" "database/sql" - "errors" "log" "testing" @@ -82,20 +81,6 @@ func (suite *DatabaseSessionTestSuite) Test_Database_CreateSession_Moderator() { assert.NotNil(t, dbSession.CreatedAt) } -func (suite *DatabaseSessionTestSuite) Test_Database_CreateSession_Owner() { - t := suite.T() - database := NewSessionDatabase(suite.db) - - userId := suite.users["Luke"].id - boardId := suite.boards["Write"].id - - dbSession, err := database.Create(context.Background(), DatabaseBoardSessionInsert{User: userId, Board: boardId, Role: common.OwnerRole}) - - assert.NotNil(t, err) - assert.Equal(t, err, errors.New("not allowed to create board session with owner role")) - assert.Equal(t, DatabaseBoardSession{}, dbSession) -} - func (suite *DatabaseSessionTestSuite) Test_Database_CreateSession_Duplicate() { t := suite.T() database := NewSessionDatabase(suite.db) diff --git a/server/src/sessions/database_sessions.go b/server/src/sessions/database_sessions.go index 1a64ed4d80..dabf4e1286 100644 --- a/server/src/sessions/database_sessions.go +++ b/server/src/sessions/database_sessions.go @@ -2,7 +2,6 @@ package sessions import ( "context" - "errors" "github.com/google/uuid" "github.com/uptrace/bun" @@ -22,10 +21,6 @@ func NewSessionDatabase(database *bun.DB) SessionDatabase { } func (database *SessionDB) Create(ctx context.Context, boardSession DatabaseBoardSessionInsert) (DatabaseBoardSession, error) { - if boardSession.Role == common.OwnerRole { - return DatabaseBoardSession{}, errors.New("not allowed to create board session with owner role") - } - var session DatabaseBoardSession insertQuery := database.db.NewInsert(). Model(&boardSession). diff --git a/server/src/sessions/dto_sessions.go b/server/src/sessions/dto_sessions.go index 5897775747..1938108fdc 100644 --- a/server/src/sessions/dto_sessions.go +++ b/server/src/sessions/dto_sessions.go @@ -40,6 +40,12 @@ type BoardSession struct { Board uuid.UUID `json:"-"` } +type BoardSessionCreateRequest struct { + Board uuid.UUID + User uuid.UUID + Role common.SessionRole +} + // BoardSessionUpdateRequest represents the request to update a single participant. type BoardSessionUpdateRequest struct { diff --git a/server/src/sessions/mock_SessionService.go b/server/src/sessions/mock_SessionService.go index 63301222f0..d255ed62da 100644 --- a/server/src/sessions/mock_SessionService.go +++ b/server/src/sessions/mock_SessionService.go @@ -154,8 +154,8 @@ func (_c *MockSessionService_Connect_Call) RunAndReturn(run func(ctx context.Con } // Create provides a mock function for the type MockSessionService -func (_mock *MockSessionService) Create(ctx context.Context, boardID uuid.UUID, userID uuid.UUID) (*BoardSession, error) { - ret := _mock.Called(ctx, boardID, userID) +func (_mock *MockSessionService) Create(ctx context.Context, body BoardSessionCreateRequest) (*BoardSession, error) { + ret := _mock.Called(ctx, body) if len(ret) == 0 { panic("no return value specified for Create") @@ -163,18 +163,18 @@ func (_mock *MockSessionService) Create(ctx context.Context, boardID uuid.UUID, var r0 *BoardSession var r1 error - if returnFunc, ok := ret.Get(0).(func(context.Context, uuid.UUID, uuid.UUID) (*BoardSession, error)); ok { - return returnFunc(ctx, boardID, userID) + if returnFunc, ok := ret.Get(0).(func(context.Context, BoardSessionCreateRequest) (*BoardSession, error)); ok { + return returnFunc(ctx, body) } - if returnFunc, ok := ret.Get(0).(func(context.Context, uuid.UUID, uuid.UUID) *BoardSession); ok { - r0 = returnFunc(ctx, boardID, userID) + if returnFunc, ok := ret.Get(0).(func(context.Context, BoardSessionCreateRequest) *BoardSession); ok { + r0 = returnFunc(ctx, body) } else { if ret.Get(0) != nil { r0 = ret.Get(0).(*BoardSession) } } - if returnFunc, ok := ret.Get(1).(func(context.Context, uuid.UUID, uuid.UUID) error); ok { - r1 = returnFunc(ctx, boardID, userID) + if returnFunc, ok := ret.Get(1).(func(context.Context, BoardSessionCreateRequest) error); ok { + r1 = returnFunc(ctx, body) } else { r1 = ret.Error(1) } @@ -188,30 +188,24 @@ type MockSessionService_Create_Call struct { // Create is a helper method to define mock.On call // - ctx context.Context -// - boardID uuid.UUID -// - userID uuid.UUID -func (_e *MockSessionService_Expecter) Create(ctx interface{}, boardID interface{}, userID interface{}) *MockSessionService_Create_Call { - return &MockSessionService_Create_Call{Call: _e.mock.On("Create", ctx, boardID, userID)} +// - body BoardSessionCreateRequest +func (_e *MockSessionService_Expecter) Create(ctx interface{}, body interface{}) *MockSessionService_Create_Call { + return &MockSessionService_Create_Call{Call: _e.mock.On("Create", ctx, body)} } -func (_c *MockSessionService_Create_Call) Run(run func(ctx context.Context, boardID uuid.UUID, userID uuid.UUID)) *MockSessionService_Create_Call { +func (_c *MockSessionService_Create_Call) Run(run func(ctx context.Context, body BoardSessionCreateRequest)) *MockSessionService_Create_Call { _c.Call.Run(func(args mock.Arguments) { var arg0 context.Context if args[0] != nil { arg0 = args[0].(context.Context) } - var arg1 uuid.UUID + var arg1 BoardSessionCreateRequest if args[1] != nil { - arg1 = args[1].(uuid.UUID) - } - var arg2 uuid.UUID - if args[2] != nil { - arg2 = args[2].(uuid.UUID) + arg1 = args[1].(BoardSessionCreateRequest) } run( arg0, arg1, - arg2, ) }) return _c @@ -222,7 +216,7 @@ func (_c *MockSessionService_Create_Call) Return(boardSession *BoardSession, err return _c } -func (_c *MockSessionService_Create_Call) RunAndReturn(run func(ctx context.Context, boardID uuid.UUID, userID uuid.UUID) (*BoardSession, error)) *MockSessionService_Create_Call { +func (_c *MockSessionService_Create_Call) RunAndReturn(run func(ctx context.Context, body BoardSessionCreateRequest) (*BoardSession, error)) *MockSessionService_Create_Call { _c.Call.Return(run) return _c } diff --git a/server/src/sessions/service_sessions.go b/server/src/sessions/service_sessions.go index 56acc0255b..bcda5e3c84 100644 --- a/server/src/sessions/service_sessions.go +++ b/server/src/sessions/service_sessions.go @@ -55,30 +55,31 @@ func NewSessionService(db SessionDatabase, rt *realtime.Broker, columnService co return service } -func (service *BoardSessionService) Create(ctx context.Context, boardID, userID uuid.UUID) (*BoardSession, error) { +func (service *BoardSessionService) Create(ctx context.Context, body BoardSessionCreateRequest) (*BoardSession, error) { log := logger.FromContext(ctx) ctx, span := tracer.Start(ctx, "scrumlr.sessions.service.create") defer span.End() span.SetAttributes( - attribute.String("scrumlr.sessions.service.create.board", boardID.String()), - attribute.String("scrumlr.sessions.service.create.user", userID.String()), + attribute.String("scrumlr.sessions.service.create.board", body.Board.String()), + attribute.String("scrumlr.sessions.service.create.user", body.User.String()), + attribute.String("scrumlr.sessions.service.create.role", string(body.Role)), ) session, err := service.database.Create(ctx, DatabaseBoardSessionInsert{ - Board: boardID, - User: userID, - Role: common.ParticipantRole, + Board: body.Board, + User: body.User, + Role: body.Role, }) if err != nil { span.SetStatus(codes.Error, "failed to create board session") span.RecordError(err) - log.Errorw("unable to create board session", "board", boardID, "user", userID, "error", err) + log.Errorw("unable to create board session", "board", body.Board, "user", body.User, "error", err) return nil, err } - service.createdSession(ctx, boardID, session) + service.createdSession(ctx, body.Board, session) sessionCreatedCounter.Add(ctx, 1) return new(BoardSession).From(session), err @@ -201,7 +202,7 @@ func (service *BoardSessionService) UpdateUserBoards(ctx context.Context, body B connectedBoards, err := service.database.GetUserConnectedBoards(ctx, body.User) if err != nil { - span.SetStatus(codes.Error, "failed to update all sessions") + span.SetStatus(codes.Error, "failed to get connected boards") span.RecordError(err) return nil, err } diff --git a/server/src/sessions/service_sessions_integration_test.go b/server/src/sessions/service_sessions_integration_test.go index 05de5f81b4..428b809bb6 100644 --- a/server/src/sessions/service_sessions_integration_test.go +++ b/server/src/sessions/service_sessions_integration_test.go @@ -57,6 +57,7 @@ func (suite *SessionServiceIntegrationTestSuite) Test_Create() { boardId := suite.boards["Write"].id userId := suite.users["Luke"].ID + role := common.ParticipantRole broker, err := realtime.NewNats(suite.natsConnectionString) if err != nil { @@ -74,19 +75,19 @@ func (suite *SessionServiceIntegrationTestSuite) Test_Create() { sessionDatabase := NewSessionDatabase(suite.db) sessionService := NewSessionService(sessionDatabase, broker, columnService, noteService) - session, err := sessionService.Create(ctx, boardId, userId) + session, err := sessionService.Create(ctx, BoardSessionCreateRequest{Board: boardId, User: userId, Role: role}) assert.Nil(t, err) assert.Equal(t, boardId, session.Board) assert.Equal(t, userId, session.User.ID) - assert.Equal(t, common.ParticipantRole, session.Role) + assert.Equal(t, role, session.Role) msg := <-events assert.Equal(t, realtime.BoardEventParticipantCreated, msg.Type) sessionData, err := technical_helper.Unmarshal[BoardSession](msg.Data) assert.Nil(t, err) assert.Equal(t, userId, sessionData.User.ID) - assert.Equal(t, common.ParticipantRole, sessionData.Role) + assert.Equal(t, role, sessionData.Role) } func (suite *SessionServiceIntegrationTestSuite) Test_Update() { diff --git a/server/src/sessions/service_sessions_test.go b/server/src/sessions/service_sessions_test.go index cb34301e2b..f6c5cd4359 100644 --- a/server/src/sessions/service_sessions_test.go +++ b/server/src/sessions/service_sessions_test.go @@ -123,6 +123,62 @@ func TestGetSessions(t *testing.T) { assert.Equal(t, boardId, boardSessions[1].Board) } +func TestGetUserConnectedBoards(t *testing.T) { + userId := uuid.New() + firstBoard := uuid.New() + secondBoard := uuid.New() + + mockSessiondb := NewMockSessionDatabase(t) + mockSessiondb.EXPECT().GetUserConnectedBoards(mock.Anything, userId). + Return([]DatabaseBoardSession{ + {User: userId, Board: firstBoard}, + {User: userId, Board: secondBoard}, + }, nil) + + mockBroker := realtime.NewMockClient(t) + broker := new(realtime.Broker) + broker.Con = mockBroker + + mockColumnService := columns.NewMockColumnService(t) + mockNoteService := notes.NewMockNotesService(t) + + sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) + + sessions, err := sessionService.GetUserConnectedBoards(context.Background(), userId) + + assert.Nil(t, err) + assert.Len(t, sessions, 2) + + assert.Equal(t, userId, sessions[0].User.ID) + assert.Equal(t, firstBoard, sessions[0].Board) + assert.Equal(t, userId, sessions[1].User.ID) + assert.Equal(t, secondBoard, sessions[1].Board) +} + +func TestGetUserConnectedBoards_DatabaseError(t *testing.T) { + userId := uuid.New() + dbError := "database error" + + mockSessiondb := NewMockSessionDatabase(t) + mockSessiondb.EXPECT().GetUserConnectedBoards(mock.Anything, userId). + Return([]DatabaseBoardSession{}, errors.New(dbError)) + + mockBroker := realtime.NewMockClient(t) + broker := new(realtime.Broker) + broker.Con = mockBroker + + mockColumnService := columns.NewMockColumnService(t) + mockNoteService := notes.NewMockNotesService(t) + + sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) + + sessions, err := sessionService.GetUserConnectedBoards(context.Background(), userId) + + assert.Nil(t, sessions) + assert.NotNil(t, err) + assert.Equal(t, errors.New(dbError), err) +} + func TestListSessions_WithFilterConnected(t *testing.T) { boardId := uuid.New() connected := true @@ -287,10 +343,11 @@ func TestListSessions_DatabaseError(t *testing.T) { func TestCreateSession(t *testing.T) { boardId := uuid.New() userId := uuid.New() + role := common.ParticipantRole mockSessiondb := NewMockSessionDatabase(t) - mockSessiondb.EXPECT().Create(mock.Anything, DatabaseBoardSessionInsert{Board: boardId, User: userId, Role: common.ParticipantRole}). - Return(DatabaseBoardSession{Board: boardId, User: userId, Role: common.ParticipantRole}, nil) + mockSessiondb.EXPECT().Create(mock.Anything, DatabaseBoardSessionInsert{Board: boardId, User: userId, Role: role}). + Return(DatabaseBoardSession{Board: boardId, User: userId, Role: role}, nil) mockBroker := realtime.NewMockClient(t) mockBroker.EXPECT().Publish(mock.Anything, mock.AnythingOfType("string"), mock.Anything).Return(nil) @@ -302,23 +359,24 @@ func TestCreateSession(t *testing.T) { sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) - session, err := sessionService.Create(context.Background(), boardId, userId) + session, err := sessionService.Create(context.Background(), BoardSessionCreateRequest{Board: boardId, User: userId, Role: role}) assert.Nil(t, err) assert.NotNil(t, session) assert.Equal(t, boardId, session.Board) assert.Equal(t, userId, session.User.ID) - assert.Equal(t, common.ParticipantRole, session.Role) + assert.Equal(t, role, session.Role) } func TestCreateSession_DatabaseError(t *testing.T) { boardId := uuid.New() userId := uuid.New() + role := common.ParticipantRole dbError := "unable to create" mockSessiondb := NewMockSessionDatabase(t) - mockSessiondb.EXPECT().Create(mock.Anything, DatabaseBoardSessionInsert{Board: boardId, User: userId, Role: common.ParticipantRole}). + mockSessiondb.EXPECT().Create(mock.Anything, DatabaseBoardSessionInsert{Board: boardId, User: userId, Role: role}). Return(DatabaseBoardSession{}, errors.New(dbError)) mockBroker := realtime.NewMockClient(t) @@ -330,7 +388,7 @@ func TestCreateSession_DatabaseError(t *testing.T) { sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) - session, err := sessionService.Create(context.Background(), boardId, userId) + session, err := sessionService.Create(context.Background(), BoardSessionCreateRequest{Board: boardId, User: userId, Role: role}) assert.Nil(t, session) assert.NotNil(t, err) @@ -731,6 +789,87 @@ func TestUpdateAllSessions_DatabaseError(t *testing.T) { assert.Equal(t, errors.New(dbError), err) } +func TestUpdateUserBoard(t *testing.T) { + userId := uuid.New() + firstBoard := uuid.New() + secondBoard := uuid.New() + firstColumnId := uuid.New() + secondColumnId := uuid.New() + thirdColumnId := uuid.New() + fourthColumnId := uuid.New() + + mockSessiondb := NewMockSessionDatabase(t) + mockSessiondb.EXPECT().GetUserConnectedBoards(mock.Anything, userId). + Return([]DatabaseBoardSession{ + {Board: firstBoard, User: userId}, + {Board: secondBoard, User: userId}, + }, nil) + mockSessiondb.EXPECT().Get(mock.Anything, firstBoard, userId). + Return(DatabaseBoardSession{Board: firstBoard, User: userId}, nil) + mockSessiondb.EXPECT().Get(mock.Anything, secondBoard, userId). + Return(DatabaseBoardSession{Board: secondBoard, User: userId}, nil) + + mockBroker := realtime.NewMockClient(t) + mockBroker.EXPECT().Publish(mock.Anything, mock.AnythingOfType("string"), mock.Anything).Return(nil) + broker := new(realtime.Broker) + broker.Con = mockBroker + + mockColumnService := columns.NewMockColumnService(t) + mockColumnService.EXPECT().GetAll(mock.Anything, firstBoard). + Return([]*columns.Column{ + {ID: firstColumnId, Name: "First Column"}, + {ID: secondColumnId, Name: "Second column"}, + }, nil) + mockColumnService.EXPECT().GetAll(mock.Anything, secondBoard). + Return([]*columns.Column{ + {ID: thirdColumnId, Name: "First Column"}, + {ID: fourthColumnId, Name: "Second column"}, + }, nil) + + mockNoteService := notes.NewMockNotesService(t) + mockNoteService.EXPECT().GetAll(mock.Anything, firstBoard, []uuid.UUID{firstColumnId, secondColumnId}). + Return([]*notes.Note{ + {ID: uuid.New(), Text: "This is a note"}, + {ID: uuid.New(), Text: "This is another note"}, + }, nil) + mockNoteService.EXPECT().GetAll(mock.Anything, secondBoard, []uuid.UUID{thirdColumnId, fourthColumnId}). + Return([]*notes.Note{ + {ID: uuid.New(), Text: "Also a note"}, + {ID: uuid.New(), Text: "You know it"}, + }, nil) + + sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) + + sessions, err := sessionService.UpdateUserBoards(context.Background(), BoardSessionUpdateRequest{User: userId}) + + assert.Nil(t, err) + assert.Len(t, sessions, 2) +} + +func TestUpdateUserBoard_DatabaseError(t *testing.T) { + userId := uuid.New() + dbError := "database error" + + mockSessiondb := NewMockSessionDatabase(t) + mockSessiondb.EXPECT().GetUserConnectedBoards(mock.Anything, userId). + Return([]DatabaseBoardSession{}, errors.New(dbError)) + + mockBroker := realtime.NewMockClient(t) + broker := new(realtime.Broker) + broker.Con = mockBroker + + mockColumnService := columns.NewMockColumnService(t) + mockNoteService := notes.NewMockNotesService(t) + + sessionService := NewSessionService(mockSessiondb, broker, mockColumnService, mockNoteService) + + sessions, err := sessionService.UpdateUserBoards(context.Background(), BoardSessionUpdateRequest{User: userId}) + + assert.Nil(t, sessions) + assert.NotNil(t, err) + assert.Equal(t, errors.New(dbError), err) +} + func TestConnectSession(t *testing.T) { boardId := uuid.New() userId := uuid.New() @@ -1102,3 +1241,54 @@ func TestFilterfromQueryString_Role(t *testing.T) { assert.Equal(t, BoardSessionFilter{Role: &role}, filter) } + +func TestCheckSessionRole(t *testing.T) { + userId := uuid.New() + sessions := []*BoardSession{ + {User: User{ID: uuid.New()}, Role: common.ParticipantRole}, + {User: User{ID: userId}, Role: common.ModeratorRole}, + {User: User{ID: uuid.New()}, Role: common.OwnerRole}, + } + roles := []common.SessionRole{ + common.ModeratorRole, + common.OwnerRole, + } + + check := CheckSessionRole(userId, sessions, roles) + + assert.True(t, check) +} + +func TestCheckSessionRole_NoRole(t *testing.T) { + userId := uuid.New() + sessions := []*BoardSession{ + {User: User{ID: uuid.New()}, Role: common.ParticipantRole}, + {User: User{ID: userId}, Role: common.ModeratorRole}, + {User: User{ID: uuid.New()}, Role: common.OwnerRole}, + } + roles := []common.SessionRole{ + common.ParticipantRole, + common.OwnerRole, + } + + check := CheckSessionRole(userId, sessions, roles) + + assert.False(t, check) +} + +func TestCheckSessionRole_NoUser(t *testing.T) { + userId := uuid.New() + sessions := []*BoardSession{ + {User: User{ID: uuid.New()}, Role: common.ParticipantRole}, + {User: User{ID: uuid.New()}, Role: common.ModeratorRole}, + {User: User{ID: uuid.New()}, Role: common.OwnerRole}, + } + roles := []common.SessionRole{ + common.ParticipantRole, + common.OwnerRole, + } + + check := CheckSessionRole(userId, sessions, roles) + + assert.False(t, check) +}