From 5a087d27080dc57b40b89e1fc82dedf620b14449 Mon Sep 17 00:00:00 2001 From: idafurjes <36131195+idafurjes@users.noreply.github.com> Date: Mon, 18 Oct 2021 14:02:39 +0200 Subject: [PATCH] Chore: Add context to team (#40504) * Add ctx to team * Remove convey from team --- pkg/api/team.go | 8 +- pkg/api/team_members.go | 6 +- pkg/middleware/auth.go | 2 +- pkg/services/sqlstore/team.go | 36 +-- pkg/services/sqlstore/team_test.go | 348 +++++++++++++++-------------- pkg/services/sqlstore/user.go | 2 +- 6 files changed, 213 insertions(+), 189 deletions(-) diff --git a/pkg/api/team.go b/pkg/api/team.go index f452c6f94bc..eeeeeeded31 100644 --- a/pkg/api/team.go +++ b/pkg/api/team.go @@ -55,7 +55,7 @@ func (hs *HTTPServer) UpdateTeam(c *models.ReqContext, cmd models.UpdateTeamComm return response.Error(403, "Not allowed to update team", err) } - if err := hs.Bus.Dispatch(&cmd); err != nil { + if err := hs.Bus.DispatchCtx(c.Req.Context(), &cmd); err != nil { if errors.Is(err, models.ErrTeamNameTaken) { return response.Error(400, "Team name taken", err) } @@ -75,7 +75,7 @@ func (hs *HTTPServer) DeleteTeamByID(c *models.ReqContext) response.Response { return response.Error(403, "Not allowed to delete team", err) } - if err := hs.Bus.Dispatch(&models.DeleteTeamCommand{OrgId: orgId, Id: teamId}); err != nil { + if err := hs.Bus.DispatchCtx(c.Req.Context(), &models.DeleteTeamCommand{OrgId: orgId, Id: teamId}); err != nil { if errors.Is(err, models.ErrTeamNotFound) { return response.Error(404, "Failed to delete Team. ID not found", nil) } @@ -111,7 +111,7 @@ func (hs *HTTPServer) SearchTeams(c *models.ReqContext) response.Response { HiddenUsers: hs.Cfg.HiddenUsers, } - if err := bus.Dispatch(&query); err != nil { + if err := bus.DispatchCtx(c.Req.Context(), &query); err != nil { return response.Error(500, "Failed to search Teams", err) } @@ -134,7 +134,7 @@ func (hs *HTTPServer) GetTeamByID(c *models.ReqContext) response.Response { HiddenUsers: hs.Cfg.HiddenUsers, } - if err := bus.Dispatch(&query); err != nil { + if err := bus.DispatchCtx(c.Req.Context(), &query); err != nil { if errors.Is(err, models.ErrTeamNotFound) { return response.Error(404, "Team not found", err) } diff --git a/pkg/api/team_members.go b/pkg/api/team_members.go index 5c84a73342e..01cd3e91e8c 100644 --- a/pkg/api/team_members.go +++ b/pkg/api/team_members.go @@ -16,7 +16,7 @@ import ( func (hs *HTTPServer) GetTeamMembers(c *models.ReqContext) response.Response { query := models.GetTeamMembersQuery{OrgId: c.OrgId, TeamId: c.ParamsInt64(":teamId")} - if err := bus.Dispatch(&query); err != nil { + if err := bus.DispatchCtx(c.Req.Context(), &query); err != nil { return response.Error(500, "Failed to get Team Members", err) } @@ -84,7 +84,7 @@ func (hs *HTTPServer) UpdateTeamMember(c *models.ReqContext, cmd models.UpdateTe cmd.UserId = c.ParamsInt64(":userId") cmd.OrgId = orgId - if err := hs.Bus.Dispatch(&cmd); err != nil { + if err := hs.Bus.DispatchCtx(c.Req.Context(), &cmd); err != nil { if errors.Is(err, models.ErrTeamMemberNotFound) { return response.Error(404, "Team member not found.", nil) } @@ -108,7 +108,7 @@ func (hs *HTTPServer) RemoveTeamMember(c *models.ReqContext) response.Response { protectLastAdmin = true } - if err := hs.Bus.Dispatch(&models.RemoveTeamMemberCommand{OrgId: orgId, TeamId: teamId, UserId: userId, ProtectLastAdmin: protectLastAdmin}); err != nil { + if err := hs.Bus.DispatchCtx(c.Req.Context(), &models.RemoveTeamMemberCommand{OrgId: orgId, TeamId: teamId, UserId: userId, ProtectLastAdmin: protectLastAdmin}); err != nil { if errors.Is(err, models.ErrTeamNotFound) { return response.Error(404, "Team not found", nil) } diff --git a/pkg/middleware/auth.go b/pkg/middleware/auth.go index 46a0945a579..08e60936e5f 100644 --- a/pkg/middleware/auth.go +++ b/pkg/middleware/auth.go @@ -204,7 +204,7 @@ func OrgAdminFolderAdminOrTeamAdmin(c *models.ReqContext) { } isAdminOfTeamsQuery := models.IsAdminOfTeamsQuery{SignedInUser: c.SignedInUser} - if err := sqlstore.IsAdminOfTeams(&isAdminOfTeamsQuery); err != nil { + if err := sqlstore.IsAdminOfTeams(c.Req.Context(), &isAdminOfTeamsQuery); err != nil { c.JsonApiErr(500, "Failed to check if user is a team admin", err) } diff --git a/pkg/services/sqlstore/team.go b/pkg/services/sqlstore/team.go index 50f6ec4f119..cc299cd1b16 100644 --- a/pkg/services/sqlstore/team.go +++ b/pkg/services/sqlstore/team.go @@ -12,16 +12,16 @@ import ( ) func init() { - bus.AddHandler("sql", UpdateTeam) - bus.AddHandler("sql", DeleteTeam) - bus.AddHandler("sql", SearchTeams) - bus.AddHandler("sql", GetTeamById) - bus.AddHandler("sql", GetTeamsByUser) + bus.AddHandlerCtx("sql", UpdateTeam) + bus.AddHandlerCtx("sql", DeleteTeam) + bus.AddHandlerCtx("sql", SearchTeams) + bus.AddHandlerCtx("sql", GetTeamById) + bus.AddHandlerCtx("sql", GetTeamsByUser) - bus.AddHandler("sql", UpdateTeamMember) - bus.AddHandler("sql", RemoveTeamMember) - bus.AddHandler("sql", GetTeamMembers) - bus.AddHandler("sql", IsAdminOfTeams) + bus.AddHandlerCtx("sql", UpdateTeamMember) + bus.AddHandlerCtx("sql", RemoveTeamMember) + bus.AddHandlerCtx("sql", GetTeamMembers) + bus.AddHandlerCtx("sql", IsAdminOfTeams) } func getFilteredUsers(signedInUser *models.SignedInUser, hiddenUsers map[string]struct{}) []string { @@ -95,7 +95,7 @@ func (ss *SQLStore) CreateTeam(name, email string, orgID int64) (models.Team, er return team, err } -func UpdateTeam(cmd *models.UpdateTeamCommand) error { +func UpdateTeam(ctx context.Context, cmd *models.UpdateTeamCommand) error { return inTransaction(func(sess *DBSession) error { if isNameTaken, err := isTeamNameTaken(cmd.OrgId, cmd.Name, cmd.Id, sess); err != nil { return err @@ -126,7 +126,7 @@ func UpdateTeam(cmd *models.UpdateTeamCommand) error { } // DeleteTeam will delete a team, its member and any permissions connected to the team -func DeleteTeam(cmd *models.DeleteTeamCommand) error { +func DeleteTeam(ctx context.Context, cmd *models.DeleteTeamCommand) error { return inTransaction(func(sess *DBSession) error { if _, err := teamExists(cmd.OrgId, cmd.Id, sess); err != nil { return err @@ -172,7 +172,7 @@ func isTeamNameTaken(orgId int64, name string, existingId int64, sess *DBSession return false, nil } -func SearchTeams(query *models.SearchTeamsQuery) error { +func SearchTeams(ctx context.Context, query *models.SearchTeamsQuery) error { query.Result = models.SearchTeamQueryResult{ Teams: make([]*models.TeamDTO, 0), } @@ -235,7 +235,7 @@ func SearchTeams(query *models.SearchTeamsQuery) error { return err } -func GetTeamById(query *models.GetTeamByIdQuery) error { +func GetTeamById(ctx context.Context, query *models.GetTeamByIdQuery) error { var sql bytes.Buffer params := make([]interface{}, 0) @@ -264,7 +264,7 @@ func GetTeamById(query *models.GetTeamByIdQuery) error { } // GetTeamsByUser is used by the Guardian when checking a users' permissions -func GetTeamsByUser(query *models.GetTeamsByUserQuery) error { +func GetTeamsByUser(ctx context.Context, query *models.GetTeamsByUserQuery) error { query.Result = make([]*models.TeamDTO, 0) var sql bytes.Buffer @@ -322,7 +322,7 @@ func getTeamMember(sess *DBSession, orgId int64, teamId int64, userId int64) (mo } // UpdateTeamMember updates a team member -func UpdateTeamMember(cmd *models.UpdateTeamMemberCommand) error { +func UpdateTeamMember(ctx context.Context, cmd *models.UpdateTeamMemberCommand) error { return inTransaction(func(sess *DBSession) error { member, err := getTeamMember(sess, cmd.OrgId, cmd.TeamId, cmd.UserId) if err != nil { @@ -348,7 +348,7 @@ func UpdateTeamMember(cmd *models.UpdateTeamMemberCommand) error { } // RemoveTeamMember removes a member from a team -func RemoveTeamMember(cmd *models.RemoveTeamMemberCommand) error { +func RemoveTeamMember(ctx context.Context, cmd *models.RemoveTeamMemberCommand) error { return inTransaction(func(sess *DBSession) error { if _, err := teamExists(cmd.OrgId, cmd.TeamId, sess); err != nil { return err @@ -399,7 +399,7 @@ func isLastAdmin(sess *DBSession, orgId int64, teamId int64, userId int64) (bool } // GetTeamMembers return a list of members for the specified team -func GetTeamMembers(query *models.GetTeamMembersQuery) error { +func GetTeamMembers(ctx context.Context, query *models.GetTeamMembersQuery) error { query.Result = make([]*models.TeamMemberDTO, 0) sess := x.Table("team_member") sess.Join("INNER", x.Dialect().Quote("user"), fmt.Sprintf("team_member.user_id=%s.id", x.Dialect().Quote("user"))) @@ -441,7 +441,7 @@ func GetTeamMembers(query *models.GetTeamMembersQuery) error { return err } -func IsAdminOfTeams(query *models.IsAdminOfTeamsQuery) error { +func IsAdminOfTeams(ctx context.Context, query *models.IsAdminOfTeamsQuery) error { builder := &SQLBuilder{} builder.Write("SELECT COUNT(team.id) AS count FROM team INNER JOIN team_member ON team_member.team_id = team.id WHERE team.org_id = ? AND team_member.user_id = ? AND team_member.permission = ?", query.SignedInUser.OrgId, query.SignedInUser.UserId, models.PERMISSION_ADMIN) diff --git a/pkg/services/sqlstore/team_test.go b/pkg/services/sqlstore/team_test.go index 7ac44d142b6..170e0e43248 100644 --- a/pkg/services/sqlstore/team_test.go +++ b/pkg/services/sqlstore/team_test.go @@ -8,314 +8,338 @@ import ( "fmt" "testing" - . "github.com/smartystreets/goconvey/convey" - "github.com/grafana/grafana/pkg/models" + "github.com/stretchr/testify/require" ) func TestTeamCommandsAndQueries(t *testing.T) { - Convey("Testing Team commands & queries", t, func() { + t.Run("Testing Team commands & queries", func(t *testing.T) { sqlStore := InitTestDB(t) - Convey("Given saved users and two teams", func() { + t.Run("Given saved users and two teams", func(t *testing.T) { var userIds []int64 - for i := 0; i < 5; i++ { - userCmd := models.CreateUserCommand{ - Email: fmt.Sprint("user", i, "@test.com"), - Name: fmt.Sprint("user", i), - Login: fmt.Sprint("loginuser", i), - } - user, err := sqlStore.CreateUser(context.Background(), userCmd) - So(err, ShouldBeNil) - userIds = append(userIds, user.Id) - } - const testOrgID int64 = 1 - team1, err := sqlStore.CreateTeam("group1 name", "test1@test.com", testOrgID) - So(err, ShouldBeNil) - team2, err := sqlStore.CreateTeam("group2 name", "test2@test.com", testOrgID) - So(err, ShouldBeNil) + var team1, team2 models.Team + var user *models.User + var userCmd models.CreateUserCommand + var err error - Convey("Should be able to create teams and add users", func() { + setup := func() { + for i := 0; i < 5; i++ { + userCmd = models.CreateUserCommand{ + Email: fmt.Sprint("user", i, "@test.com"), + Name: fmt.Sprint("user", i), + Login: fmt.Sprint("loginuser", i), + } + user, err = sqlStore.CreateUser(context.Background(), userCmd) + require.NoError(t, err) + userIds = append(userIds, user.Id) + } + team1, err = sqlStore.CreateTeam("group1 name", "test1@test.com", testOrgID) + require.NoError(t, err) + team2, err = sqlStore.CreateTeam("group2 name", "test2@test.com", testOrgID) + require.NoError(t, err) + } + setup() + + t.Run("Should be able to create teams and add users", func(t *testing.T) { query := &models.SearchTeamsQuery{OrgId: testOrgID, Name: "group1 name", Page: 1, Limit: 10} - err = SearchTeams(query) - So(err, ShouldBeNil) - So(query.Page, ShouldEqual, 1) + err = SearchTeams(context.Background(), query) + require.NoError(t, err) + require.Equal(t, query.Page, 1) team1 := query.Result.Teams[0] - So(team1.Name, ShouldEqual, "group1 name") - So(team1.Email, ShouldEqual, "test1@test.com") - So(team1.OrgId, ShouldEqual, testOrgID) - So(team1.MemberCount, ShouldEqual, 0) + require.Equal(t, team1.Name, "group1 name") + require.Equal(t, team1.Email, "test1@test.com") + require.Equal(t, team1.OrgId, testOrgID) + require.EqualValues(t, team1.MemberCount, 0) err = sqlStore.AddTeamMember(userIds[0], testOrgID, team1.Id, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = sqlStore.AddTeamMember(userIds[1], testOrgID, team1.Id, true, 0) - So(err, ShouldBeNil) + require.NoError(t, err) q1 := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team1.Id} - err = GetTeamMembers(q1) - So(err, ShouldBeNil) - So(q1.Result, ShouldHaveLength, 2) - So(q1.Result[0].TeamId, ShouldEqual, team1.Id) - So(q1.Result[0].Login, ShouldEqual, "loginuser0") - So(q1.Result[0].OrgId, ShouldEqual, testOrgID) - So(q1.Result[1].TeamId, ShouldEqual, team1.Id) - So(q1.Result[1].Login, ShouldEqual, "loginuser1") - So(q1.Result[1].OrgId, ShouldEqual, testOrgID) - So(q1.Result[1].External, ShouldEqual, true) + err = GetTeamMembers(context.Background(), q1) + require.NoError(t, err) + require.Equal(t, len(q1.Result), 2) + require.Equal(t, q1.Result[0].TeamId, team1.Id) + require.Equal(t, q1.Result[0].Login, "loginuser0") + require.Equal(t, q1.Result[0].OrgId, testOrgID) + require.Equal(t, q1.Result[1].TeamId, team1.Id) + require.Equal(t, q1.Result[1].Login, "loginuser1") + require.Equal(t, q1.Result[1].OrgId, testOrgID) + require.Equal(t, q1.Result[1].External, true) q2 := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team1.Id, External: true} - err = GetTeamMembers(q2) - So(err, ShouldBeNil) - So(q2.Result, ShouldHaveLength, 1) - So(q2.Result[0].TeamId, ShouldEqual, team1.Id) - So(q2.Result[0].Login, ShouldEqual, "loginuser1") - So(q2.Result[0].OrgId, ShouldEqual, testOrgID) - So(q2.Result[0].External, ShouldEqual, true) + err = GetTeamMembers(context.Background(), q2) + require.NoError(t, err) + require.Equal(t, len(q2.Result), 1) + require.Equal(t, q2.Result[0].TeamId, team1.Id) + require.Equal(t, q2.Result[0].Login, "loginuser1") + require.Equal(t, q2.Result[0].OrgId, testOrgID) + require.Equal(t, q2.Result[0].External, true) - err = SearchTeams(query) - So(err, ShouldBeNil) + err = SearchTeams(context.Background(), query) + require.NoError(t, err) team1 = query.Result.Teams[0] - So(team1.MemberCount, ShouldEqual, 2) + require.EqualValues(t, team1.MemberCount, 2) getTeamQuery := &models.GetTeamByIdQuery{OrgId: testOrgID, Id: team1.Id} - err = GetTeamById(getTeamQuery) - So(err, ShouldBeNil) + err = GetTeamById(context.Background(), getTeamQuery) + require.NoError(t, err) team1 = getTeamQuery.Result - So(team1.Name, ShouldEqual, "group1 name") - So(team1.Email, ShouldEqual, "test1@test.com") - So(team1.OrgId, ShouldEqual, testOrgID) - So(team1.MemberCount, ShouldEqual, 2) + require.Equal(t, team1.Name, "group1 name") + require.Equal(t, team1.Email, "test1@test.com") + require.Equal(t, team1.OrgId, testOrgID) + require.EqualValues(t, team1.MemberCount, 2) }) - Convey("Should return latest auth module for users when getting team members", func() { + t.Run("Should return latest auth module for users when getting team members", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() userId := userIds[1] teamQuery := &models.SearchTeamsQuery{OrgId: testOrgID, Name: "group1 name", Page: 1, Limit: 10} - err = SearchTeams(teamQuery) - So(err, ShouldBeNil) - So(teamQuery.Page, ShouldEqual, 1) + err = SearchTeams(context.Background(), teamQuery) + require.NoError(t, err) + require.Equal(t, teamQuery.Page, 1) team1 := teamQuery.Result.Teams[0] err = sqlStore.AddTeamMember(userId, testOrgID, team1.Id, true, 0) - So(err, ShouldBeNil) + require.NoError(t, err) memberQuery := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team1.Id, External: true} - err = GetTeamMembers(memberQuery) - So(err, ShouldBeNil) - So(memberQuery.Result, ShouldHaveLength, 1) - So(memberQuery.Result[0].TeamId, ShouldEqual, team1.Id) - So(memberQuery.Result[0].Login, ShouldEqual, "loginuser1") - So(memberQuery.Result[0].OrgId, ShouldEqual, testOrgID) - So(memberQuery.Result[0].External, ShouldEqual, true) + err = GetTeamMembers(context.Background(), memberQuery) + require.NoError(t, err) + require.Equal(t, len(memberQuery.Result), 1) + require.Equal(t, memberQuery.Result[0].TeamId, team1.Id) + require.Equal(t, memberQuery.Result[0].Login, "loginuser1") + require.Equal(t, memberQuery.Result[0].OrgId, testOrgID) + require.Equal(t, memberQuery.Result[0].External, true) }) - Convey("Should be able to update users in a team", func() { + t.Run("Should be able to update users in a team", func(t *testing.T) { userId := userIds[0] team := team1 err = sqlStore.AddTeamMember(userId, testOrgID, team.Id, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) qBeforeUpdate := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team.Id} - err = GetTeamMembers(qBeforeUpdate) - So(err, ShouldBeNil) - So(qBeforeUpdate.Result[0].Permission, ShouldEqual, 0) + err = GetTeamMembers(context.Background(), qBeforeUpdate) + require.NoError(t, err) + require.EqualValues(t, qBeforeUpdate.Result[0].Permission, 0) - err = UpdateTeamMember(&models.UpdateTeamMemberCommand{ + err = UpdateTeamMember(context.Background(), &models.UpdateTeamMemberCommand{ UserId: userId, OrgId: testOrgID, TeamId: team.Id, Permission: models.PERMISSION_ADMIN, }) - So(err, ShouldBeNil) + require.NoError(t, err) qAfterUpdate := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team.Id} - err = GetTeamMembers(qAfterUpdate) - So(err, ShouldBeNil) - So(qAfterUpdate.Result[0].Permission, ShouldEqual, models.PERMISSION_ADMIN) + err = GetTeamMembers(context.Background(), qAfterUpdate) + require.NoError(t, err) + require.Equal(t, qAfterUpdate.Result[0].Permission, models.PERMISSION_ADMIN) }) - Convey("Should default to member permission level when updating a user with invalid permission level", func() { + t.Run("Should default to member permission level when updating a user with invalid permission level", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() userID := userIds[0] team := team1 err = sqlStore.AddTeamMember(userID, testOrgID, team.Id, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) qBeforeUpdate := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team.Id} - err = GetTeamMembers(qBeforeUpdate) - So(err, ShouldBeNil) - So(qBeforeUpdate.Result[0].Permission, ShouldEqual, 0) + err = GetTeamMembers(context.Background(), qBeforeUpdate) + require.NoError(t, err) + require.EqualValues(t, qBeforeUpdate.Result[0].Permission, 0) invalidPermissionLevel := models.PERMISSION_EDIT - err = UpdateTeamMember(&models.UpdateTeamMemberCommand{ + err = UpdateTeamMember(context.Background(), &models.UpdateTeamMemberCommand{ UserId: userID, OrgId: testOrgID, TeamId: team.Id, Permission: invalidPermissionLevel, }) - So(err, ShouldBeNil) + require.NoError(t, err) qAfterUpdate := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team.Id} - err = GetTeamMembers(qAfterUpdate) - So(err, ShouldBeNil) - So(qAfterUpdate.Result[0].Permission, ShouldEqual, 0) + err = GetTeamMembers(context.Background(), qAfterUpdate) + require.NoError(t, err) + require.EqualValues(t, qAfterUpdate.Result[0].Permission, 0) }) - Convey("Shouldn't be able to update a user not in the team.", func() { - err = UpdateTeamMember(&models.UpdateTeamMemberCommand{ + t.Run("Shouldn't be able to update a user not in the team.", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() + err = UpdateTeamMember(context.Background(), &models.UpdateTeamMemberCommand{ UserId: 1, OrgId: testOrgID, TeamId: team1.Id, Permission: models.PERMISSION_ADMIN, }) - So(err, ShouldEqual, models.ErrTeamMemberNotFound) + require.Error(t, err, models.ErrTeamMemberNotFound) }) - Convey("Should be able to search for teams", func() { + t.Run("Should be able to search for teams", func(t *testing.T) { query := &models.SearchTeamsQuery{OrgId: testOrgID, Query: "group", Page: 1} - err = SearchTeams(query) - So(err, ShouldBeNil) - So(len(query.Result.Teams), ShouldEqual, 2) - So(query.Result.TotalCount, ShouldEqual, 2) + err = SearchTeams(context.Background(), query) + require.NoError(t, err) + require.Equal(t, len(query.Result.Teams), 2) + require.EqualValues(t, query.Result.TotalCount, 2) query2 := &models.SearchTeamsQuery{OrgId: testOrgID, Query: ""} - err = SearchTeams(query2) - So(err, ShouldBeNil) - So(len(query2.Result.Teams), ShouldEqual, 2) + err = SearchTeams(context.Background(), query2) + require.NoError(t, err) + require.Equal(t, len(query2.Result.Teams), 2) }) - Convey("Should be able to return all teams a user is member of", func() { + t.Run("Should be able to return all teams a user is member of", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() groupId := team2.Id err := sqlStore.AddTeamMember(userIds[0], testOrgID, groupId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) query := &models.GetTeamsByUserQuery{OrgId: testOrgID, UserId: userIds[0]} - err = GetTeamsByUser(query) - So(err, ShouldBeNil) - So(len(query.Result), ShouldEqual, 1) - So(query.Result[0].Name, ShouldEqual, "group2 name") - So(query.Result[0].Email, ShouldEqual, "test2@test.com") + err = GetTeamsByUser(context.Background(), query) + require.NoError(t, err) + require.Equal(t, len(query.Result), 1) + require.Equal(t, query.Result[0].Name, "group2 name") + require.Equal(t, query.Result[0].Email, "test2@test.com") }) - Convey("Should be able to remove users from a group", func() { + t.Run("Should be able to remove users from a group", func(t *testing.T) { err = sqlStore.AddTeamMember(userIds[0], testOrgID, team1.Id, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) - err = RemoveTeamMember(&models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0]}) - So(err, ShouldBeNil) + err = RemoveTeamMember(context.Background(), &models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0]}) + require.NoError(t, err) q2 := &models.GetTeamMembersQuery{OrgId: testOrgID, TeamId: team1.Id} - err = GetTeamMembers(q2) - So(err, ShouldBeNil) - So(len(q2.Result), ShouldEqual, 0) + err = GetTeamMembers(context.Background(), q2) + require.NoError(t, err) + require.Equal(t, len(q2.Result), 0) }) - Convey("When ProtectLastAdmin is set to true", func() { + t.Run("When ProtectLastAdmin is set to true", func(t *testing.T) { err = sqlStore.AddTeamMember(userIds[0], testOrgID, team1.Id, false, models.PERMISSION_ADMIN) - So(err, ShouldBeNil) + require.NoError(t, err) - Convey("A user should not be able to remove the last admin", func() { - err = RemoveTeamMember(&models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], ProtectLastAdmin: true}) - So(err, ShouldEqual, models.ErrLastTeamAdmin) + t.Run("A user should not be able to remove the last admin", func(t *testing.T) { + err = RemoveTeamMember(context.Background(), &models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], ProtectLastAdmin: true}) + require.Equal(t, err, models.ErrLastTeamAdmin) }) - Convey("A user should be able to remove an admin if there are other admins", func() { + t.Run("A user should be able to remove an admin if there are other admins", func(t *testing.T) { err = sqlStore.AddTeamMember(userIds[1], testOrgID, team1.Id, false, models.PERMISSION_ADMIN) - So(err, ShouldBeNil) - err = RemoveTeamMember(&models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], ProtectLastAdmin: true}) - So(err, ShouldBeNil) + require.NoError(t, err) + err = RemoveTeamMember(context.Background(), &models.RemoveTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], ProtectLastAdmin: true}) + require.NoError(t, err) }) - Convey("A user should not be able to remove the admin permission for the last admin", func() { - err = UpdateTeamMember(&models.UpdateTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], Permission: 0, ProtectLastAdmin: true}) - So(err, ShouldBeError, models.ErrLastTeamAdmin) + t.Run("A user should not be able to remove the admin permission for the last admin", func(t *testing.T) { + err = UpdateTeamMember(context.Background(), &models.UpdateTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], Permission: 0, ProtectLastAdmin: true}) + require.Error(t, err, models.ErrLastTeamAdmin) }) - Convey("A user should be able to remove the admin permission if there are other admins", func() { + t.Run("A user should be able to remove the admin permission if there are other admins", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() + + err = sqlStore.AddTeamMember(userIds[0], testOrgID, team1.Id, false, models.PERMISSION_ADMIN) + require.NoError(t, err) + err = sqlStore.AddTeamMember(userIds[1], testOrgID, team1.Id, false, models.PERMISSION_ADMIN) - So(err, ShouldBeNil) - err = UpdateTeamMember(&models.UpdateTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], Permission: 0, ProtectLastAdmin: true}) - So(err, ShouldBeNil) + require.NoError(t, err) + err = UpdateTeamMember(context.Background(), &models.UpdateTeamMemberCommand{OrgId: testOrgID, TeamId: team1.Id, UserId: userIds[0], Permission: 0, ProtectLastAdmin: true}) + require.NoError(t, err) }) }) - Convey("Should be able to remove a group with users and permissions", func() { + t.Run("Should be able to remove a group with users and permissions", func(t *testing.T) { groupId := team2.Id err := sqlStore.AddTeamMember(userIds[1], testOrgID, groupId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = sqlStore.AddTeamMember(userIds[2], testOrgID, groupId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = testHelperUpdateDashboardAcl(t, sqlStore, 1, models.DashboardAcl{ DashboardID: 1, OrgID: testOrgID, Permission: models.PERMISSION_EDIT, TeamID: groupId, }) - So(err, ShouldBeNil) - err = DeleteTeam(&models.DeleteTeamCommand{OrgId: testOrgID, Id: groupId}) - So(err, ShouldBeNil) + require.NoError(t, err) + err = DeleteTeam(context.Background(), &models.DeleteTeamCommand{OrgId: testOrgID, Id: groupId}) + require.NoError(t, err) query := &models.GetTeamByIdQuery{OrgId: testOrgID, Id: groupId} - err = GetTeamById(query) - So(err, ShouldEqual, models.ErrTeamNotFound) + err = GetTeamById(context.Background(), query) + require.Equal(t, err, models.ErrTeamNotFound) permQuery := &models.GetDashboardAclInfoListQuery{DashboardID: 1, OrgID: testOrgID} err = sqlStore.GetDashboardAclInfoList(context.Background(), permQuery) - So(err, ShouldBeNil) + require.NoError(t, err) - So(len(permQuery.Result), ShouldEqual, 0) + require.Equal(t, len(permQuery.Result), 0) }) - Convey("Should be able to return if user is admin of teams or not", func() { + t.Run("Should be able to return if user is admin of teams or not", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() groupId := team2.Id err := sqlStore.AddTeamMember(userIds[0], testOrgID, groupId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = sqlStore.AddTeamMember(userIds[1], testOrgID, groupId, false, models.PERMISSION_ADMIN) - So(err, ShouldBeNil) + require.NoError(t, err) query := &models.IsAdminOfTeamsQuery{SignedInUser: &models.SignedInUser{OrgId: testOrgID, UserId: userIds[0]}} - err = IsAdminOfTeams(query) - So(err, ShouldBeNil) - So(query.Result, ShouldBeFalse) + err = IsAdminOfTeams(context.Background(), query) + require.NoError(t, err) + require.False(t, query.Result) query = &models.IsAdminOfTeamsQuery{SignedInUser: &models.SignedInUser{OrgId: testOrgID, UserId: userIds[1]}} - err = IsAdminOfTeams(query) - So(err, ShouldBeNil) - So(query.Result, ShouldBeTrue) + err = IsAdminOfTeams(context.Background(), query) + require.NoError(t, err) + require.True(t, query.Result) }) - Convey("Should not return hidden users in team member count", func() { + t.Run("Should not return hidden users in team member count", func(t *testing.T) { + sqlStore = InitTestDB(t) + setup() signedInUser := &models.SignedInUser{Login: "loginuser0"} hiddenUsers := map[string]struct{}{"loginuser0": {}, "loginuser1": {}} teamId := team1.Id err = sqlStore.AddTeamMember(userIds[0], testOrgID, teamId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = sqlStore.AddTeamMember(userIds[1], testOrgID, teamId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) err = sqlStore.AddTeamMember(userIds[2], testOrgID, teamId, false, 0) - So(err, ShouldBeNil) + require.NoError(t, err) searchQuery := &models.SearchTeamsQuery{OrgId: testOrgID, Page: 1, Limit: 10, SignedInUser: signedInUser, HiddenUsers: hiddenUsers} - err = SearchTeams(searchQuery) - So(err, ShouldBeNil) - So(searchQuery.Result.Teams, ShouldHaveLength, 2) + err = SearchTeams(context.Background(), searchQuery) + require.NoError(t, err) + require.Equal(t, len(searchQuery.Result.Teams), 2) team1 := searchQuery.Result.Teams[0] - So(team1.MemberCount, ShouldEqual, 2) + require.EqualValues(t, team1.MemberCount, 2) searchQueryFilteredByUser := &models.SearchTeamsQuery{OrgId: testOrgID, Page: 1, Limit: 10, UserIdFilter: userIds[0], SignedInUser: signedInUser, HiddenUsers: hiddenUsers} - err = SearchTeams(searchQueryFilteredByUser) - So(err, ShouldBeNil) - So(searchQueryFilteredByUser.Result.Teams, ShouldHaveLength, 1) + err = SearchTeams(context.Background(), searchQueryFilteredByUser) + require.NoError(t, err) + require.Equal(t, len(searchQueryFilteredByUser.Result.Teams), 1) team1 = searchQuery.Result.Teams[0] - So(team1.MemberCount, ShouldEqual, 2) + require.EqualValues(t, team1.MemberCount, 2) getTeamQuery := &models.GetTeamByIdQuery{OrgId: testOrgID, Id: teamId, SignedInUser: signedInUser, HiddenUsers: hiddenUsers} - err = GetTeamById(getTeamQuery) - So(err, ShouldBeNil) - So(getTeamQuery.Result.MemberCount, ShouldEqual, 2) + err = GetTeamById(context.Background(), getTeamQuery) + require.NoError(t, err) + require.EqualValues(t, getTeamQuery.Result.MemberCount, 2) }) }) }) diff --git a/pkg/services/sqlstore/user.go b/pkg/services/sqlstore/user.go index 07fa9fe3f0e..5e79299262b 100644 --- a/pkg/services/sqlstore/user.go +++ b/pkg/services/sqlstore/user.go @@ -562,7 +562,7 @@ func GetSignedInUser(ctx context.Context, query *models.GetSignedInUserQuery) er } getTeamsByUserQuery := &models.GetTeamsByUserQuery{OrgId: user.OrgId, UserId: user.UserId} - err = GetTeamsByUser(getTeamsByUserQuery) + err = GetTeamsByUser(ctx, getTeamsByUserQuery) if err != nil { return err }