Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions public/mobile-app/src/lib/address.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
export type AddressOrigin = 'user' | 'api-particulier' | 'cleared'

export class Address {
constructor(
private _city: string = '',
Expand Down
114 changes: 101 additions & 13 deletions public/mobile-app/src/lib/state/User.svelte.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,20 @@ describe('/lib/state/User.svelte.ts', () => {
// Cleanup
spyUpdateIdentity.mockRestore()
})
test('should reconstruct a user identity from localstorage', async () => {
// Given
const newMockUserIdentity = JSON.parse(JSON.stringify(mockUserIdentity))
newMockUserIdentity.preferred_username = 'CUSTOM'
newMockUserIdentity.email = '[email protected]'
localStorage.setItem('user_identity', JSON.stringify(newMockUserIdentity))

// When
await userStore.login(mockUserInfo)

// Then
expect(userStore.connected?.identity?.preferred_username).toEqual('CUSTOM')
expect(userStore.connected?.identity?.email).toEqual('[email protected]')
})
test('should reconstruct a user identity from localstorage - with user address', async () => {
// Given
localStorage.setItem('user_identity', JSON.stringify(mockUserIdentity))
Expand All @@ -58,7 +72,7 @@ describe('/lib/state/User.svelte.ts', () => {
test('should reconstruct a user identity from localstorage - with api-particulier address', async () => {
// Given
const newMockUserIdentity = JSON.parse(JSON.stringify(mockUserIdentity))
newMockUserIdentity.address_origin = 'api-particulier'
newMockUserIdentity.dataDetails.address.origin = 'api-particulier'
localStorage.setItem('user_identity', JSON.stringify(newMockUserIdentity))
const spySetAddressFromAPIParticulier = vi
.spyOn(User.prototype, 'setAddressFromAPIParticulier')
Expand All @@ -76,7 +90,7 @@ describe('/lib/state/User.svelte.ts', () => {
test('should reconstruct a user identity from localstorage - with cleared address', async () => {
// Given
const newMockUserIdentity = JSON.parse(JSON.stringify(mockUserIdentity))
newMockUserIdentity.address_origin = 'cleared'
newMockUserIdentity.dataDetails.address.origin = 'cleared'
localStorage.setItem('user_identity', JSON.stringify(newMockUserIdentity))
const spySetAddressFromAPIParticulier = vi
.spyOn(User.prototype, 'setAddressFromAPIParticulier')
Expand All @@ -94,7 +108,7 @@ describe('/lib/state/User.svelte.ts', () => {
test('should reconstruct a user identity from localstorage - with empty address', async () => {
// Given
const newMockUserIdentity = JSON.parse(JSON.stringify(mockUserIdentity))
newMockUserIdentity.address_origin = undefined
newMockUserIdentity.dataDetails.address.origin = undefined
localStorage.setItem('user_identity', JSON.stringify(newMockUserIdentity))
const spySetAddressFromAPIParticulier = vi
.spyOn(User.prototype, 'setAddressFromAPIParticulier')
Expand Down Expand Up @@ -179,7 +193,22 @@ describe('/lib/state/User.svelte.ts', () => {
expect(isLoggedIn).toBeTruthy()
expect(spyParseJwt).toHaveBeenCalledWith('some data')
expect(userStore.connected?.identity?.address).toBeUndefined() // No `user_identity` in the localStorage
expect(userStore.connected?.identity?.address_origin).toBeUndefined() // No `user_identity` in the localStorage
expect(
userStore.connected?.identity?.dataDetails.address.origin
).toBeUndefined() // No `user_identity` in the localStorage
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined() // No `user_identity` in the localStorage
expect(
userStore.connected?.identity?.dataDetails.preferred_username.origin
).toBeUndefined() // No `user_identity` in the localStorage
expect(
userStore.connected?.identity?.dataDetails.preferred_username.lastUpdate
).toBeUndefined() // No `user_identity` in the localStorage
expect(userStore.connected?.identity?.dataDetails.email.origin).toBeUndefined() // No `user_identity` in the localStorage
expect(
userStore.connected?.identity?.dataDetails.email.lastUpdate
).toBeUndefined() // No `user_identity` in the localStorage
})
test("should detect that we're not logged in", async () => {
// Given
Expand Down Expand Up @@ -207,8 +236,14 @@ describe('/lib/state/User.svelte.ts', () => {

// Then
expect(userStore.connected?.identity?.email).toEqual('[email protected]')
expect(userStore.connected?.identity?.dataDetails.email.origin).toEqual('user')
expect(
userStore.connected?.identity?.dataDetails.email.lastUpdate
).not.toBeUndefined()
const parsed = JSON.parse(localStorage.getItem('user_identity') || '{}')
expect(parsed?.email).toEqual('[email protected]')
expect(parsed?.dataDetails.email.origin).toEqual('user')
expect(parsed?.dataDetails.email.lastUpdate).not.toBeUndefined()
})
test('should not allow setting an empty email on the identity', async () => {
// Given
Expand All @@ -228,6 +263,8 @@ describe('/lib/state/User.svelte.ts', () => {
)
const parsed = JSON.parse(localStorage.getItem('user_identity') || '{}')
expect(parsed?.email).toEqual('[email protected]')
expect(parsed?.dataDetails.email.origin).toEqual('user')
expect(parsed?.dataDetails.email.lastUpdate).toBeUndefined()
})
})

Expand All @@ -243,8 +280,16 @@ describe('/lib/state/User.svelte.ts', () => {

// Then
expect(userStore.connected?.identity?.preferred_username).toEqual('Dupont')
expect(
userStore.connected?.identity?.dataDetails.preferred_username.origin
).toEqual('user')
expect(
userStore.connected?.identity?.dataDetails.preferred_username.lastUpdate
).not.toBeUndefined()
const parsed = JSON.parse(localStorage.getItem('user_identity') || '{}')
expect(parsed?.preferred_username).toEqual('Dupont')
expect(parsed?.dataDetails.preferred_username.origin).toEqual('user')
expect(parsed?.dataDetails.preferred_username.lastUpdate).not.toBeUndefined()
})
test('should properly set an empty preferred username on the identity and save the identity to localStorage', async () => {
// Given
Expand All @@ -261,6 +306,8 @@ describe('/lib/state/User.svelte.ts', () => {
expect(userStore.connected?.identity?.preferred_username).toBeUndefined()
const parsed = JSON.parse(localStorage.getItem('user_identity') || '{}')
expect(parsed?.preferred_username).toBeUndefined()
expect(parsed?.dataDetails.preferred_username.origin).toEqual('cleared')
expect(parsed?.dataDetails.preferred_username.lastUpdate).not.toBeUndefined()
})
})

Expand All @@ -277,10 +324,16 @@ describe('/lib/state/User.svelte.ts', () => {

// Then
expect(userStore.connected?.identity?.address?.city).toEqual('some random city')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).not.toBeUndefined()
const parsed = JSON.parse(localStorage.getItem('user_identity') || '{}')
expect(parsed?.address._city).toEqual('some random city')
expect(parsed?.address_origin).toEqual('user')
expect(parsed?.dataDetails.address.origin).toEqual('user')
expect(parsed?.dataDetails.address.lastUpdate).not.toBeUndefined()
})
})

Expand All @@ -299,7 +352,12 @@ describe('/lib/state/User.svelte.ts', () => {
// @ts-expect-error
expect(globalThis.fetchSpy).not.toHaveBeenCalled()
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should not call BAN if address from api-particulier is not base64 encoded', async () => {
// Given
Expand All @@ -315,7 +373,12 @@ describe('/lib/state/User.svelte.ts', () => {
// @ts-expect-error
expect(globalThis.fetchSpy).not.toHaveBeenCalled()
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should not call BAN if address from api-particulier is not a json base64 encoded', async () => {
// Given
Expand All @@ -331,7 +394,12 @@ describe('/lib/state/User.svelte.ts', () => {
// @ts-expect-error
expect(globalThis.fetchSpy).not.toHaveBeenCalled()
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should not call BAN if address from api-particulier is an empty json base64 encoded', async () => {
localStorage.setItem('user_identity', JSON.stringify(mockUserIdentity))
Expand All @@ -346,7 +414,12 @@ describe('/lib/state/User.svelte.ts', () => {
// @ts-expect-error
expect(globalThis.fetchSpy).not.toHaveBeenCalled()
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should not set address if BAN returns an error', async () => {
localStorage.setItem('user_identity', JSON.stringify(mockUserIdentity))
Expand All @@ -367,7 +440,12 @@ describe('/lib/state/User.svelte.ts', () => {
// Then
expect(spy).toHaveBeenCalledTimes(1)
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should not set address if BAN returns an empty list', async () => {
localStorage.setItem('user_identity', JSON.stringify(mockUserIdentity))
Expand All @@ -387,7 +465,12 @@ describe('/lib/state/User.svelte.ts', () => {
// Then
expect(spy).toHaveBeenCalledTimes(1)
expect(userStore.connected?.identity?.address?.city).toEqual('Paris')
expect(userStore.connected?.identity?.address_origin).toEqual('user')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'user'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).toBeUndefined()
})
test('should set address if BAN returns results', async () => {
localStorage.setItem('user_identity', JSON.stringify(mockUserIdentity))
Expand Down Expand Up @@ -437,7 +520,12 @@ describe('/lib/state/User.svelte.ts', () => {
// Then
expect(spy).toHaveBeenCalledTimes(1)
expect(userStore.connected?.identity?.address?.city).toEqual('Orléans')
expect(userStore.connected?.identity?.address_origin).toEqual('api-particulier')
expect(userStore.connected?.identity?.dataDetails.address.origin).toEqual(
'api-particulier'
)
expect(
userStore.connected?.identity?.dataDetails.address.lastUpdate
).not.toBeUndefined()
})
})

Expand Down
Loading