Skip to content

Commit

Permalink
Add USER_GROUP_ADMIN_REMOVED bot event
Browse files Browse the repository at this point in the history
  • Loading branch information
H1rono committed Aug 1, 2023
1 parent c02cd95 commit 2f1d29c
Show file tree
Hide file tree
Showing 5 changed files with 134 additions and 0 deletions.
3 changes: 3 additions & 0 deletions service/bot/event/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ const (
UserGroupMemberRemoved model.BotEventType = "USER_GROUP_MEMBER_REMOVED"
// UserGroupAdminAdded グループ管理者追加イベント
UserGroupAdminAdded model.BotEventType = "USER_GROUP_ADMIN_ADDED"
// UserGroupAdminRemoved グループ管理者削除イベント
UserGroupAdminRemoved model.BotEventType = "USER_GROUP_ADMIN_REMOVED"
)

var Types model.BotEventTypes
Expand Down Expand Up @@ -83,6 +85,7 @@ func init() {
UserGroupMemberUpdated,
UserGroupMemberRemoved,
UserGroupAdminAdded,
UserGroupAdminRemoved,
} {
Types[t] = struct{}{}
}
Expand Down
28 changes: 28 additions & 0 deletions service/bot/event/payload/ev_user_group_admin_removed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package payload

import (
"github.com/gofrs/uuid"
"time"
)

// UserGroupAdminRemoved USER_GROUP_ADMIN_REMOVEDイベントペイロード
type UserGroupAdminRemoved struct {
Base
GroupMember struct {
GroupID uuid.UUID `json:"groupId"`
UserID uuid.UUID `json:"userId"`
} `json:"groupMember"`
}

func MakeUserGroupAdminRemoved(eventTime time.Time, groupID, userID uuid.UUID) *UserGroupAdminRemoved {
return &UserGroupAdminRemoved{
Base: MakeBase(eventTime),
GroupMember: struct {
GroupID uuid.UUID `json:"groupId"`
UserID uuid.UUID `json:"userId"`
}{
GroupID: groupID,
UserID: userID,
},
}
}
33 changes: 33 additions & 0 deletions service/bot/handler/ev_user_group_admin_removed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package handler

import (
"fmt"
"github.com/gofrs/uuid"
"time"

"github.com/leandro-lugaresi/hub"

"github.com/traPtitech/traQ/service/bot/event"
"github.com/traPtitech/traQ/service/bot/event/payload"
)

func UserGroupAdminRemoved(ctx Context, datetime time.Time, _ string, fields hub.Fields) error {
groupID := fields["group_id"].(uuid.UUID)
userID := fields["user_id"].(uuid.UUID)
bots, err := ctx.GetBots(event.UserGroupAdminRemoved)
if err != nil {
return fmt.Errorf("failed to GetBots: %w", err)
}
if len(bots) == 0 {
return nil
}

if err := ctx.Multicast(
event.UserGroupAdminRemoved,
payload.MakeUserGroupAdminRemoved(datetime, groupID, userID),
bots,
); err != nil {
return fmt.Errorf("failed to multicast: %w", err)
}
return nil
}
69 changes: 69 additions & 0 deletions service/bot/handler/ev_user_group_admin_removed_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package handler

import (
"testing"
"time"

"github.com/gofrs/uuid"
"github.com/golang/mock/gomock"
"github.com/leandro-lugaresi/hub"
"github.com/stretchr/testify/assert"

intevent "github.com/traPtitech/traQ/event"
"github.com/traPtitech/traQ/model"
"github.com/traPtitech/traQ/service/bot/event"
"github.com/traPtitech/traQ/service/bot/event/payload"
"github.com/traPtitech/traQ/service/bot/handler/mock_handler"
)

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

b := &model.Bot{
ID: uuid.NewV3(uuid.Nil, "b"),
BotUserID: uuid.NewV3(uuid.Nil, "bu"),
SubscribeEvents: model.BotEventTypesFromArray([]string{event.UserGroupAdminRemoved.String()}),
State: model.BotActive,
}

t.Run("success", func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
handlerCtx := mock_handler.NewMockContext(ctrl)
registerBot(t, handlerCtx, b)

userID := uuid.NewV3(uuid.Nil, "u")
groupID := uuid.NewV3(uuid.Nil, "g")
et := time.Now()

expectMulticast(handlerCtx, event.UserGroupAdminRemoved, payload.MakeUserGroupAdminRemoved(et, groupID, userID), []*model.Bot{b})
assert.NoError(t, UserGroupAdminRemoved(handlerCtx, et, intevent.UserGroupAdminRemoved, hub.Fields{
"group_id": groupID,
"user_id": userID,
}))
})

t.Run("not subscribe USER_GROUP_ADMIN_REMOVED", func(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
handlerCtx := mock_handler.NewMockContext(ctrl)
b2 := &model.Bot{
ID: uuid.NewV3(uuid.Nil, "b2"),
BotUserID: uuid.NewV3(uuid.Nil, "bu2"),
SubscribeEvents: model.BotEventTypesFromArray([]string{event.MessageCreated.String()}),
State: model.BotActive,
}
registerBot(t, handlerCtx, b)
registerBot(t, handlerCtx, b2)

userID := uuid.NewV3(uuid.Nil, "u")
groupID := uuid.NewV3(uuid.Nil, "g")
et := time.Now()

expectMulticast(handlerCtx, event.UserGroupAdminRemoved, payload.MakeUserGroupAdminRemoved(et, groupID, userID), []*model.Bot{b})
assert.NoError(t, UserGroupAdminRemoved(handlerCtx, et, intevent.UserGroupAdminRemoved, hub.Fields{
"group_id": groupID,
"user_id": userID,
}))
})
}
1 change: 1 addition & 0 deletions service/bot/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,5 @@ var eventHandlerSet = map[string]eventHandler{
intevent.UserGroupMemberUpdated: handler.UserGroupMemberUpdated,
intevent.UserGroupMemberRemoved: handler.UserGroupMemberRemoved,
intevent.UserGroupAdminAdded: handler.UserGroupAdminAdded,
intevent.UserGroupAdminRemoved: handler.UserGroupAdminRemoved,
}

0 comments on commit 2f1d29c

Please sign in to comment.