fix(y-indexeddb): test cases (#2832)

This commit is contained in:
Alex Yang authored and GitHub committed 2023-06-20 22:01:47 +08:00
1 parent 3755661ff6
commit 58fd3857c0
5 files changed
+88 -59

No files matched your search

@@ -29,12 +29,12 @@ function initEmptyPage(page: Page) {
title: new page.Text(''),
});
const surfaceBlockId = page.addBlock('affine:surface', {}, pageBlockId);
const frameBLockId = page.addBlock('affine:frame', {}, pageBlockId);
const paragraphBlockId = page.addBlock('affine:paragraph', {}, frameBLockId);
const frameBlockId = page.addBlock('affine:note', {}, pageBlockId);
const paragraphBlockId = page.addBlock('affine:paragraph', {}, frameBlockId);
return {
pageBlockId,
surfaceBlockId,
frameBLockId,
frameBlockId,
paragraphBlockId,
};
}
@@ -91,7 +91,7 @@ describe('indexeddb provider', () => {
const page = workspace.createPage({ id: 'page0' });
await page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
await new Promise(resolve => setTimeout(resolve, 1000));
@@ -110,8 +110,20 @@ describe('indexeddb provider', () => {
data.updates.forEach(({ update }) => {
Workspace.Y.applyUpdate(testWorkspace.doc, update);
});
const binary = Workspace.Y.encodeStateAsUpdate(testWorkspace.doc);
expect(binary).toEqual(Workspace.Y.encodeStateAsUpdate(workspace.doc));
const subPage = testWorkspace.doc.spaces.get('space:page0');
{
assertExists(subPage);
await store.get(subPage.guid);
const data = (await store.get(subPage.guid)) as
| WorkspacePersist
| undefined;
assertExists(data);
await testWorkspace.getPage('page0')?.waitForLoaded();
data.updates.forEach(({ update }) => {
Workspace.Y.applyUpdate(subPage, update);
});
}
expect(workspace.doc.toJSON()).toEqual(testWorkspace.doc.toJSON());
}
const secondWorkspace = new Workspace({
@@ -122,9 +134,10 @@ describe('indexeddb provider', () => {
const provider2 = createIndexedDBProvider(secondWorkspace.doc, rootDBName);
provider2.connect();
await provider2.whenSynced;
expect(Workspace.Y.encodeStateAsUpdate(secondWorkspace.doc)).toEqual(
Workspace.Y.encodeStateAsUpdate(workspace.doc)
);
const page = secondWorkspace.getPage('page0');
assertExists(page);
await page.waitForLoaded();
expect(workspace.doc.toJSON()).toEqual(secondWorkspace.doc.toJSON());
});
test('disconnect suddenly', async () => {
@@ -150,7 +163,7 @@ describe('indexeddb provider', () => {
const page = workspace.createPage({ id: 'page0' });
await page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
const frameId = page.addBlock('affine:note', {}, pageBlockId);
page.addBlock('affine:paragraph', {}, frameId);
}
{
@@ -218,7 +231,7 @@ describe('indexeddb provider', () => {
const page = workspace.createPage({ id: 'page0' });
await page.waitForLoaded();
const pageBlockId = page.addBlock('affine:page', { title: '' });
const frameId = page.addBlock('affine:frame', {}, pageBlockId);
const frameId = page.addBlock('affine:note', {}, pageBlockId);
for (let i = 0; i < 99; i++) {
page.addBlock('affine:paragraph', {}, frameId);
}
+8 -3
View File
@@ -12,9 +12,9 @@ import type {
BlockSuiteBinaryDB,
IndexedDBProvider,
WorkspaceMilestone,
} from './shared';
import { dbVersion, DEFAULT_DB_NAME, upgradeDB } from './shared';
import { tryMigrate } from './utils';
} from './shared.js';
import { dbVersion, DEFAULT_DB_NAME, upgradeDB } from './shared.js';
import { tryMigrate } from './utils.js';
const indexeddbOrigin = Symbol('indexeddb-provider-origin');
const snapshotOrigin = Symbol('snapshot-origin');
@@ -268,6 +268,10 @@ export const createIndexedDBProvider = (
doc.on('update', createOrGetHandleUpdate(id, doc));
doc.on('destroy', createOrGetHandleDestroy(id, doc));
doc.on('subdocs', createOrGetHandleSubDocs(id, doc));
doc.subdocs.forEach(doc => {
trackDoc(doc.guid, doc);
});
}
function unTrackDoc(id: string, doc: Doc) {
@@ -343,6 +347,7 @@ export const createIndexedDBProvider = (
});
connected = true;
trackDoc(doc.guid, doc);
// only the runs `await` below, otherwise the logic is incorrect
const db = await dbPromise;
if (migrate) {