feat: 🎸 Added getter for logged in personal number (#39)
This commit is contained in:
parent
db0faf28bf
commit
a860d1208c
|
@ -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 () => {
|
||||
|
|
13
lib/api.ts
13
lib/api.ts
|
@ -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')
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue