Skip to content

Commit

Permalink
Merge pull request #2570 from traPtitech/test/processingMultipleGroup…
Browse files Browse the repository at this point in the history
…Members

グループの一括追加・削除のテストを追加
  • Loading branch information
Pugma authored Jan 27, 2025
2 parents 39e466d + 1227b77 commit 51940c0
Showing 2 changed files with 160 additions and 12 deletions.
27 changes: 15 additions & 12 deletions repository/gorm/user_group.go
Original file line number Diff line number Diff line change
@@ -318,24 +318,27 @@ func (repo *Repository) RemoveUsersFromGroup(groupID uuid.UUID) error {
if groupID == uuid.Nil {
return repository.ErrNilID
}

var removedUsers []model.UserGroupMember

err := repo.db.Transaction(func(tx *gorm.DB) error {
var removedUsers []model.UserGroupMember
if err := tx.Where("group_id = ?", groupID).Find(&model.UserGroupMember{}).Error; err != nil {
if err := tx.Where("group_id = ?", groupID).Find(&removedUsers).Delete(&model.UserGroupMember{}).Error; err != nil {
return err
}
for _, userID := range removedUsers {
repo.hub.Publish(hub.Message{
Name: event.UserGroupMemberRemoved,
Fields: hub.Fields{
"group_id": groupID,
"user_id": userID,
},
})
}
return nil
})
if err != nil {
return nil
return err
}

for _, userID := range removedUsers {
repo.hub.Publish(hub.Message{
Name: event.UserGroupMemberRemoved,
Fields: hub.Fields{
"group_id": groupID,
"user_id": userID,
},
})
}
return nil
}
145 changes: 145 additions & 0 deletions router/v3/user_groups_test.go
Original file line number Diff line number Diff line change
@@ -560,6 +560,81 @@ func TestHandlers_AddUserGroupMember(t *testing.T) {
})
}

func TestHandlers_AddUsersGroupMember(t *testing.T) {
t.Parallel()

path := "/api/v3/groups/{groupId}/members"
env := Setup(t, common1)
user := env.CreateUser(t, rand)
user2 := env.CreateUser(t, rand)

ug := env.CreateUserGroup(t, rand, "", "", user.GetID())
ug2 := env.CreateUserGroup(t, rand, "", "", user2.GetID())

s := env.S(t, user.GetID())

t.Run("not logged in", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.POST(path, ug.ID).
WithJSON(&[]PostUserGroupMemberRequest{{ID: user.GetID()}}).
Expect().
Status(http.StatusUnauthorized)
})

t.Run("bad request", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.POST(path, ug.ID).
WithCookie(session.CookieName, s).
WithJSON(&[]PostUserGroupMemberRequest{{ID: uuid.Must(uuid.NewV4())}}).
Expect().
Status(http.StatusBadRequest)
})

t.Run("forbidden", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.POST(path, ug2.ID).
WithCookie(session.CookieName, s).
WithJSON(&[]PostUserGroupMemberRequest{{ID: user.GetID()}}).
Expect().
Status(http.StatusForbidden)
})

t.Run("not found", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.POST(path, uuid.Must(uuid.NewV4())).
WithCookie(session.CookieName, s).
WithJSON(&[]PostUserGroupMemberRequest{{ID: user.GetID()}}).
Expect().
Status(http.StatusNotFound)
})

t.Run("success", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.POST(path, ug.ID).
WithCookie(session.CookieName, s).
WithJSON(&[]PostUserGroupMemberRequest{{ID: user.GetID()}, {ID: user2.GetID()}}).
Expect().
Status(http.StatusNoContent)

ug, err := env.Repository.GetUserGroup(ug.ID)
require.NoError(t, err)
if assert.Len(t, ug.Members, 2) {
m := ug.Members[0]
assert.EqualValues(t, m.UserID, user.GetID())
assert.EqualValues(t, m.Role, "")

m = ug.Members[1]
assert.EqualValues(t, m.UserID, user2.GetID())
assert.EqualValues(t, m.Role, "")
}
})
}

func TestPatchUserGroupMemberRequest_Validate(t *testing.T) {
t.Parallel()

@@ -752,6 +827,76 @@ func TestHandlers_RemoveUserGroupMember(t *testing.T) {
})
}

func TestHandlers_RemoveUserGroupMembers(t *testing.T) {
t.Parallel()

path := "/api/v3/groups/{groupId}/members"
env := Setup(t, common1)
user := env.CreateUser(t, rand)
user2 := env.CreateUser(t, rand)

ug := env.CreateUserGroup(t, rand, "", "", user.GetID())
ug2 := env.CreateUserGroup(t, rand, "", "", user2.GetID())
env.AddUserToUserGroup(t, user.GetID(), ug.ID, "")
env.AddUserToUserGroup(t, user.GetID(), ug2.ID, "")

s := env.S(t, user.GetID())

t.Run("not logged in", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.DELETE(path, ug.ID).
Expect().
Status(http.StatusUnauthorized)
})

t.Run("forbidden", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.DELETE(path, ug2.ID).
WithCookie(session.CookieName, s).
Expect().
Status(http.StatusForbidden)
})

t.Run("user group not found", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.DELETE(path, uuid.Must(uuid.NewV4())).
WithCookie(session.CookieName, s).
Expect().
Status(http.StatusNotFound)
})

t.Run("already removed", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.DELETE(path, ug.ID).
WithCookie(session.CookieName, s).
Expect().
Status(http.StatusNoContent)
})

t.Run("success", func(t *testing.T) {
t.Parallel()
e := env.R(t)
e.DELETE(path, ug.ID).
WithCookie(session.CookieName, s).
Expect().
Status(http.StatusNoContent)

ug, err := env.Repository.GetUserGroup(ug.ID)
require.NoError(t, err)
assert.Len(t, ug.Members, 0)

// already removed
e.DELETE(path, ug.ID).
WithCookie(session.CookieName, s).
Expect().
Status(http.StatusNoContent)
})
}

func TestHandlers_GetUserGroupAdmins(t *testing.T) {
t.Parallel()

0 comments on commit 51940c0

Please sign in to comment.