diff --git a/internal/services/imapservice/conflicts_test.go b/internal/services/imapservice/conflicts_test.go index 3c531e77..451306e4 100644 --- a/internal/services/imapservice/conflicts_test.go +++ b/internal/services/imapservice/conflicts_test.go @@ -763,11 +763,11 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_ZeroCount(t *testi mockLabelProvider := new(mockLabelNameProvider) mockClient := new(mockAPIClient) - mockIDProvider := new(mockIDProvider) + mockGluonIDProvider := new(mockIDProvider) mockReporter := new(mockReporter) 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 mockLabelProvider.On("GetUserMailboxByName", mock.Anything, "gluon-id-1", []string{"Folders"}). @@ -783,14 +783,15 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_ZeroCount(t *testi connector.SetAddrIDTest("addr-1") mockCountProvider.On("GetUserMailboxCountByInternalID", mock.Anything, - "addr-1", + "gluon-id-1", imap.InternalMailboxID(123)). Return(0, nil) connector.SetMailboxCountProviderTest(mockCountProvider) + connector.SetGluonIDProviderTest(mockGluonIDProvider) connectors := []*imapservice.Connector{connector} - manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}) + manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockGluonIDProvider, mockClient, mockReporter, ffProviderFalse{}) resolver := manager.NewInternalLabelConflictResolver(connectors) // API labels don't contain the conflicting label ID @@ -834,10 +835,11 @@ func TestInternalLabelConflictResolver_ConflictingNonAPILabel_PositiveCount(t *t connector.SetAddrIDTest("addr-1") mockCountProvider.On("GetUserMailboxCountByInternalID", mock.Anything, - "addr-1", + "gluon-id-1", imap.InternalMailboxID(123)). Return(10, nil) + connector.SetGluonIDProviderTest(mockIDProvider) connector.SetMailboxCountProviderTest(mockCountProvider) connectors := []*imapservice.Connector{connector} @@ -874,6 +876,7 @@ func TestInternalLabelConflictResolver_ConflictingAPILabelSameName(t *testing.T) connector := &imapservice.Connector{} connector.SetAddrIDTest("addr-1") + connector.SetGluonIDProviderTest(mockIDProvider) connector.SetMailboxCountProviderTest(mockCountProvider) connectors := []*imapservice.Connector{connector} @@ -939,6 +942,7 @@ func TestNewInternalLabelConflictResolver_KillSwitchEnabled(t *testing.T) { connector := &imapservice.Connector{} connector.SetAddrIDTest("addr-1") + connector.SetGluonIDProviderTest(mockIDProvider) connectors := []*imapservice.Connector{connector} manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderTrue{}) diff --git a/internal/services/imapservice/connector.go b/internal/services/imapservice/connector.go index dcdd900c..707f273d 100644 --- a/internal/services/imapservice/connector.go +++ b/internal/services/imapservice/connector.go @@ -73,6 +73,7 @@ type Connector struct { syncState *SyncState mailboxCountProvider mailboxCountProvider + gluonIDProvider gluonIDProvider } var errNoSenderAddressMatch = errors.New("no matching sender found in address list") @@ -89,6 +90,7 @@ func NewConnector( showAllMail bool, syncState *SyncState, mailboxCountProvider mailboxCountProvider, + gluonIDProvider gluonIDProvider, ) *Connector { userID := identityState.UserID() @@ -124,6 +126,7 @@ func NewConnector( syncState: syncState, 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) { - 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. diff --git a/internal/services/imapservice/service.go b/internal/services/imapservice/service.go index a5a0527d..394caf4f 100644 --- a/internal/services/imapservice/service.go +++ b/internal/services/imapservice/service.go @@ -541,6 +541,7 @@ func (s *Service) buildConnectors() (map[string]*Connector, error) { s.showAllMail, s.syncStateProvider, s.serverManager, + s.gluonIDProvider, ) return connectors, nil @@ -559,6 +560,7 @@ func (s *Service) buildConnectors() (map[string]*Connector, error) { s.showAllMail, s.syncStateProvider, s.serverManager, + s.gluonIDProvider, ) } diff --git a/internal/services/imapservice/service_address_events.go b/internal/services/imapservice/service_address_events.go index f6690b7a..ca00974e 100644 --- a/internal/services/imapservice/service_address_events.go +++ b/internal/services/imapservice/service_address_events.go @@ -158,6 +158,7 @@ func addNewAddressSplitMode(ctx context.Context, s *Service, addrID string) erro s.showAllMail, s.syncStateProvider, s.serverManager, + s.gluonIDProvider, ) if err := s.serverManager.AddIMAPUser(ctx, connector, connector.addrID, s.gluonIDProvider, s.syncStateProvider); err != nil {