Files
parenthese/backend/test/tree-visits.test.ts
T
IliesAllaliandClaude Opus 5.5 9c84bd0efc fix(visites): duree de conservation d'un an tenue, comptes supprimes anonymises
La purge des visites de plus d'un an ne passait qu'a l'ouverture de l'onglet
Visites par un administrateur : un arbre jamais consulte gardait tout. Elle
passe aussi a l'enregistrement d'une visite, au plus une fois par heure, pour
tous les arbres.

A la suppression d'un compte, ses visites d'autres arbres gardaient son
identifiant dans la cle du visiteur : elles restent comptees, sous une cle
anonyme.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 00:06:30 +02:00

35 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { describe, expect, it, vi } from 'vitest'
import { recordTreeVisit, VISIT_RETENTION_DAYS } from '../src/lib/tree-visits'
function fakeApp() {
return {
prisma: {
treeVisit: {
findFirst: vi.fn().mockResolvedValue(null),
create: vi.fn().mockResolvedValue({ id: 'v' }),
update: vi.fn(),
deleteMany: vi.fn().mockResolvedValue({ count: 0 }),
},
},
}
}
const request = { headers: { 'user-agent': 'Mozilla/5.0 (iPhone)' }, ip: '203.0.113.10', log: { warn: vi.fn() } }
describe('journal des visites', () => {
it('efface les visites de plus d’un an à l’enregistrement, au plus une fois par heure', async () => {
const app = fakeApp()
const before = Date.now()
await recordTreeVisit(app as never, request as never, 'tree-1', 'share', null)
await recordTreeVisit(app as never, request as never, 'tree-2', 'share', null)
expect(app.prisma.treeVisit.create).toHaveBeenCalledTimes(2)
expect(app.prisma.treeVisit.deleteMany).toHaveBeenCalledTimes(1)
const cutoff = app.prisma.treeVisit.deleteMany.mock.calls[0][0].where.createdAt.lt.getTime()
// Tous les arbres, pas seulement celui qu'on ouvre : un arbre qu'on ne rouvre plus est purgé aussi
expect(app.prisma.treeVisit.deleteMany.mock.calls[0][0].where).not.toHaveProperty('treeId')
expect(before - cutoff).toBeGreaterThanOrEqual(VISIT_RETENTION_DAYS * 24 * 60 * 60 * 1000 - 1000)
})
})