Files
AFFiNE-Mirror/packages/data-center/src/provider/local/local.spec.ts
2023-02-17 10:43:52 +08:00

60 lines
2.4 KiB
TypeScript

import { test, describe, expect } from 'vitest';
import { WorkspaceUnitCollection } from '../../workspace-unit-collection';
import { LocalProvider } from './local';
import { MessageCenter } from '../../message';
import 'fake-indexeddb/auto';
describe('local provider', () => {
const workspaceMetaCollection = new WorkspaceUnitCollection();
const provider = new LocalProvider({
workspaces: workspaceMetaCollection.createScope(),
messageCenter: new MessageCenter(),
});
const workspaceName = 'workspace-test';
let workspaceId: string | undefined;
test('create workspace', async () => {
const workspaceUnit = await provider.createWorkspace({
name: workspaceName,
});
workspaceId = workspaceUnit?.id;
expect(workspaceMetaCollection.workspaces.length).toEqual(1);
expect(workspaceMetaCollection.workspaces[0].name).toEqual(workspaceName);
});
test('workspace list cache', async () => {
const workspacesMetaCollection1 = new WorkspaceUnitCollection();
const provider1 = new LocalProvider({
workspaces: workspacesMetaCollection1.createScope(),
messageCenter: new MessageCenter(),
});
await provider1.loadWorkspaces();
expect(workspacesMetaCollection1.workspaces.length).toEqual(1);
expect(workspacesMetaCollection1.workspaces[0].name).toEqual(workspaceName);
expect(workspacesMetaCollection1.workspaces[0].id).toEqual(workspaceId);
});
test('update workspace', async () => {
await provider.updateWorkspaceMeta(workspaceId!, {
name: '1111',
});
expect(workspaceMetaCollection.workspaces[0].name).toEqual('1111');
});
test('delete workspace', async () => {
expect(workspaceMetaCollection.workspaces.length).toEqual(1);
/**
* FIXME
* If we don't wrap setTimeout,
* Running deleteWorkspace will crash the worker, and get error like next line:
* InvalidStateError: An operation was called on an object on which it is not allowed or at a time when it is not allowed. Also occurs if a request is made on a source object that has been deleted or removed. Use TransactionInactiveError or ReadOnlyError when possible, as they are more specific variations of InvalidStateError.
* */
setTimeout(async () => {
await provider.deleteWorkspace(workspaceMetaCollection.workspaces[0].id);
expect(workspaceMetaCollection.workspaces.length).toEqual(0);
}, 10);
});
});