Files
speckle-server/packages/objectloader2/src/operations/indexedDatabase.spec.ts
T
2025-04-10 13:54:08 +01:00

64 lines
2.0 KiB
TypeScript

import { describe, expect, test } from 'vitest'
import IndexedDatabase from './indexedDatabase.js'
import { IDBFactory, IDBKeyRange } from 'fake-indexeddb'
import { Item } from '../types/types.js'
import BufferQueue from '../helpers/bufferQueue.js'
describe('database cache', () => {
test('write single item to queue use getItem', async () => {
const i: Item = { baseId: 'id', base: { id: 'id', speckle_type: 'type' } }
const database = new IndexedDatabase({
indexedDB: new IDBFactory(),
keyRange: IDBKeyRange,
maxCacheBatchWriteWait: 200
})
await database.add(i)
await database.disposeAsync()
const x = await database.getItem({ id: 'id' })
expect(x).toMatchSnapshot()
})
test('write two items to queue use getItem', async () => {
const i1: Item = { baseId: 'id1', base: { id: 'id', speckle_type: 'type' } }
const i2: Item = { baseId: 'id2', base: { id: 'id', speckle_type: 'type' } }
const database = new IndexedDatabase({
indexedDB: new IDBFactory(),
keyRange: IDBKeyRange
})
await database.add(i1)
await database.add(i2)
await database.disposeAsync()
const x1 = await database.getItem({ id: i1.baseId })
expect(x1).toMatchSnapshot()
const x2 = await database.getItem({ id: i2.baseId })
expect(x2).toMatchSnapshot()
})
test('write two items to queue use processItems', async () => {
const i1: Item = { baseId: 'id1', base: { id: 'id', speckle_type: 'type' } }
const i2: Item = { baseId: 'id2', base: { id: 'id', speckle_type: 'type' } }
const database = new IndexedDatabase({
indexedDB: new IDBFactory(),
keyRange: IDBKeyRange
})
await database.add(i1)
await database.add(i2)
await database.disposeAsync()
const foundItems = new BufferQueue<Item>()
const notFoundItems = new BufferQueue<string>()
await database.processItems({
ids: [i1.baseId, i2.baseId],
foundItems,
notFoundItems
})
expect(foundItems.values()).toMatchSnapshot()
expect(notFoundItems.values()).toMatchSnapshot()
})
})