Skip to content

Commit 57eb438

Browse files
committed
Update PersistenceUserManager tests.
1 parent 0773b5d commit 57eb438

File tree

1 file changed

+75
-6
lines changed

1 file changed

+75
-6
lines changed

packages-exp/auth-exp/src/core/persistence/persistence_user_manager.test.ts

Lines changed: 75 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,12 @@ import * as sinonChai from 'sinon-chai';
2323
import { testAuth, testUser, TestAuth } from '../../../test/helpers/mock_auth';
2424
import { UserImpl } from '../user/user_impl';
2525
import { _getInstance } from '../util/instantiator';
26-
import { PersistenceInternal, PersistenceType, StorageEventListener } from './';
26+
import {
27+
PersistenceInternal,
28+
PersistenceType,
29+
PersistenceValue,
30+
StorageEventListener
31+
} from './';
2732
import { inMemoryPersistence } from './in_memory';
2833
import { KeyName, PersistenceUserManager } from './persistence_user_manager';
2934

@@ -64,19 +69,78 @@ describe('core/persistence/persistence_user_manager', () => {
6469
expect(manager.persistence).to.eq(_getInstance(inMemoryPersistence));
6570
});
6671

67-
it('searches in order for a user', async () => {
72+
it('chooses the first one available', async () => {
6873
const a = makePersistence();
6974
const b = makePersistence();
7075
const c = makePersistence();
7176
const search = [a.persistence, b.persistence, c.persistence];
7277
const auth = await testAuth();
73-
b.stub._get.returns(Promise.resolve(testUser(auth, 'uid').toJSON()));
78+
a.stub._isAvailable.resolves(false);
79+
a.stub._get.onFirstCall().resolves(testUser(auth, 'uid').toJSON());
80+
b.stub._isAvailable.resolves(true);
7481

7582
const out = await PersistenceUserManager.create(auth, search);
83+
expect(a.stub._isAvailable).to.have.been.calledOnce;
84+
expect(b.stub._isAvailable).to.have.been.calledOnce;
85+
expect(c.stub._isAvailable).to.not.have.been.called;
86+
87+
// a should not be chosen since it is not available (despite having a user).
7688
expect(out.persistence).to.eq(b.persistence);
89+
});
90+
91+
it('searches in order for a user', async () => {
92+
const a = makePersistence();
93+
const b = makePersistence();
94+
const c = makePersistence();
95+
const search = [a.persistence, b.persistence, c.persistence];
96+
const auth = await testAuth();
97+
const user = testUser(auth, 'uid');
98+
a.stub._isAvailable.resolves(true);
99+
a.stub._get.resolves(user.toJSON());
100+
b.stub._get.resolves(testUser(auth, 'wrong-uid').toJSON());
101+
102+
const out = await PersistenceUserManager.create(auth, search);
77103
expect(a.stub._get).to.have.been.calledOnce;
78-
expect(b.stub._get).to.have.been.calledOnce;
104+
expect(b.stub._get).not.to.have.been.called;
79105
expect(c.stub._get).not.to.have.been.called;
106+
107+
expect(out.persistence).to.eq(a.persistence);
108+
expect((await out.getCurrentUser())!.uid).to.eq(user.uid);
109+
});
110+
111+
it('migrate found user to the selected persistence and clear others', async () => {
112+
const a = makePersistence();
113+
const b = makePersistence();
114+
const c = makePersistence();
115+
const search = [a.persistence, b.persistence, c.persistence];
116+
const auth = await testAuth();
117+
const user = testUser(auth, 'uid');
118+
a.stub._isAvailable.resolves(true);
119+
b.stub._get.resolves(user.toJSON());
120+
c.stub._get.resolves(testUser(auth, 'wrong-uid').toJSON());
121+
122+
let persistedUserInA: PersistenceValue | null = null;
123+
a.stub._set.callsFake(async (_, value) => {
124+
persistedUserInA = value;
125+
});
126+
a.stub._get.callsFake(async () => persistedUserInA);
127+
128+
const out = await PersistenceUserManager.create(auth, search);
129+
expect(a.stub._set).to.have.been.calledOnceWith(
130+
'firebase:authUser:test-api-key:test-app',
131+
user.toJSON()
132+
);
133+
expect(b.stub._set).to.not.have.been.called;
134+
expect(c.stub._set).to.not.have.been.called;
135+
expect(b.stub._remove).to.have.been.calledOnceWith(
136+
'firebase:authUser:test-api-key:test-app'
137+
);
138+
expect(c.stub._remove).to.have.been.calledOnceWith(
139+
'firebase:authUser:test-api-key:test-app'
140+
);
141+
142+
expect(out.persistence).to.eq(a.persistence);
143+
expect((await out.getCurrentUser())!.uid).to.eq(user.uid);
80144
});
81145

82146
it('uses default user key if none provided', async () => {
@@ -99,13 +163,17 @@ describe('core/persistence/persistence_user_manager', () => {
99163
);
100164
});
101165

102-
it('returns zeroth persistence if all else fails', async () => {
166+
it('returns in-memory persistence if all else fails', async () => {
103167
const a = makePersistence();
104168
const b = makePersistence();
105169
const c = makePersistence();
106170
const search = [a.persistence, b.persistence, c.persistence];
171+
a.stub._isAvailable.resolves(false);
172+
b.stub._isAvailable.resolves(false);
173+
c.stub._isAvailable.resolves(false);
174+
107175
const out = await PersistenceUserManager.create(auth, search);
108-
expect(out.persistence).to.eq(a.persistence);
176+
expect(out.persistence).to.eq(_getInstance(inMemoryPersistence));
109177
expect(a.stub._get).to.have.been.calledOnce;
110178
expect(b.stub._get).to.have.been.calledOnce;
111179
expect(c.stub._get).to.have.been.called;
@@ -118,6 +186,7 @@ describe('core/persistence/persistence_user_manager', () => {
118186

119187
beforeEach(async () => {
120188
const { persistence, stub } = makePersistence(PersistenceType.SESSION);
189+
stub._isAvailable.resolves(true);
121190
persistenceStub = stub;
122191
manager = await PersistenceUserManager.create(auth, [persistence]);
123192
});

0 commit comments

Comments
 (0)