feat: 🎸 Added getter for logged in personal number (#39)

This commit is contained in:
Johan Öbrink 2021-01-18 11:42:56 +01:00 committed by GitHub
parent db0faf28bf
commit a860d1208c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 55 additions and 1 deletions

View File

@ -85,6 +85,34 @@ describe('api', () => {
done()
})
})
it('remembers used personal number', async () => {
const data = {
token: '9462cf77-bde9-4029-bb41-e599f3094613',
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
}
response.json.mockResolvedValue(data)
const personalNumber = 'my personal number'
await api.login(personalNumber)
expect(api.getPersonalNumber()).toEqual(personalNumber)
})
it('forgets used personal number if sign in is unsuccessful', async (done) => {
const data = {
token: '9462cf77-bde9-4029-bb41-e599f3094613',
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
}
response.json.mockResolvedValue(data)
response.text.mockResolvedValueOnce('ERROR')
const personalNumber = 'my personal number'
const status = await api.login(personalNumber)
status.on('ERROR', () => {
expect(api.getPersonalNumber()).toEqual(undefined)
done()
})
})
})
describe('#logout', () => {
it('clears cookies', async () => {
@ -102,6 +130,21 @@ describe('api', () => {
await api.logout()
expect(api.isLoggedIn).toBe(false)
})
it('forgets personalNumber', async () => {
const data = {
token: '9462cf77-bde9-4029-bb41-e599f3094613',
order: '5fe57e4c-9ad2-4b52-b794-48adef2f6663',
}
response.json.mockResolvedValue(data)
const pnr = 'my personal number'
await api.login(pnr)
api.isLoggedIn = true
await api.logout()
expect(api.getPersonalNumber()).toEqual(undefined)
})
})
describe('fake', () => {
it('sets fake mode for the correct pnr:s', async () => {

View File

@ -25,6 +25,8 @@ import * as fake from './fakeData'
export class Api extends EventEmitter {
private fetch: Fetcher
private personalNumber?: string
private session?: RequestInit
private clearCookies: AsyncishFunction
@ -39,6 +41,10 @@ export class Api extends EventEmitter {
this.clearCookies = clearCookies
}
getPersonalNumber() {
return this.personalNumber
}
getSessionCookie() {
return this.session?.headers?.Cookie
}
@ -63,6 +69,9 @@ export class Api extends EventEmitter {
const ticketResponse = await this.fetch('auth-ticket', ticketUrl)
const ticket: AuthTicket = await ticketResponse.json()
// login was initiated - store personal number
this.personalNumber = personalNumber
const status = checkStatus(this.fetch, ticket)
status.on('OK', async () => {
const cookieUrl = routes.loginCookie
@ -70,6 +79,7 @@ export class Api extends EventEmitter {
const cookie = cookieResponse.headers.get('set-cookie') || ''
this.setSessionCookie(cookie)
})
status.on('ERROR', () => { this.personalNumber = undefined })
return status
}
@ -162,8 +172,9 @@ export class Api extends EventEmitter {
async logout() {
this.isFake = false
this.session = undefined
await this.clearCookies()
this.personalNumber = undefined
this.isLoggedIn = false
try { await this.clearCookies() } catch (_) { /* do nothing */ }
this.emit('logout')
}
}