H-413: cover mismatched ContactInbox history (#74)

Co-authored-by: Rogee <rogee@ipao.vip>
This commit is contained in:
Rogee
2026-08-21 13:49:11 +08:00
committed by GitHub
co-authored by rogee
parent 5135793bd2
commit 1afe9dddeb
@@ -63,21 +63,37 @@ func TestConversationRepo_FindByContactInboxIncludesLegacyOnlyWhenAllowed(t *tes
repo := NewConversationRepo(db)
account := &model.Account{Name: "Widget identity account", Active: true}
require.NoError(t, db.Create(account).Error)
otherAccount := &model.Account{Name: "Other widget identity account", Active: true}
require.NoError(t, db.Create(otherAccount).Error)
inbox := &model.Inbox{AccountID: account.ID, Name: "Widget", ChannelType: "web_widget"}
require.NoError(t, db.Create(inbox).Error)
otherInbox := &model.Inbox{AccountID: account.ID, Name: "Other widget", ChannelType: "web_widget"}
require.NoError(t, db.Create(otherInbox).Error)
contact := &model.Contact{AccountID: account.ID, Name: "Visitor"}
require.NoError(t, db.Create(contact).Error)
otherContact := &model.Contact{AccountID: account.ID, Name: "Other visitor"}
require.NoError(t, db.Create(otherContact).Error)
contactInbox := &model.ContactInbox{ContactID: contact.ID, InboxID: inbox.ID, PubsubToken: "token-a"}
require.NoError(t, db.Create(contactInbox).Error)
legacy := createTestConversation(t, db, account.ID, inbox.ID, contact.ID, "open")
owned := createTestConversation(t, db, account.ID, inbox.ID, contact.ID, "open")
require.NoError(t, db.Model(owned).Update("contact_inbox_id", contactInbox.ID).Error)
wrongAccount := createTestConversation(t, db, otherAccount.ID, inbox.ID, contact.ID, "open")
require.NoError(t, db.Model(wrongAccount).Update("contact_inbox_id", contactInbox.ID).Error)
createTestConversation(t, db, account.ID, inbox.ID, otherContact.ID, "open")
createTestConversation(t, db, account.ID, otherInbox.ID, contact.ID, "open")
conversations, total, err := repo.FindByContactInbox(context.Background(), account.ID, contact.ID, inbox.ID, contactInbox.ID, true, 0, 10)
require.NoError(t, err)
assert.Equal(t, int64(2), total)
assert.ElementsMatch(t, []uint{legacy.ID, owned.ID}, []uint{conversations[0].ID, conversations[1].ID})
latest, total, err := repo.FindByContactInbox(context.Background(), account.ID, contact.ID, inbox.ID, contactInbox.ID, true, 0, 1)
require.NoError(t, err)
assert.Equal(t, int64(2), total)
require.Len(t, latest, 1)
assert.Equal(t, owned.ID, latest[0].ID)
conversations, total, err = repo.FindByContactInbox(context.Background(), account.ID, contact.ID, inbox.ID, contactInbox.ID, false, 0, 10)
require.NoError(t, err)
assert.Equal(t, int64(1), total)