Skip to content

Commit 7b91311

Browse files
committed
feat(apple): expose given_name and family_name in user metadata
1 parent bb521e4 commit 7b91311

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

internal/api/provider/apple.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,5 +175,7 @@ func (p AppleProvider) ParseUser(data string, userData *UserProvidedData) error
175175

176176
userData.Metadata.Name = strings.TrimSpace(u.Name.FirstName + " " + u.Name.LastName)
177177
userData.Metadata.FullName = strings.TrimSpace(u.Name.FirstName + " " + u.Name.LastName)
178+
userData.Metadata.GivenName = u.Name.FirstName
179+
userData.Metadata.FamilyName = u.Name.LastName
178180
return nil
179181
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package provider
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestAppleProvider_ParseUser(t *testing.T) {
10+
t.Run("populates all name fields when firstName and lastName present", func(t *testing.T) {
11+
p := AppleProvider{}
12+
userData := &UserProvidedData{Metadata: &Claims{}}
13+
err := p.ParseUser(`{"name":{"firstName":"Test","lastName":"User"},"email":"test@example.com"}`, userData)
14+
require.NoError(t, err)
15+
require.Equal(t, "Test", userData.Metadata.GivenName)
16+
require.Equal(t, "User", userData.Metadata.FamilyName)
17+
require.Equal(t, "Test User", userData.Metadata.Name)
18+
require.Equal(t, "Test User", userData.Metadata.FullName)
19+
})
20+
21+
t.Run("populates given name only when lastName missing", func(t *testing.T) {
22+
p := AppleProvider{}
23+
userData := &UserProvidedData{Metadata: &Claims{}}
24+
err := p.ParseUser(`{"name":{"firstName":"Cher"},"email":"cher@example.com"}`, userData)
25+
require.NoError(t, err)
26+
require.Equal(t, "Cher", userData.Metadata.GivenName)
27+
require.Empty(t, userData.Metadata.FamilyName)
28+
require.Equal(t, "Cher", userData.Metadata.Name)
29+
require.Equal(t, "Cher", userData.Metadata.FullName)
30+
})
31+
32+
t.Run("populates family name only when firstName missing", func(t *testing.T) {
33+
p := AppleProvider{}
34+
userData := &UserProvidedData{Metadata: &Claims{}}
35+
err := p.ParseUser(`{"name":{"lastName":"User"},"email":"user@example.com"}`, userData)
36+
require.NoError(t, err)
37+
require.Empty(t, userData.Metadata.GivenName)
38+
require.Equal(t, "User", userData.Metadata.FamilyName)
39+
require.Equal(t, "User", userData.Metadata.Name)
40+
require.Equal(t, "User", userData.Metadata.FullName)
41+
})
42+
43+
t.Run("leaves name fields empty when name object absent", func(t *testing.T) {
44+
p := AppleProvider{}
45+
userData := &UserProvidedData{Metadata: &Claims{}}
46+
err := p.ParseUser(`{"email":"anonymous@example.com"}`, userData)
47+
require.NoError(t, err)
48+
require.Empty(t, userData.Metadata.GivenName)
49+
require.Empty(t, userData.Metadata.FamilyName)
50+
require.Empty(t, userData.Metadata.Name)
51+
require.Empty(t, userData.Metadata.FullName)
52+
})
53+
54+
t.Run("returns error on invalid JSON", func(t *testing.T) {
55+
p := AppleProvider{}
56+
userData := &UserProvidedData{Metadata: &Claims{}}
57+
err := p.ParseUser(`not-json`, userData)
58+
require.Error(t, err)
59+
})
60+
}

0 commit comments

Comments
 (0)