Clean up user data a tad
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user