Deel geen antwoorden meer over een identiteitswissel heen
De verzoekdeler uit de vorige commit houdt een antwoord driehonderd milliseconde vast om de opstartcascade op te vangen. Uitloggen herlaadt de pagina echter niet, dus die tabel overleeft een sessiewissel: binnen dat venster zou de volgende gebruiker het antwoord van de vorige kunnen krijgen. Met de hand is dat nauwelijks te bereiken, maar een verzoekcache die een identiteitswissel overleeft is hoe dan ook fout. De tabel wordt nu gewist bij uitloggen, bij aanmelden en zodra de sessie verloopt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
|
||||
import { apiGet, apiPost } from './client'
|
||||
import { apiGet, apiPost, vergeetGedeeldeVerzoeken } from './client'
|
||||
|
||||
function antwoord(data: unknown) {
|
||||
return {
|
||||
@@ -85,6 +85,35 @@ describe('apiGet deelt verzoeken', () => {
|
||||
expect(fetchSpy).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
|
||||
it('deelt niets meer over een identiteitswissel heen', async () => {
|
||||
// Uitloggen herlaadt de pagina niet, dus de tabel leeft door. Zonder deze
|
||||
// reset zou de volgende gebruiker binnen het deelvenster het antwoord van
|
||||
// de vorige kunnen krijgen.
|
||||
const fetchSpy = vi.fn()
|
||||
.mockResolvedValueOnce(antwoord({ items: ['werkruimte van A'] }))
|
||||
.mockResolvedValueOnce(antwoord({ items: ['werkruimte van B'] }))
|
||||
vi.stubGlobal('fetch', fetchSpy)
|
||||
|
||||
const vanA = await apiGet<{ items: string[] }>('/api/v1/projects')
|
||||
vergeetGedeeldeVerzoeken()
|
||||
const vanB = await apiGet<{ items: string[] }>('/api/v1/projects')
|
||||
|
||||
expect(fetchSpy).toHaveBeenCalledTimes(2)
|
||||
expect(vanA.items).toEqual(['werkruimte van A'])
|
||||
expect(vanB.items).toEqual(['werkruimte van B'])
|
||||
})
|
||||
|
||||
it('wist de tabel ook wanneer de sessie verloopt', async () => {
|
||||
const fetchSpy = vi.fn().mockResolvedValue(antwoord({ items: [] }))
|
||||
vi.stubGlobal('fetch', fetchSpy)
|
||||
|
||||
await apiGet('/api/v1/projects')
|
||||
window.dispatchEvent(new CustomEvent('geointel:session-expired'))
|
||||
await apiGet('/api/v1/projects')
|
||||
|
||||
expect(fetchSpy).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
|
||||
it('laat een mislukt verzoek niet in de tabel achter', async () => {
|
||||
const fetchSpy = vi.fn()
|
||||
.mockRejectedValueOnce(new Error('netwerk weg'))
|
||||
|
||||
Reference in New Issue
Block a user