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)
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{})

View File

@ -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.

View File

@ -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,
)
}

View File

@ -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 {