feat(conversations): align mute semantics
This commit is contained in:
@@ -810,6 +810,24 @@ func (s *ConversationCrudTestSuite) TestMute_Success() {
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
|
||||
assert.Empty(s.T(), w.Body.String())
|
||||
|
||||
var conversation model.Conversation
|
||||
s.Require().NoError(s.db.First(&conversation, s.testConv.ID).Error)
|
||||
assert.Equal(s.T(), string(model.ConversationStatusResolved), conversation.Status)
|
||||
assert.True(s.T(), conversation.Muted)
|
||||
|
||||
var contact model.Contact
|
||||
s.Require().NoError(s.db.First(&contact, s.testContact.ID).Error)
|
||||
assert.True(s.T(), contact.Blocked)
|
||||
|
||||
w = httptest.NewRecorder()
|
||||
req, _ = http.NewRequest("GET", s.convURL(s.testConv.ID), nil)
|
||||
s.router.ServeHTTP(w, req)
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
var resp map[string]interface{}
|
||||
s.Require().NoError(json.Unmarshal(w.Body.Bytes(), &resp))
|
||||
assert.Equal(s.T(), true, resp["muted"])
|
||||
assert.Equal(s.T(), string(model.ConversationStatusResolved), resp["status"])
|
||||
}
|
||||
|
||||
func (s *ConversationCrudTestSuite) TestMute_InvalidAccountID() {
|
||||
@@ -849,6 +867,15 @@ func (s *ConversationCrudTestSuite) TestUnmute_Success() {
|
||||
assert.Equal(s.T(), http.StatusOK, w.Code)
|
||||
|
||||
assert.Empty(s.T(), w.Body.String())
|
||||
|
||||
var conversation model.Conversation
|
||||
s.Require().NoError(s.db.First(&conversation, s.testConv.ID).Error)
|
||||
assert.Equal(s.T(), string(model.ConversationStatusResolved), conversation.Status)
|
||||
assert.False(s.T(), conversation.Muted)
|
||||
|
||||
var contact model.Contact
|
||||
s.Require().NoError(s.db.First(&contact, s.testContact.ID).Error)
|
||||
assert.False(s.T(), contact.Blocked)
|
||||
}
|
||||
|
||||
func (s *ConversationCrudTestSuite) TestUnmute_InvalidAccountID() {
|
||||
|
||||
@@ -238,7 +238,7 @@ func serializeConversation(ctx context.Context, db *gorm.DB, conversation *model
|
||||
CustomAttributes: jsonObject(conversation.CustomAttributes),
|
||||
InboxID: conversation.InboxID,
|
||||
Labels: labelList(conversation.Labels),
|
||||
Muted: conversation.Muted,
|
||||
Muted: conversationMuted(ctx, db, conversation),
|
||||
SnoozedUntil: conversation.SnoozedUntil,
|
||||
Status: conversation.Status,
|
||||
CreatedAt: conversation.CreatedAt.Unix(),
|
||||
@@ -260,6 +260,21 @@ func serializeConversation(ctx context.Context, db *gorm.DB, conversation *model
|
||||
return payload
|
||||
}
|
||||
|
||||
func conversationMuted(ctx context.Context, db *gorm.DB, conversation *model.Conversation) bool {
|
||||
if db == nil || conversation.ContactID == 0 {
|
||||
return conversation.Muted
|
||||
}
|
||||
|
||||
var contact model.Contact
|
||||
if err := db.WithContext(ctx).
|
||||
Select("id", "blocked").
|
||||
Where("id = ? AND account_id = ?", conversation.ContactID, conversation.AccountID).
|
||||
First(&contact).Error; err == nil {
|
||||
return contact.Blocked
|
||||
}
|
||||
return conversation.Muted
|
||||
}
|
||||
|
||||
func serializeAppliedSlaForConversation(ctx context.Context, db *gorm.DB, conversationID uint) map[string]any {
|
||||
if db == nil || conversationID == 0 {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user