Handle empty current logout state
This commit is contained in:
@@ -1902,13 +1902,37 @@ describe('session', () => {
|
|||||||
const rebased = rebasePersistedSession(
|
const rebased = rebasePersistedSession(
|
||||||
snapshot([fresh], 'alice-did'),
|
snapshot([fresh], 'alice-did'),
|
||||||
snapshot([loggedOut]),
|
snapshot([loggedOut]),
|
||||||
{type: 'logged-out-current-account'},
|
{type: 'logged-out-current-account', accountDid: 'alice-did'},
|
||||||
)
|
)
|
||||||
|
|
||||||
expect(rebased.accounts).toEqual([loggedOut])
|
expect(rebased.accounts).toEqual([loggedOut])
|
||||||
expect(rebased.currentAccount).toBeUndefined()
|
expect(rebased.currentAccount).toBeUndefined()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('keeps latest tokens when no current account is available to log out', () => {
|
||||||
|
const stale = makeAccount('https://alice.com', {
|
||||||
|
active: true,
|
||||||
|
did: 'alice-did',
|
||||||
|
handle: 'alice.test',
|
||||||
|
accessJwt: 'alice-access-jwt-1',
|
||||||
|
refreshJwt: 'alice-refresh-jwt-1',
|
||||||
|
})
|
||||||
|
const fresh = {
|
||||||
|
...stale,
|
||||||
|
accessJwt: 'alice-access-jwt-2',
|
||||||
|
refreshJwt: 'alice-refresh-jwt-2',
|
||||||
|
}
|
||||||
|
|
||||||
|
const rebased = rebasePersistedSession(
|
||||||
|
snapshot([fresh], 'alice-did'),
|
||||||
|
snapshot([stale]),
|
||||||
|
{type: 'logged-out-current-account'},
|
||||||
|
)
|
||||||
|
|
||||||
|
expect(rebased.accounts).toEqual([fresh])
|
||||||
|
expect(rebased.currentAccount).toBeUndefined()
|
||||||
|
})
|
||||||
|
|
||||||
it('clears only the explicitly logged-out account', () => {
|
it('clears only the explicitly logged-out account', () => {
|
||||||
const alice = makeAccount('https://alice.com', {
|
const alice = makeAccount('https://alice.com', {
|
||||||
active: true,
|
active: true,
|
||||||
|
|||||||
@@ -164,9 +164,7 @@ function getTokenWriteMode(
|
|||||||
): 'replace' | 'clear' | 'keep-latest' {
|
): 'replace' | 'clear' | 'keep-latest' {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
case 'logged-out-current-account':
|
case 'logged-out-current-account':
|
||||||
return action.accountDid === undefined || action.accountDid === did
|
return action.accountDid === did ? 'clear' : 'keep-latest'
|
||||||
? 'clear'
|
|
||||||
: 'keep-latest'
|
|
||||||
case 'logged-out-every-account':
|
case 'logged-out-every-account':
|
||||||
return 'clear'
|
return 'clear'
|
||||||
case 'received-session-event':
|
case 'received-session-event':
|
||||||
@@ -175,8 +173,8 @@ function getTokenWriteMode(
|
|||||||
return latestAccount.refreshJwt ? 'replace' : 'keep-latest'
|
return latestAccount.refreshJwt ? 'replace' : 'keep-latest'
|
||||||
}
|
}
|
||||||
if (action.sessionEvent === 'expired') {
|
if (action.sessionEvent === 'expired') {
|
||||||
return latestAccount.refreshJwt &&
|
if (!action.expiredRefreshJwt) return 'clear'
|
||||||
latestAccount.refreshJwt !== action.expiredRefreshJwt
|
return latestAccount.refreshJwt !== action.expiredRefreshJwt
|
||||||
? 'keep-latest'
|
? 'keep-latest'
|
||||||
: 'clear'
|
: 'clear'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user