UNPKG

@bsv/wallet-toolbox

Version:

BRC100 conforming wallet, wallet storage and wallet signer components

98 lines (88 loc) 2.9 kB
import { _tu, logger, TestWalletNoSetup } from '../utils/TestUtilsWalletStorage' import { LocalKVStore } from '@bsv/sdk' describe('LocalKVStore tests', () => { jest.setTimeout(99999999) const testName = () => expect.getState().currentTestName || 'test' let ctxs: TestWalletNoSetup[] = [] const context = 'test kv store' const key1 = 'key1' const key2 = 'key2' beforeEach(async () => { ctxs = [await _tu.createLegacyWalletSQLiteCopy(`${testName()}`)] }) afterEach(async () => { for (const ctx of ctxs) { await ctx.storage.destroy() } }) test('0 get non-existent', async () => { for (const { storage, wallet } of ctxs) { const kvStore = new LocalKVStore(wallet, context, false, undefined, true) const value = await kvStore.get(key1) expect(value).toBeUndefined() } }) test('1 set get', async () => { for (const { storage, wallet } of ctxs) { const kvStore = new LocalKVStore(wallet, context, false, undefined, true) await kvStore.set(key1, 'value1') const value = await kvStore.get(key1) expect(value).toBe('value1') } }) test('3 set x 4 get', async () => { for (const { storage, wallet } of ctxs) { const kvStore = new LocalKVStore(wallet, context, false, undefined, true) const promises = [ kvStore.set(key1, 'value1'), kvStore.set(key1, 'value2'), kvStore.set(key1, 'value3'), kvStore.set(key1, 'value4') ] await Promise.all(promises) const value = await kvStore.get(key1) expect(value).toBe('value4') } }) test('4 promise test', async () => { jest.useFakeTimers() let resolveNewLock: () => void = () => {} const newLock = new Promise<void>(resolve => { resolveNewLock = resolve }) const t = Date.now() setTimeout(() => { resolveNewLock() }, 1000) jest.advanceTimersByTime(1000) await newLock const elapsed = Date.now() - t logger(`Elapsed time: ${elapsed} ms`) expect(elapsed).toBeGreaterThanOrEqual(1000) jest.useRealTimers() }) test('5 set x 4 get set x 4 get', async () => { for (const { storage, wallet } of ctxs) { const kvStore = new LocalKVStore(wallet, context, false, undefined, true) let v4: string | undefined async function captureValue(): Promise<void> { v4 = await kvStore.get(key1) } const promises = [ kvStore.set(key1, 'value1'), kvStore.set(key1, 'value2'), kvStore.set(key1, 'value3'), kvStore.set(key1, 'value4'), captureValue(), kvStore.set(key1, 'value5'), kvStore.set(key1, 'value6'), kvStore.set(key1, 'value7'), kvStore.set(key1, 'value8') ] await Promise.all(promises) const v8 = await kvStore.get(key1) expect(v4).toBe('value4') expect(v8).toBe('value8') } }) })