snapshot of https://github.com/tldraw/tldraw.git (main, 2026-09-23; blobs > 131072B omitted)
Some checks failed
Deploy analytics worker / Deploy analytics worker to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
i18n upload strings / Upload latest strings (push) Failing after 1s
Deploy bemo / Deploy bemo to ${{ (github.ref == 'refs/heads/bemo-production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Failing after 1s
Deploy grafana resources / ${{ github.event_name == 'push' && 'Deploy grafana resources' || 'Validate grafana resources (dry run)' }} (push) Failing after 0s
End to end tests (dotcom) / Check for relevant changes (push) Failing after 0s
End to end tests (examples) / Check for relevant changes (push) Failing after 0s
End to end tests (mermaid readability) / Check for relevant changes (push) Failing after 1s
End to end tests (perf) / Check for relevant changes (push) Failing after 0s
Publish editor extensions / Publish editor extensions (push) Failing after 1s
Publish SDK packages / Remove the publish-packages label (push) Has been skipped
Checks / Tests & checks (push) Has been cancelled
Checks / Build all projects (push) Has been cancelled
Deploy templates / Deploy templates (push) Has been cancelled
End to end tests (dotcom) / End to end tests (dotcom) (push) Has been cancelled
End to end tests (mermaid readability) / End to end tests (mermaid readability) (push) Has been cancelled
End to end tests (perf) / End to end tests (perf) (push) Has been cancelled
Deploy .com / Deploy dotcom to ${{ (github.ref == 'refs/heads/production' && 'production') || (github.ref == 'refs/heads/main' && 'staging') || 'preview' }} (push) Has been cancelled
End to end tests (examples) / End to end tests (examples) (push) Has been cancelled
Publish SDK packages / Publish SDK packages (push) Has been cancelled
Publish SDK packages / Tell user released version (push) Has been cancelled
Publish SDK packages / Publishes code templates to separate repositories (push) Has been cancelled
Publish SDK packages / Deploys the template demos with the new SDK version (push) Has been cancelled

This commit is contained in:
upstream-mirror
2026-09-23 16:12:52 +05:00
commit a774ac673a
4541 changed files with 770499 additions and 0 deletions

View File

@@ -0,0 +1,102 @@
import { describe, expect, it, vi } from 'vitest'
import { DurableObjectSqliteSyncWrapper } from './DurableObjectSqliteSyncWrapper'
// A minimal fake of the Durable Object storage API: `sql.exec` records each
// call and returns an iterable cursor with `toArray()`, and `transactionSync`
// just invokes the callback.
function makeFakeStorage(rows: unknown[] = []) {
const calls: { sql: string; bindings: unknown[] }[] = []
const storage = {
sql: {
exec(sql: string, ...bindings: unknown[]) {
calls.push({ sql, bindings })
return {
[Symbol.iterator]() {
return rows[Symbol.iterator]()
},
toArray() {
return [...rows]
},
}
},
},
transactionSync: vi.fn(<T>(callback: () => T): T => callback()),
}
return { storage, calls }
}
describe('DurableObjectSqliteSyncWrapper', () => {
describe('prepare', () => {
it('[DO1] iterate re-executes the stored SQL with the given bindings on every call', () => {
const { storage, calls } = makeFakeStorage([{ id: 1 }, { id: 2 }])
const wrapper = new DurableObjectSqliteSyncWrapper(storage)
const stmt = wrapper.prepare<{ id: number }, [number]>('SELECT id FROM test WHERE value > ?')
expect(calls).toHaveLength(0) // nothing executed at prepare time
expect([...stmt.iterate(100)]).toEqual([{ id: 1 }, { id: 2 }])
expect([...stmt.iterate(200)]).toEqual([{ id: 1 }, { id: 2 }])
expect(calls).toEqual([
{ sql: 'SELECT id FROM test WHERE value > ?', bindings: [100] },
{ sql: 'SELECT id FROM test WHERE value > ?', bindings: [200] },
])
})
it('[DO1] all re-executes the stored SQL with the given bindings and returns toArray()', () => {
const { storage, calls } = makeFakeStorage([{ name: 'alice' }])
const wrapper = new DurableObjectSqliteSyncWrapper(storage)
const stmt = wrapper.prepare<{ name: string }, [number]>('SELECT name FROM test WHERE id = ?')
expect(stmt.all(1)).toEqual([{ name: 'alice' }])
expect(stmt.all(2)).toEqual([{ name: 'alice' }])
expect(calls).toEqual([
{ sql: 'SELECT name FROM test WHERE id = ?', bindings: [1] },
{ sql: 'SELECT name FROM test WHERE id = ?', bindings: [2] },
])
})
it('[DO1] run re-executes the stored SQL with the given bindings', () => {
const { storage, calls } = makeFakeStorage()
const wrapper = new DurableObjectSqliteSyncWrapper(storage)
const stmt = wrapper.prepare<void, [number, string]>(
'INSERT INTO test (id, name) VALUES (?, ?)'
)
stmt.run(1, 'alice')
stmt.run(2, 'bob')
expect(calls).toEqual([
{ sql: 'INSERT INTO test (id, name) VALUES (?, ?)', bindings: [1, 'alice'] },
{ sql: 'INSERT INTO test (id, name) VALUES (?, ?)', bindings: [2, 'bob'] },
])
})
})
describe('exec', () => {
it('[DO1] forwards to sql.exec', () => {
const { storage, calls } = makeFakeStorage()
const wrapper = new DurableObjectSqliteSyncWrapper(storage)
wrapper.exec('CREATE TABLE test (id INTEGER PRIMARY KEY)')
expect(calls).toEqual([{ sql: 'CREATE TABLE test (id INTEGER PRIMARY KEY)', bindings: [] }])
})
})
describe('transaction', () => {
it('[DO1] delegates to transactionSync and returns its result', () => {
const { storage } = makeFakeStorage()
const wrapper = new DurableObjectSqliteSyncWrapper(storage)
const callback = vi.fn(() => 'done')
const result = wrapper.transaction(callback)
expect(result).toBe('done')
expect(callback).toHaveBeenCalledTimes(1)
expect(storage.transactionSync).toHaveBeenCalledTimes(1)
expect(storage.transactionSync).toHaveBeenCalledWith(callback)
})
})
})