fix(BRIDGE-387): use gluon ID for getting the message count instead of the address ID

This commit is contained in:
Atanas Janeshliev
2025-06-12 11:47:33 +02:00
parent 7b533d5951
commit 4ee149ecd7
4 changed files with 25 additions and 6 deletions

View File

@ -763,11 +763,11 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_ZeroCount(t *testi
mockLabelProvider := new(mockLabelNameProvider) mockLabelProvider := new(mockLabelNameProvider)
mockClient := new(mockAPIClient) mockClient := new(mockAPIClient)
mockIDProvider := new(mockIDProvider) mockGluonIDProvider := new(mockIDProvider)
mockReporter := new(mockReporter) mockReporter := new(mockReporter)
mockCountProvider := new(mockMailboxCountProvider) mockCountProvider := new(mockMailboxCountProvider)
mockIDProvider.On("GetGluonID", "addr-1").Return("gluon-id-1", true) mockGluonIDProvider.On("GetGluonID", "addr-1").Return("gluon-id-1", true)
// Mock mailbox fetch to return conflicting mailbox // Mock mailbox fetch to return conflicting mailbox
mockLabelProvider.On("GetUserMailboxByName", mock.Anything, "gluon-id-1", []string{"Folders"}). mockLabelProvider.On("GetUserMailboxByName", mock.Anything, "gluon-id-1", []string{"Folders"}).
@ -783,14 +783,15 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_ZeroCount(t *testi
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
mockCountProvider.On("GetUserMailboxCountByInternalID", mockCountProvider.On("GetUserMailboxCountByInternalID",
mock.Anything, mock.Anything,
"addr-1", "gluon-id-1",
imap.InternalMailboxID(123)). imap.InternalMailboxID(123)).
Return(0, nil) Return(0, nil)
connector.SetMailboxCountProviderTest(mockCountProvider) connector.SetMailboxCountProviderTest(mockCountProvider)
connector.SetGluonIDProviderTest(mockGluonIDProvider)
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockGluonIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewInternalLabelConflictResolver(connectors) resolver := manager.NewInternalLabelConflictResolver(connectors)
// API labels don't contain the conflicting label ID // API labels don't contain the conflicting label ID
@ -834,10 +835,11 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_PositiveCount(t *t
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
mockCountProvider.On("GetUserMailboxCountByInternalID", mockCountProvider.On("GetUserMailboxCountByInternalID",
mock.Anything, mock.Anything,
"addr-1", "gluon-id-1",
imap.InternalMailboxID(123)). imap.InternalMailboxID(123)).
Return(10, nil) Return(10, nil)
connector.SetGluonIDProviderTest(mockIDProvider)
connector.SetMailboxCountProviderTest(mockCountProvider) connector.SetMailboxCountProviderTest(mockCountProvider)
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
@ -874,6 +876,7 @@ func TestInternalLabelConflictResolver_ConflictingAPILabelSameName(t *testing.T)
connector := &imapservice.Connector{} connector := &imapservice.Connector{}
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connector.SetGluonIDProviderTest(mockIDProvider)
connector.SetMailboxCountProviderTest(mockCountProvider) connector.SetMailboxCountProviderTest(mockCountProvider)
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
@ -939,6 +942,7 @@ func TestNewInternalLabelConflictResolver_KillSwitchEnabled(t *testing.T) {
connector := &imapservice.Connector{} connector := &imapservice.Connector{}
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connector.SetGluonIDProviderTest(mockIDProvider)
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderTrue{}) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderTrue{})

View File

@ -73,6 +73,7 @@ type Connector struct {
syncState *SyncState syncState *SyncState
mailboxCountProvider mailboxCountProvider mailboxCountProvider mailboxCountProvider
gluonIDProvider gluonIDProvider
} }
var errNoSenderAddressMatch = errors.New("no matching sender found in address list") var errNoSenderAddressMatch = errors.New("no matching sender found in address list")
@ -89,6 +90,7 @@ func NewConnector(
showAllMail bool, showAllMail bool,
syncState *SyncState, syncState *SyncState,
mailboxCountProvider mailboxCountProvider, mailboxCountProvider mailboxCountProvider,
gluonIDProvider gluonIDProvider,
) *Connector { ) *Connector {
userID := identityState.UserID() userID := identityState.UserID()
@ -124,6 +126,7 @@ func NewConnector(
syncState: syncState, syncState: syncState,
mailboxCountProvider: mailboxCountProvider, mailboxCountProvider: mailboxCountProvider,
gluonIDProvider: gluonIDProvider,
} }
} }
@ -920,7 +923,16 @@ func (s *Connector) SetAddrIDTest(addrID string) {
} }
func (s *Connector) GetMailboxMessageCount(ctx context.Context, mailboxInternalID imap.InternalMailboxID) (int, error) { func (s *Connector) GetMailboxMessageCount(ctx context.Context, mailboxInternalID imap.InternalMailboxID) (int, error) {
return s.mailboxCountProvider.GetUserMailboxCountByInternalID(ctx, s.addrID, mailboxInternalID) gluonID, ok := s.gluonIDProvider.GetGluonID(s.addrID)
if !ok {
return 0, errors.New("could not retrieve Gluon ID for connector address ID")
}
return s.mailboxCountProvider.GetUserMailboxCountByInternalID(ctx, gluonID, mailboxInternalID)
}
// SetGluonIDProviderTest - sets the relevant gluon ID provider. Should only be used for testing.
func (s *Connector) SetGluonIDProviderTest(provider gluonIDProvider) {
s.gluonIDProvider = provider
} }
// SetMailboxCountProviderTest - sets the relevant provider. Should only be used for testing. // SetMailboxCountProviderTest - sets the relevant provider. Should only be used for testing.

View File

@ -541,6 +541,7 @@ func (s *Service) buildConnectors() (map[string]*Connector, error) {
s.showAllMail, s.showAllMail,
s.syncStateProvider, s.syncStateProvider,
s.serverManager, s.serverManager,
s.gluonIDProvider,
) )
return connectors, nil return connectors, nil
@ -559,6 +560,7 @@ func (s *Service) buildConnectors() (map[string]*Connector, error) {
s.showAllMail, s.showAllMail,
s.syncStateProvider, s.syncStateProvider,
s.serverManager, s.serverManager,
s.gluonIDProvider,
) )
} }

View File

@ -158,6 +158,7 @@ func addNewAddressSplitMode(ctx context.Context, s *Service, addrID string) erro
s.showAllMail, s.showAllMail,
s.syncStateProvider, s.syncStateProvider,
s.serverManager, s.serverManager,
s.gluonIDProvider,
) )
if err := s.serverManager.AddIMAPUser(ctx, connector, connector.addrID, s.gluonIDProvider, s.syncStateProvider); err != nil { if err := s.serverManager.AddIMAPUser(ctx, connector, connector.addrID, s.gluonIDProvider, s.syncStateProvider); err != nil {