Align GoChat with Chatwoot frontend contracts
This commit is contained in:
@@ -32,7 +32,7 @@ func (s *TeamHandlerTestSuite) SetupSuite() {
|
||||
Logger: logger.Default.LogMode(logger.Silent),
|
||||
})
|
||||
s.Require().NoError(err)
|
||||
s.Require().NoError(db.AutoMigrate(&model.Account{}, &model.Team{}, &model.TeamMember{}))
|
||||
s.Require().NoError(db.AutoMigrate(&model.Account{}, &model.User{}, &model.AccountUser{}, &model.Team{}, &model.TeamMember{}))
|
||||
s.db = db
|
||||
|
||||
teamRepo := repository.NewTeamRepo(db)
|
||||
@@ -202,6 +202,51 @@ func (s *TeamHandlerTestSuite) TestDelete_Success() {
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
func (s *TeamHandlerTestSuite) TestTeamMembers_ChatwootPayloadAndDiffUpdate() {
|
||||
team := &model.Team{AccountID: s.account.ID, Name: "members-test-team"}
|
||||
s.Require().NoError(s.db.Create(team).Error)
|
||||
agentOne := &model.User{AccountID: s.account.ID, Name: "Agent One", Email: "agent-one@example.test", Role: "agent"}
|
||||
s.Require().NoError(s.db.Create(agentOne).Error)
|
||||
s.Require().NoError(s.db.Create(&model.AccountUser{AccountID: s.account.ID, UserID: agentOne.ID, Role: "agent"}).Error)
|
||||
agentTwo := &model.User{AccountID: s.account.ID, Name: "Agent Two", Email: "agent-two@example.test", Role: "agent"}
|
||||
s.Require().NoError(s.db.Create(agentTwo).Error)
|
||||
s.Require().NoError(s.db.Create(&model.AccountUser{AccountID: s.account.ID, UserID: agentTwo.ID, Role: "agent"}).Error)
|
||||
s.Require().NoError(s.db.Create(&model.TeamMember{TeamID: team.ID, UserID: agentOne.ID, AvailabilityStatus: "online"}).Error)
|
||||
|
||||
r := gin.New()
|
||||
r.GET("/api/v1/accounts/:account_id/teams/:team_id/team_members", func(c *gin.Context) {
|
||||
s.authMiddleware(c)
|
||||
s.handler.ListMembers(c)
|
||||
})
|
||||
r.PATCH("/api/v1/accounts/:account_id/teams/:team_id/team_members", func(c *gin.Context) {
|
||||
s.authMiddleware(c)
|
||||
s.handler.UpdateMembers(c)
|
||||
})
|
||||
|
||||
listBefore := httptest.NewRecorder()
|
||||
req, _ := http.NewRequest("GET", fmt.Sprintf("/api/v1/accounts/%d/teams/%d/team_members", s.account.ID, team.ID), nil)
|
||||
r.ServeHTTP(listBefore, req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusOK, listBefore.Code)
|
||||
var before []map[string]any
|
||||
s.Require().NoError(json.Unmarshal(listBefore.Body.Bytes(), &before))
|
||||
s.Require().Len(before, 1)
|
||||
assert.Equal(s.T(), "Agent One", before[0]["name"])
|
||||
assert.Equal(s.T(), "online", before[0]["availability_status"])
|
||||
|
||||
body := fmt.Sprintf(`{"user_ids":[%d]}`, agentTwo.ID)
|
||||
update := httptest.NewRecorder()
|
||||
req, _ = http.NewRequest("PATCH", fmt.Sprintf("/api/v1/accounts/%d/teams/%d/team_members", s.account.ID, team.ID), bytes.NewBufferString(body))
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
r.ServeHTTP(update, req)
|
||||
|
||||
assert.Equal(s.T(), http.StatusOK, update.Code)
|
||||
var after []map[string]any
|
||||
s.Require().NoError(json.Unmarshal(update.Body.Bytes(), &after))
|
||||
s.Require().Len(after, 1)
|
||||
assert.Equal(s.T(), "Agent Two", after[0]["name"])
|
||||
}
|
||||
|
||||
func (s *TeamHandlerTestSuite) TestGet_BadRequest_InvalidID() {
|
||||
r := gin.New()
|
||||
r.GET("/api/v1/accounts/:account_id/teams/:id", func(c *gin.Context) {
|
||||
|
||||
Reference in New Issue
Block a user