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()
|
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', () => {
|
describe('#logout', () => {
|
||||||
it('clears cookies', async () => {
|
it('clears cookies', async () => {
|
||||||
|
@ -102,6 +130,21 @@ describe('api', () => {
|
||||||
await api.logout()
|
await api.logout()
|
||||||
expect(api.isLoggedIn).toBe(false)
|
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', () => {
|
describe('fake', () => {
|
||||||
it('sets fake mode for the correct pnr:s', async () => {
|
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 {
|
export class Api extends EventEmitter {
|
||||||
private fetch: Fetcher
|
private fetch: Fetcher
|
||||||
|
|
||||||
|
private personalNumber?: string
|
||||||
|
|
||||||
private session?: RequestInit
|
private session?: RequestInit
|
||||||
|
|
||||||
private clearCookies: AsyncishFunction
|
private clearCookies: AsyncishFunction
|
||||||
|
@ -39,6 +41,10 @@ export class Api extends EventEmitter {
|
||||||
this.clearCookies = clearCookies
|
this.clearCookies = clearCookies
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getPersonalNumber() {
|
||||||
|
return this.personalNumber
|
||||||
|
}
|
||||||
|
|
||||||
getSessionCookie() {
|
getSessionCookie() {
|
||||||
return this.session?.headers?.Cookie
|
return this.session?.headers?.Cookie
|
||||||
}
|
}
|
||||||
|
@ -63,6 +69,9 @@ export class Api extends EventEmitter {
|
||||||
const ticketResponse = await this.fetch('auth-ticket', ticketUrl)
|
const ticketResponse = await this.fetch('auth-ticket', ticketUrl)
|
||||||
const ticket: AuthTicket = await ticketResponse.json()
|
const ticket: AuthTicket = await ticketResponse.json()
|
||||||
|
|
||||||
|
// login was initiated - store personal number
|
||||||
|
this.personalNumber = personalNumber
|
||||||
|
|
||||||
const status = checkStatus(this.fetch, ticket)
|
const status = checkStatus(this.fetch, ticket)
|
||||||
status.on('OK', async () => {
|
status.on('OK', async () => {
|
||||||
const cookieUrl = routes.loginCookie
|
const cookieUrl = routes.loginCookie
|
||||||
|
@ -70,6 +79,7 @@ export class Api extends EventEmitter {
|
||||||
const cookie = cookieResponse.headers.get('set-cookie') || ''
|
const cookie = cookieResponse.headers.get('set-cookie') || ''
|
||||||
this.setSessionCookie(cookie)
|
this.setSessionCookie(cookie)
|
||||||
})
|
})
|
||||||
|
status.on('ERROR', () => { this.personalNumber = undefined })
|
||||||
|
|
||||||
return status
|
return status
|
||||||
}
|
}
|
||||||
|
@ -162,8 +172,9 @@ export class Api extends EventEmitter {
|
||||||
async logout() {
|
async logout() {
|
||||||
this.isFake = false
|
this.isFake = false
|
||||||
this.session = undefined
|
this.session = undefined
|
||||||
await this.clearCookies()
|
this.personalNumber = undefined
|
||||||
this.isLoggedIn = false
|
this.isLoggedIn = false
|
||||||
|
try { await this.clearCookies() } catch (_) { /* do nothing */ }
|
||||||
this.emit('logout')
|
this.emit('logout')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue