mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-10 04:36:43 +00:00
feat(GODT-3122): added test, changed interface for accessing display name.
This commit is contained in:
@ -58,11 +58,6 @@ const (
|
||||
SyncRetryCooldown = 20 * time.Second
|
||||
)
|
||||
|
||||
type Identity struct {
|
||||
DisplayName string
|
||||
Email string
|
||||
}
|
||||
|
||||
type User struct {
|
||||
id string
|
||||
log *logrus.Entry
|
||||
@ -383,41 +378,32 @@ func (user *User) Match(query string) bool {
|
||||
|
||||
return false
|
||||
}
|
||||
func (user *User) Identities() []Identity {
|
||||
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Minute))
|
||||
defer cancel()
|
||||
|
||||
apiAddresses, err := user.identityService.GetAddresses(ctx)
|
||||
if err != nil {
|
||||
// DisplayNames returns a map of the email addresses and their associated display names.
|
||||
func (user *User) DisplayNames() map[string]string {
|
||||
addresses := user.protonAddresses()
|
||||
if addresses == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
addresses := xslices.Filter(maps.Values(apiAddresses), func(addr proton.Address) bool {
|
||||
return addr.Status == proton.AddressStatusEnabled && addr.Type != proton.AddressTypeExternal
|
||||
})
|
||||
result := make(map[string]string)
|
||||
for _, address := range addresses {
|
||||
result[address.Email] = address.DisplayName
|
||||
}
|
||||
|
||||
slices.SortFunc(addresses, func(a, b proton.Address) bool {
|
||||
return a.Order < b.Order
|
||||
})
|
||||
|
||||
return xslices.Map(addresses, func(addr proton.Address) Identity {
|
||||
return Identity{
|
||||
DisplayName: addr.DisplayName,
|
||||
Email: addr.Email,
|
||||
}
|
||||
})
|
||||
return result
|
||||
}
|
||||
|
||||
// Emails returns all the user's active email addresses.
|
||||
// It returns them in sorted order; the user's primary address is first.
|
||||
func (user *User) Emails() []string {
|
||||
identities := user.Identities()
|
||||
if identities == nil {
|
||||
addresses := user.protonAddresses()
|
||||
if addresses == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return xslices.Map(identities, func(identity Identity) string {
|
||||
return identity.Email
|
||||
return xslices.Map(addresses, func(addr proton.Address) string {
|
||||
return addr.Email
|
||||
})
|
||||
}
|
||||
|
||||
@ -711,3 +697,23 @@ func (user *User) PauseEventLoopWithWaiter() *userevents.EventPollWaiter {
|
||||
func (user *User) ResumeEventLoop() {
|
||||
user.eventService.Resume()
|
||||
}
|
||||
|
||||
func (user *User) protonAddresses() []proton.Address {
|
||||
ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Minute))
|
||||
defer cancel()
|
||||
|
||||
apiAddrs, err := user.identityService.GetAddresses(ctx)
|
||||
if err != nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
addresses := xslices.Filter(maps.Values(apiAddrs), func(addr proton.Address) bool {
|
||||
return addr.Status == proton.AddressStatusEnabled && addr.Type != proton.AddressTypeExternal
|
||||
})
|
||||
|
||||
slices.SortFunc(addresses, func(a, b proton.Address) bool {
|
||||
return a.Order < b.Order
|
||||
})
|
||||
|
||||
return addresses
|
||||
}
|
||||
|
||||
@ -19,6 +19,7 @@ package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
"reflect"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -58,8 +59,12 @@ func TestUser_Info(t *testing.T) {
|
||||
// User's name should be correct.
|
||||
require.Equal(t, "username", user.Name())
|
||||
|
||||
// User's email should be correct.
|
||||
// User's emails should be correct and their associated display names should be correct
|
||||
require.ElementsMatch(t, []string{"username@" + s.GetDomain(), "alias@pm.me"}, user.Emails())
|
||||
require.True(t, reflect.DeepEqual(map[string]string{
|
||||
"username@" + s.GetDomain(): "username" + " (Display Name)",
|
||||
"alias@pm.me": "alias@pm.me (Display Name)",
|
||||
}, user.DisplayNames()))
|
||||
|
||||
// By default, user should be in combined mode.
|
||||
require.Equal(t, vault.CombinedMode, user.GetAddressMode())
|
||||
@ -98,12 +103,14 @@ func withAPI(_ testing.TB, ctx context.Context, fn func(context.Context, *server
|
||||
func withAccount(tb testing.TB, s *server.Server, username, password string, aliases []string, fn func(string, []string)) { //nolint:unparam
|
||||
userID, addrID, err := s.CreateUser(username, []byte(password))
|
||||
require.NoError(tb, err)
|
||||
require.NoError(tb, s.ChangeAddressDisplayName(userID, addrID, username+" (Display Name)"))
|
||||
|
||||
addrIDs := []string{addrID}
|
||||
|
||||
for _, email := range aliases {
|
||||
addrID, err := s.CreateAddress(userID, email, []byte(password))
|
||||
require.NoError(tb, err)
|
||||
require.NoError(tb, s.ChangeAddressDisplayName(userID, addrID, email+" (Display Name)"))
|
||||
|
||||
addrIDs = append(addrIDs, addrID)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user