Clean up user data a tad

This commit is contained in:
Jon Staab
2025-11-25 14:19:11 -08:00
parent 250f5c772f
commit 92af4dcfde
6 changed files with 63 additions and 237 deletions
+1 -145
View File
@@ -1,16 +1,6 @@
import {TrustedEvent} from "@welshman/util"
import {Repository} from "@welshman/net"
import {get} from "svelte/store"
import {afterEach, beforeEach, describe, expect, it, vi} from "vitest"
import {
deriveEvents,
deriveIsDeleted,
getter,
synced,
localStorageProvider,
throttled,
withGetter,
} from "../src/index"
import {getter, synced, localStorageProvider, throttled, withGetter} from "../src/index"
// Mock localStorage
const localStorageMock = (() => {
@@ -139,138 +129,4 @@ describe("Store utilities", () => {
expect(mockFn).toHaveBeenLastCalledWith(3)
})
})
describe("custom", () => {
it("should handle updates correctly", () => {
const mockFn = vi.fn()
const store = custom<number>(set => {
set(0)
return () => {}
})
store.subscribe(mockFn)
store.set(1)
store.update(n => n + 1)
expect(mockFn).toHaveBeenCalledTimes(3) // Initial + set + update
expect(store.get()).toBe(2)
})
})
describe("Event-related stores", () => {
const mockRepository = {
query: vi.fn(),
isDeleted: vi.fn(),
isDeletedByAddress: vi.fn(),
on: vi.fn(),
off: vi.fn(),
} satisfies Partial<Repository>
beforeEach(() => {
vi.clearAllMocks()
})
describe("deriveEvents", () => {
it("should derive events from repository", () => {
const mockEvent = {id: "1", content: "test"} as TrustedEvent
mockRepository.query.mockReturnValue([mockEvent])
const store = deriveEvents(mockRepository as any, {
filters: [],
})
const mockFn = vi.fn()
store.subscribe(mockFn)
expect(mockRepository.query).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith([mockEvent])
})
})
describe("deriveEventsMapped", () => {
it("should map events to items", async () => {
const mockEvent = {id: "1", content: "test"} as TrustedEvent
mockRepository.query.mockReturnValue([mockEvent])
const store = deriveEventsMapped(mockRepository as any, {
filters: [],
eventToItem: event => ({id: event.id, mapped: true}),
itemToEvent: item => ({id: item.id, content: ""}) as TrustedEvent,
})
const mockFn = vi.fn()
store.subscribe(mockFn)
expect(mockRepository.query).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith([{id: "1", mapped: true}])
})
it("should handle async eventToItem mapping", async () => {
const mockEvent = {id: "1", content: "test"} as TrustedEvent
mockRepository.query.mockReturnValue([mockEvent])
const store = deriveEventsMapped(mockRepository as any, {
filters: [],
eventToItem: async event => ({id: event.id, mapped: true}),
itemToEvent: item => ({id: item.id, content: ""}) as TrustedEvent,
})
const mockFn = vi.fn()
store.subscribe(mockFn)
// Wait for async operations to complete
await vi.runAllTimersAsync()
expect(mockRepository.query).toHaveBeenCalled()
expect(mockFn).toHaveBeenCalledWith([{id: "1", mapped: true}])
})
it("should handle repository updates", () => {
const mockEvent = {id: "1", content: "test"} as TrustedEvent
mockRepository.query.mockReturnValue([mockEvent])
const store = deriveEventsMapped(mockRepository as any, {
filters: [{}],
eventToItem: event => ({id: event.id, mapped: true}),
itemToEvent: item => ({id: item.id, content: ""}) as TrustedEvent,
})
const mockFn = vi.fn()
store.subscribe(mockFn)
const [[_, callback]] = mockRepository.on.mock.calls
callback({
added: [{id: "2"} as TrustedEvent],
removed: new Set([mockEvent.id]),
})
vi.advanceTimersByTime(300) // Wait for batch delay
expect(mockFn).toHaveBeenLastCalledWith([{id: "2", mapped: true}])
})
})
describe("deriveIsDeleted", () => {
it("should track deletion status", () => {
const mockEvent = {id: "1"} as TrustedEvent
mockRepository.isDeleted.mockReturnValue(false)
const store = deriveIsDeleted(mockRepository as any, mockEvent)
const mockFn = vi.fn()
store.subscribe(mockFn)
expect(mockRepository.isDeleted).toHaveBeenCalledWith(mockEvent)
expect(mockFn).toHaveBeenCalledWith(false)
const [[_, callback]] = mockRepository.on.mock.calls
callback()
expect(mockRepository.isDeleted).toHaveBeenCalledWith(mockEvent)
expect(mockFn).toHaveBeenCalledWith(false)
})
})
})
})