16
16
*/
17
17
18
18
import { expect } from 'chai' ;
19
- import { IdTokenResponse } from '../../model/id_token' ;
20
- import { ProviderId } from '../providers' ;
21
19
import { fromIdTokenResponse } from './additional_user_info' ;
20
+ import { IdTokenResponse , IdTokenResponseKind } from '../../model/id_token' ;
21
+ import { ProviderId } from '../providers' ;
22
+ import { UserProfile } from '../../model/user' ;
22
23
23
24
describe ( 'core/user/additional_user_info' , ( ) => {
24
-
25
25
describe ( 'fromIdTokenResponse' , ( ) => {
26
- const profile = { login : 'scott' , friends : [ ] , netWorth : 5.00 } ;
27
- const rawUserInfo = JSON . stringify ( profile ) ;
26
+ const userProfileWithLogin : UserProfile = {
27
+ login : 'scott' ,
28
+ friends : [ ] ,
29
+ netWorth : 5.0
30
+ } ;
31
+ const rawUserInfoWithLogin = JSON . stringify ( userProfileWithLogin ) ;
32
+ const userProfileNoLogin : UserProfile = { sample : 'data' } ;
33
+ const rawUserInfoNoLogin = JSON . stringify ( userProfileNoLogin ) ;
28
34
29
35
describe ( 'parses federated IDP response tokens' , ( ) => {
30
-
31
36
it ( 'for FacebookAdditionalUserInfo' , ( ) => {
32
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK , rawUserInfo} ) ) ! ;
33
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
37
+ const idResponse = idTokenResponse ( {
38
+ providerId : ProviderId . FACEBOOK ,
39
+ rawUserInfo : rawUserInfoWithLogin
40
+ } ) ;
41
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
42
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
34
43
expect ( isNewUser ) . to . be . false ;
35
44
expect ( providerId ) . to . eq ( ProviderId . FACEBOOK ) ;
36
45
expect ( username ) . to . be . null ;
37
- expect ( profile ) . to . eq ( profile ) ;
46
+ expect ( profile ) . to . eq ( userProfileWithLogin ) ;
38
47
} ) ;
39
48
40
49
it ( 'for GithubAdditionalUserInfo' , ( ) => {
41
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . GITHUB , rawUserInfo} ) ) ! ;
42
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
50
+ const idResponse = idTokenResponse ( {
51
+ providerId : ProviderId . GITHUB ,
52
+ rawUserInfo : rawUserInfoWithLogin
53
+ } ) ;
54
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
55
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
43
56
expect ( isNewUser ) . to . be . false ;
44
57
expect ( providerId ) . to . eq ( ProviderId . GITHUB ) ;
45
58
expect ( username ) . to . eq ( 'scott' ) ;
46
- expect ( profile ) . to . eq ( profile ) ;
59
+ expect ( profile ) . to . eq ( userProfileWithLogin ) ;
47
60
} ) ;
48
61
49
62
it ( 'for GoogleAdditionalUserInfo' , ( ) => {
50
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . GOOGLE , rawUserInfo} ) ) ! ;
51
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
63
+ const idResponse = idTokenResponse ( {
64
+ providerId : ProviderId . GOOGLE ,
65
+ rawUserInfo : rawUserInfoWithLogin
66
+ } ) ;
67
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
68
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
52
69
expect ( isNewUser ) . to . be . false ;
53
70
expect ( providerId ) . to . eq ( ProviderId . GOOGLE ) ;
54
71
expect ( username ) . to . be . null ;
55
- expect ( profile ) . to . eq ( profile ) ;
72
+ expect ( profile ) . to . eq ( userProfileWithLogin ) ;
56
73
} ) ;
57
74
58
75
it ( 'for TwitterAdditionalUserInfo' , ( ) => {
59
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . TWITTER , rawUserInfo, screenName : 'scott' } ) ) ! ;
60
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
76
+ const idResponse = idTokenResponse ( {
77
+ providerId : ProviderId . TWITTER ,
78
+ rawUserInfo : rawUserInfoNoLogin ,
79
+ screenName : 'scott'
80
+ } ) ;
81
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
82
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
61
83
expect ( isNewUser ) . to . be . false ;
62
84
expect ( providerId ) . to . eq ( ProviderId . TWITTER ) ;
63
85
expect ( username ) . to . eq ( 'scott' ) ;
64
- expect ( profile ) . to . eq ( profile ) ;
86
+ expect ( profile ) . to . eql ( userProfileNoLogin ) ;
65
87
} ) ;
66
88
} ) ;
67
89
68
90
describe ( 'parses profile data' , ( ) => {
69
-
70
91
it ( 'for valid JSON' , ( ) => {
71
- expect ( fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK , rawUserInfo} ) ) ! . profile ) . to . deep . eq ( profile ) ;
92
+ const idResponse = idTokenResponse ( {
93
+ providerId : ProviderId . FACEBOOK ,
94
+ rawUserInfo : rawUserInfoWithLogin
95
+ } ) ;
96
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
97
+ expect ( additionalUserInfo . profile ) . to . eql ( userProfileWithLogin ) ;
72
98
} ) ;
73
99
74
100
it ( 'for missing JSON' , ( ) => {
75
- expect ( fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK } ) ) ! . profile ) . to . deep . eq ( { } ) ;
101
+ const idResponse = idTokenResponse ( { providerId : ProviderId . FACEBOOK } ) ;
102
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
103
+ expect ( additionalUserInfo . profile ) . to . be . empty ;
76
104
} ) ;
77
105
} ) ;
78
106
79
107
describe ( 'determines new-user status' , ( ) => {
80
-
81
108
it ( 'for new users by token response' , ( ) => {
82
- expect ( fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK , isNewUser : true } ) ) ! . isNewUser ) . to . be . true ;
109
+ const idResponse = idTokenResponse ( {
110
+ providerId : ProviderId . FACEBOOK ,
111
+ isNewUser : true
112
+ } ) ;
113
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
114
+ expect ( additionalUserInfo . isNewUser ) . to . be . true ;
83
115
} ) ;
84
116
85
117
it ( 'for new users by toolkit response kind' , ( ) => {
86
- expect ( fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK , kind : 'identitytoolkit#SignupNewUserResponse' } ) ) ! . isNewUser ) . to . be . true ;
118
+ const idResponse = idTokenResponse ( {
119
+ providerId : ProviderId . FACEBOOK ,
120
+ kind : IdTokenResponseKind . SignupNewUser
121
+ } ) ;
122
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
123
+ expect ( additionalUserInfo . isNewUser ) . to . be . true ;
87
124
} ) ;
88
125
89
126
it ( 'for old users' , ( ) => {
90
- expect ( fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . FACEBOOK } ) ) ! . isNewUser ) . to . be . false ;
127
+ const idResponse = idTokenResponse ( { providerId : ProviderId . FACEBOOK } ) ;
128
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
129
+ expect ( additionalUserInfo . isNewUser ) . to . be . false ;
91
130
} ) ;
92
131
} ) ;
93
132
94
133
describe ( 'creates generic AdditionalUserInfo' , ( ) => {
95
-
96
134
it ( 'for custom auth' , ( ) => {
97
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . CUSTOM , rawUserInfo} ) ) ! ;
98
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
135
+ const idResponse = idTokenResponse ( {
136
+ providerId : ProviderId . CUSTOM ,
137
+ rawUserInfo : rawUserInfoWithLogin
138
+ } ) ;
139
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
140
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
99
141
expect ( isNewUser ) . to . be . false ;
100
142
expect ( providerId ) . to . be . null ;
101
143
expect ( username ) . to . be . null ;
102
144
expect ( profile ) . to . eq ( profile ) ;
103
145
} ) ;
104
146
105
147
it ( 'for anonymous auth' , ( ) => {
106
- const additionalUserInfo = fromIdTokenResponse ( idTokenResponse ( { providerId : ProviderId . ANONYMOUS , rawUserInfo} ) ) ! ;
107
- const { isNewUser, providerId, username, profile} = additionalUserInfo ;
148
+ const idResponse = idTokenResponse ( {
149
+ providerId : ProviderId . ANONYMOUS ,
150
+ rawUserInfo : rawUserInfoWithLogin
151
+ } ) ;
152
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ! ;
153
+ const { isNewUser, providerId, username, profile } = additionalUserInfo ;
108
154
expect ( isNewUser ) . to . be . false ;
109
155
expect ( providerId ) . to . be . null ;
110
156
expect ( username ) . to . be . null ;
111
157
expect ( profile ) . to . eq ( profile ) ;
112
158
} ) ;
113
159
/*
160
+ Uncomment this once ID token parsing is built
114
161
it('for missing provider IDs in response but not in token', () => {
115
162
const additionalUserInfo = fromIdTokenResponse(idTokenResponse({rawUserInfo}))!;
116
163
const {isNewUser, providerId, username, profile} = additionalUserInfo;
@@ -124,29 +171,21 @@ describe('core/user/additional_user_info', () => {
124
171
125
172
describe ( 'returns null' , ( ) => {
126
173
it ( 'for missing provider IDs' , ( ) => {
127
- expect ( fromIdTokenResponse ( idTokenResponse ( { } ) ) ) . to . be . null ;
174
+ const idResponse = idTokenResponse ( { } ) ;
175
+ const additionalUserInfo = fromIdTokenResponse ( idResponse ) ;
176
+ expect ( additionalUserInfo ) . to . be . null ;
128
177
} ) ;
129
178
} ) ;
130
179
} ) ;
131
180
} ) ;
132
181
133
- function idTokenResponse ( partial : PartialIdTokenResponse ) : IdTokenResponse {
182
+ function idTokenResponse ( partial : Partial < IdTokenResponse > ) : IdTokenResponse {
134
183
return {
135
184
idToken : 'Parsing logic not implemented' ,
136
- refreshToken : ' Doesn\ 't matter' ,
137
- expiresIn : ' Doesn\ 't matter' ,
138
- localId : ' Doesn\ 't matter' ,
139
- kind : 'Not a new user response ' ,
185
+ refreshToken : " Doesn't matter" ,
186
+ expiresIn : " Doesn't matter" ,
187
+ localId : " Doesn't matter" ,
188
+ kind : IdTokenResponseKind . CreateAuthUri ,
140
189
...partial
141
190
} ;
142
191
}
143
-
144
- interface PartialIdTokenResponse {
145
- providerId ?: ProviderId ;
146
- isNewUser ?: boolean ;
147
- rawUserInfo ?: string ;
148
- screenName ?: string | null ;
149
- displayName ?: string | null ;
150
- photoUrl ?: string | null ;
151
- kind ?: string ;
152
- }
0 commit comments