fix: sync refactor — fix 6 bugs + cache refresh na sync

- setDeletedAt update nu ook updatedAt (bug 2)
- getAllMeasurements filtert deletedAt IS NULL, nieuwe getAllMeasurementsForSync voor sync
- mergeMeasurements detecteert server deleted:true → deletedAt (bug 1)
- syncAll: pull-push split met remoteUpdatedMap, geen double-push (bug 3)
- hard delete alleen na API-succes (bug 4)
- DashboardScreen: refreshCache() na syncAll zodat UI niet op Laden blijft hangen
- deleteMeasurement() dead code verwijderd (bug 5)
- tests: 3 nieuwe testcases voor deleted → deletedAt mapping, 15/15 pass
This commit is contained in:
eddy 2026-07-25 15:33:22 +02:00
commit 4c34dff629
13 changed files with 405 additions and 62 deletions

View file

@ -81,7 +81,7 @@ describe('database', () => {
expect(result!.id).toBe(mockMeasurement.id)
})
it('setDeletedAt sets the deletedAt timestamp', async () => {
it('setDeletedAt sets both deletedAt and updatedAt timestamps', async () => {
db.runAsync.mockResolvedValue(undefined)
await initDatabase()
await setDeletedAt(mockMeasurement.id)
@ -89,5 +89,7 @@ describe('database', () => {
expect.stringContaining('UPDATE measurements SET deletedAt'),
expect.arrayContaining([mockMeasurement.id])
)
const args = (db.runAsync as jest.Mock).mock.calls.slice(-1)[0]
expect(args[1][0]).toBe(args[1][1])
})
})

View file

@ -53,4 +53,24 @@ describe('mergeMeasurements', () => {
const r = mergeMeasurements([local], [remote])
expect(r[0].deletedAt).toBeUndefined()
})
it('server deleted flag mapped to deletedAt when remote wins', () => {
const local = make({ updatedAt: '2024-06-01T08:00:00.000Z' })
const remote: any = { ...make({ updatedAt: '2024-06-03T08:00:00.000Z' }), deleted: true }
const r = mergeMeasurements([local], [remote])
expect(r[0].deletedAt).toBe('2024-06-03T08:00:00.000Z')
})
it('server deleted flag ignored when local wins', () => {
const local = make({ updatedAt: '2024-06-05T08:00:00.000Z' })
const remote: any = { ...make({ updatedAt: '2024-06-03T08:00:00.000Z' }), deleted: true }
const r = mergeMeasurements([local], [remote])
expect(r[0].deletedAt).toBeUndefined()
})
it('server deleted flag works with no local record', () => {
const remote: any = { ...make({ id: 'r1', updatedAt: '2024-06-03T08:00:00.000Z' }), deleted: true }
const r = mergeMeasurements([], [remote])
expect(r[0].deletedAt).toBe('2024-06-03T08:00:00.000Z')
})
})