Skip to content

Commit

Permalink
Add USER_GROUP_UPDATED bot event
Browse files Browse the repository at this point in the history
  • Loading branch information
H1rono committed Jul 28, 2023
1 parent 69ac32f commit ea35c7b
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 0 deletions.
2 changes: 2 additions & 0 deletions service/bot/event/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ const (
TagRemoved model.BotEventType = "TAG_REMOVED"
// UserGroupCreated グループ作成イベント
UserGroupCreated model.BotEventType = "USER_GROUP_CREATED"
// UserGroupUpdated グループ更新イベント
UserGroupUpdated model.BotEventType = "USER_GROUP_UPDATED"
// UserGroupDeleted グループ削除イベント
UserGroupDeleted model.BotEventType = "USER_GROUP_DELETED"
)
Expand Down
20 changes: 20 additions & 0 deletions service/bot/event/payload/ev_user_group_updated.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package payload

import (
"time"

"github.com/traPtitech/traQ/model"
)

// UserGroupUpdated USER_GROUP_UPDATEDイベントペイロード
type UserGroupUpdated struct {
Base
Group model.UserGroup `json:"group"`
}

func MakeUserGroupUpdated(eventTime time.Time, group model.UserGroup) *UserGroupUpdated {
return &UserGroupUpdated{
Base: MakeBase(eventTime),
Group: group,
}
}
32 changes: 32 additions & 0 deletions service/bot/handler/ev_user_group_updated.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package handler

import (
"fmt"
"time"

"github.com/leandro-lugaresi/hub"

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

func UserGroupUpdated(ctx Context, datetime time.Time, _ string, fields hub.Fields) error {
group := fields["group"].(model.UserGroup)
bots, err := ctx.GetBots(event.UserGroupUpdated)
if err != nil {
return fmt.Errorf("failed to GetBots: %w", err)
}
if len(bots) == 0 {
return nil
}

if err := ctx.Multicast(
event.UserGroupUpdated,
payload.MakeUserGroupUpdated(datetime, group),
bots,
); err != nil {
return fmt.Errorf("failed to multicast: %w", err)
}
return nil
}
57 changes: 57 additions & 0 deletions service/bot/handler/ev_user_group_updated_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
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 TestUserGroupUpdated(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.UserGroupUpdated.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)

user := &model.User{
ID: uuid.NewV3(uuid.Nil, "u"),
Name: "new_user",
Status: model.UserAccountStatusActive,
Bot: false,
}
group := model.UserGroup{
ID: uuid.NewV3(uuid.Nil, "g"),
Name: "new_group",
Description: "new_group_description",
Type: "new_group_type",
}
group.Admins = append(group.Admins, &model.UserGroupAdmin{GroupID: group.ID, UserID: user.ID})
group.Members = append(group.Members, &model.UserGroupMember{GroupID: group.ID, UserID: user.ID})
et := time.Now()

expectMulticast(handlerCtx, event.UserGroupUpdated, payload.MakeUserGroupUpdated(et, group), []*model.Bot{b})
assert.NoError(t, UserGroupUpdated(handlerCtx, et, intevent.UserGroupUpdated, hub.Fields{
"group_id": group.ID,
"group": group,
}))
})
}
1 change: 1 addition & 0 deletions service/bot/handlers.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,6 @@ var eventHandlerSet = map[string]eventHandler{
intevent.UserTagRemoved: handler.UserTagRemoved,
intevent.MessageStampsUpdated: handler.MessageStampsUpdated,
intevent.UserGroupCreated: handler.UserGroupCreated,
intevent.UserGroupUpdated: handler.UserGroupUpdated,
intevent.UserGroupDeleted: handler.UserGroupDeleted,
}

0 comments on commit ea35c7b

Please sign in to comment.