@@ -30,11 +30,7 @@ import { browserLocalPersistence } from '../persistence/browser';
30
30
import { inMemoryPersistence } from '../persistence/in_memory' ;
31
31
import { PersistenceUserManager } from '../persistence/persistence_user_manager' ;
32
32
import { ClientPlatform , getClientVersion } from '../util/version' ;
33
- import {
34
- DEFAULT_API_HOST ,
35
- DEFAULT_API_SCHEME ,
36
- initializeAuth
37
- } from './auth_impl' ;
33
+ import { DEFAULT_API_HOST , DEFAULT_API_SCHEME , initializeAuth } from './auth_impl' ;
38
34
39
35
use ( sinonChai ) ;
40
36
@@ -163,54 +159,90 @@ describe('AuthImpl', () => {
163
159
} ) ;
164
160
165
161
it ( 'onAuthStateChange triggers on log in' , async ( ) => {
166
- await auth . updateCurrentUser ( null ) ;
167
162
auth . onAuthStateChanged ( callback ) ;
163
+ await auth . updateCurrentUser ( null ) ;
164
+ callback . resetHistory ( ) ;
168
165
await auth . updateCurrentUser ( user ) ;
169
- expect ( callback ) . to . have . been . calledTwice ;
166
+ expect ( callback ) . to . have . been . calledWith ( user ) ;
170
167
} ) ;
171
168
172
169
it ( 'onAuthStateChange triggers on log out' , async ( ) => {
173
- await auth . updateCurrentUser ( user ) ;
174
170
auth . onAuthStateChanged ( callback ) ;
171
+ await auth . updateCurrentUser ( user ) ;
172
+ callback . resetHistory ( ) ;
175
173
await auth . updateCurrentUser ( null ) ;
176
- expect ( callback ) . to . have . been . calledTwice ;
174
+ expect ( callback ) . to . have . been . calledWith ( null ) ;
177
175
} ) ;
178
176
179
177
it ( 'onIdTokenChange triggers on log in' , async ( ) => {
180
- await auth . updateCurrentUser ( null ) ;
181
178
auth . onIdTokenChange ( callback ) ;
179
+ await auth . updateCurrentUser ( null ) ;
180
+ callback . resetHistory ( ) ;
182
181
await auth . updateCurrentUser ( user ) ;
183
- expect ( callback ) . to . have . been . calledTwice ;
182
+ expect ( callback ) . to . have . been . calledWith ( user ) ;
184
183
} ) ;
185
184
186
185
it ( 'onIdTokenChange triggers on log out' , async ( ) => {
187
- await auth . updateCurrentUser ( user ) ;
188
186
auth . onIdTokenChange ( callback ) ;
187
+ await auth . updateCurrentUser ( user ) ;
188
+ callback . resetHistory ( ) ;
189
189
await auth . updateCurrentUser ( null ) ;
190
- expect ( callback ) . to . have . been . calledTwice ;
190
+ expect ( callback ) . to . have . been . calledWith ( null ) ;
191
191
} ) ;
192
192
193
193
it ( 'onAuthStateChange does not trigger for user props change' , async ( ) => {
194
- await auth . updateCurrentUser ( user ) ;
195
194
auth . onAuthStateChanged ( callback ) ;
195
+ await auth . updateCurrentUser ( user ) ;
196
+ callback . resetHistory ( ) ;
196
197
user . refreshToken = 'hey look I changed' ;
197
198
await auth . updateCurrentUser ( user ) ;
198
- expect ( callback ) . to . have . been . calledOnce ;
199
+ expect ( callback ) . not . to . have . been . called ;
199
200
} ) ;
200
201
201
202
it ( 'onIdTokenChange triggers for user props change' , async ( ) => {
202
- await auth . updateCurrentUser ( user ) ;
203
203
auth . onIdTokenChange ( callback ) ;
204
+ await auth . updateCurrentUser ( user ) ;
205
+ callback . resetHistory ( ) ;
204
206
user . refreshToken = 'hey look I changed' ;
205
207
await auth . updateCurrentUser ( user ) ;
206
- expect ( callback ) . to . have . been . calledTwice ;
208
+ expect ( callback ) . to . have . been . calledWith ( user ) ;
207
209
} ) ;
208
210
209
211
it ( 'onAuthStateChange triggers if uid changes' , async ( ) => {
210
- await auth . updateCurrentUser ( user ) ;
211
212
auth . onAuthStateChanged ( callback ) ;
212
- await auth . updateCurrentUser ( testUser ( 'different-uid' ) ) ;
213
- expect ( callback ) . to . have . been . calledTwice ;
213
+ await auth . updateCurrentUser ( user ) ;
214
+ callback . resetHistory ( ) ;
215
+ const newUser = testUser ( 'different-uid' ) ;
216
+ await auth . updateCurrentUser ( newUser ) ;
217
+ expect ( callback ) . to . have . been . calledWith ( newUser ) ;
218
+ } ) ;
219
+
220
+ it ( 'onAuthStateChange works for multiple listeners' , async ( ) => {
221
+ const cb1 = sinon . spy ( ) ;
222
+ const cb2 = sinon . spy ( ) ;
223
+ auth . onAuthStateChanged ( cb1 ) ;
224
+ auth . onAuthStateChanged ( cb2 ) ;
225
+ await auth . updateCurrentUser ( null ) ;
226
+ cb1 . resetHistory ( ) ;
227
+ cb2 . resetHistory ( ) ;
228
+
229
+ await auth . updateCurrentUser ( user ) ;
230
+ expect ( cb1 ) . to . have . been . calledWith ( user ) ;
231
+ expect ( cb2 ) . to . have . been . calledWith ( user ) ;
232
+ } ) ;
233
+
234
+ it ( 'onIdTokenChange works for multiple listeners' , async ( ) => {
235
+ const cb1 = sinon . spy ( ) ;
236
+ const cb2 = sinon . spy ( ) ;
237
+ auth . onIdTokenChange ( cb1 ) ;
238
+ auth . onIdTokenChange ( cb2 ) ;
239
+ await auth . updateCurrentUser ( null ) ;
240
+ cb1 . resetHistory ( ) ;
241
+ cb2 . resetHistory ( ) ;
242
+
243
+ await auth . updateCurrentUser ( user ) ;
244
+ expect ( cb1 ) . to . have . been . calledWith ( user ) ;
245
+ expect ( cb2 ) . to . have . been . calledWith ( user ) ;
214
246
} ) ;
215
247
} ) ;
216
248
} ) ;
0 commit comments