feat: add creator member management
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
|
||||
"quyun/v2/app/errorx"
|
||||
tenant_dto "quyun/v2/app/http/v1/dto"
|
||||
"quyun/v2/app/requests"
|
||||
"quyun/v2/database"
|
||||
"quyun/v2/database/models"
|
||||
"quyun/v2/pkg/consts"
|
||||
@@ -302,3 +303,142 @@ func (s *TenantTestSuite) Test_AcceptInvite() {
|
||||
So(invite.UsedCount, ShouldEqual, 1)
|
||||
})
|
||||
}
|
||||
|
||||
func (s *TenantTestSuite) Test_ListMembersAndRemove() {
|
||||
Convey("ListMembers and RemoveMember", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
|
||||
database.Truncate(ctx, s.DB,
|
||||
models.TableNameTenantUser,
|
||||
models.TableNameTenant,
|
||||
models.TableNameUser,
|
||||
)
|
||||
|
||||
owner := &models.User{Username: "owner_member", Phone: "13900002001"}
|
||||
member := &models.User{Username: "member_user", Phone: "13900002002"}
|
||||
_ = models.UserQuery.WithContext(ctx).Create(owner)
|
||||
_ = models.UserQuery.WithContext(ctx).Create(member)
|
||||
|
||||
tenant := &models.Tenant{
|
||||
Name: "Tenant Member",
|
||||
UserID: owner.ID,
|
||||
Status: consts.TenantStatusVerified,
|
||||
}
|
||||
_ = models.TenantQuery.WithContext(ctx).Create(tenant)
|
||||
|
||||
link := &models.TenantUser{
|
||||
TenantID: tenant.ID,
|
||||
UserID: member.ID,
|
||||
Role: types.Array[consts.TenantUserRole]{consts.TenantUserRoleMember},
|
||||
Status: consts.UserStatusVerified,
|
||||
}
|
||||
_ = models.TenantUserQuery.WithContext(ctx).Create(link)
|
||||
|
||||
res, err := Tenant.ListMembers(ctx, tenant.ID, owner.ID, &tenant_dto.TenantMemberListFilter{
|
||||
Pagination: requests.Pagination{Page: 1, Limit: 10},
|
||||
})
|
||||
So(err, ShouldBeNil)
|
||||
So(res.Total, ShouldEqual, 1)
|
||||
|
||||
items := res.Items.([]tenant_dto.TenantMemberItem)
|
||||
So(items[0].User.ID, ShouldEqual, member.ID)
|
||||
|
||||
err = Tenant.RemoveMember(ctx, tenant.ID, owner.ID, items[0].ID)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
exists, err := models.TenantUserQuery.WithContext(ctx).
|
||||
Where(models.TenantUserQuery.ID.Eq(items[0].ID)).
|
||||
Exists()
|
||||
So(err, ShouldBeNil)
|
||||
So(exists, ShouldBeFalse)
|
||||
})
|
||||
}
|
||||
|
||||
func (s *TenantTestSuite) Test_ListInvitesAndDisable() {
|
||||
Convey("ListInvites and DisableInvite", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
|
||||
database.Truncate(ctx, s.DB,
|
||||
models.TableNameTenantInvite,
|
||||
models.TableNameTenant,
|
||||
models.TableNameUser,
|
||||
)
|
||||
|
||||
owner := &models.User{Username: "owner_invite", Phone: "13900002003"}
|
||||
_ = models.UserQuery.WithContext(ctx).Create(owner)
|
||||
|
||||
tenant := &models.Tenant{
|
||||
Name: "Tenant Invite",
|
||||
UserID: owner.ID,
|
||||
Status: consts.TenantStatusVerified,
|
||||
}
|
||||
_ = models.TenantQuery.WithContext(ctx).Create(tenant)
|
||||
|
||||
invite := &models.TenantInvite{
|
||||
TenantID: tenant.ID,
|
||||
UserID: owner.ID,
|
||||
Code: "invite_list",
|
||||
Status: string(consts.TenantInviteStatusActive),
|
||||
MaxUses: 2,
|
||||
UsedCount: 0,
|
||||
ExpiresAt: time.Now().Add(24 * time.Hour),
|
||||
Remark: "测试邀请",
|
||||
}
|
||||
_ = models.TenantInviteQuery.WithContext(ctx).Create(invite)
|
||||
|
||||
res, err := Tenant.ListInvites(ctx, tenant.ID, owner.ID, &tenant_dto.TenantInviteListFilter{
|
||||
Pagination: requests.Pagination{Page: 1, Limit: 10},
|
||||
})
|
||||
So(err, ShouldBeNil)
|
||||
So(res.Total, ShouldEqual, 1)
|
||||
|
||||
err = Tenant.DisableInvite(ctx, tenant.ID, owner.ID, invite.ID)
|
||||
So(err, ShouldBeNil)
|
||||
|
||||
updated, err := models.TenantInviteQuery.WithContext(ctx).
|
||||
Where(models.TenantInviteQuery.ID.Eq(invite.ID)).
|
||||
First()
|
||||
So(err, ShouldBeNil)
|
||||
So(updated.Status, ShouldEqual, string(consts.TenantInviteStatusDisabled))
|
||||
})
|
||||
}
|
||||
|
||||
func (s *TenantTestSuite) Test_ListJoinRequests() {
|
||||
Convey("ListJoinRequests", s.T(), func() {
|
||||
ctx := s.T().Context()
|
||||
|
||||
database.Truncate(ctx, s.DB,
|
||||
models.TableNameTenantJoinRequest,
|
||||
models.TableNameTenant,
|
||||
models.TableNameUser,
|
||||
)
|
||||
|
||||
owner := &models.User{Username: "owner_request", Phone: "13900002004"}
|
||||
user := &models.User{Username: "request_user", Phone: "13900002005"}
|
||||
_ = models.UserQuery.WithContext(ctx).Create(owner)
|
||||
_ = models.UserQuery.WithContext(ctx).Create(user)
|
||||
|
||||
tenant := &models.Tenant{
|
||||
Name: "Tenant Request",
|
||||
UserID: owner.ID,
|
||||
Status: consts.TenantStatusVerified,
|
||||
}
|
||||
_ = models.TenantQuery.WithContext(ctx).Create(tenant)
|
||||
|
||||
req := &models.TenantJoinRequest{
|
||||
TenantID: tenant.ID,
|
||||
UserID: user.ID,
|
||||
Status: string(consts.TenantJoinRequestStatusPending),
|
||||
Reason: "申请加入",
|
||||
}
|
||||
_ = models.TenantJoinRequestQuery.WithContext(ctx).Create(req)
|
||||
|
||||
status := consts.TenantJoinRequestStatusPending
|
||||
res, err := Tenant.ListJoinRequests(ctx, tenant.ID, owner.ID, &tenant_dto.TenantJoinRequestListFilter{
|
||||
Pagination: requests.Pagination{Page: 1, Limit: 10},
|
||||
Status: &status,
|
||||
})
|
||||
So(err, ShouldBeNil)
|
||||
So(res.Total, ShouldEqual, 1)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user