test: add local provider test

This commit is contained in:
alt0
2023-01-09 00:48:54 +08:00
parent 055b63382b
commit e1e1d0c964
24 changed files with 565 additions and 1506 deletions
+13 -7
View File
@@ -28,8 +28,18 @@ export class DataCenter {
static async init(debug: boolean): Promise<DataCenter> {
const dc = new DataCenter(debug);
// TODO: switch different provider
dc.registerProvider(new LocalProvider());
dc.registerProvider(new AffineProvider());
dc.registerProvider(
new LocalProvider({
logger: dc._logger,
workspaces: dc._workspaces.createScope(),
})
);
dc.registerProvider(
new AffineProvider({
logger: dc._logger,
workspaces: dc._workspaces.createScope(),
})
);
return dc;
}
@@ -42,11 +52,7 @@ export class DataCenter {
if (!this._defaultProvider) {
this._defaultProvider = provider;
}
// inject data in provider
provider.inject({
logger: this._logger,
workspaces: this._workspaces.createScope(),
});
provider.init();
this.providerMap.set(provider.id, provider);
}
@@ -11,6 +11,7 @@ import {
updateWorkspace,
} from './apis/workspace';
import { BaseProvider } from '../base';
import type { ProviderConstructorParams } from '../base';
import { User, Workspace as WS, WorkspaceMeta } from '../../types';
import { Workspace } from '@blocksuite/store';
import { BlockSchema } from '@blocksuite/blocks/models';
@@ -32,8 +33,8 @@ export class AffineProvider extends BaseProvider {
private _wsMap: Map<string, WebsocketProvider> = new Map();
private _idbMap: Map<string, IndexedDBProvider> = new Map();
constructor() {
super();
constructor(params: ProviderConstructorParams) {
super(params);
}
override async init() {
+11 -8
View File
@@ -2,20 +2,23 @@ import { BlobStorage, Workspace } from '@blocksuite/store';
import { Logger, User, Workspace as WS, WorkspaceMeta } from '../types';
import type { WorkspacesScope } from '../workspaces';
const defaultLogger = () => {
return;
};
export interface ProviderConstructorParams {
logger?: Logger;
workspaces: WorkspacesScope;
}
export class BaseProvider {
public readonly id: string = 'base';
protected _workspaces!: WorkspacesScope;
protected _logger!: Logger;
protected _blobs!: BlobStorage;
public inject({
logger,
workspaces,
}: {
logger: Logger;
workspaces: WorkspacesScope;
}) {
this._logger = logger;
public constructor({ logger, workspaces }: ProviderConstructorParams) {
this._logger = (logger || defaultLogger) as Logger;
this._workspaces = workspaces;
}
@@ -0,0 +1,49 @@
import { describe, test, expect } from 'vitest';
import { Workspaces } from '../../workspaces';
import { LocalProvider } from './local';
import 'fake-indexeddb/auto';
describe('local provider', () => {
const workspaces = new Workspaces();
const provider = new LocalProvider({
workspaces: workspaces.createScope(),
});
const workspaceName = 'workspace-test';
let workspaceId: string | undefined;
test('create workspace', async () => {
const w = await provider.createWorkspace({
name: workspaceName,
avatar: 'avatar-url-test',
});
workspaceId = w?.room;
expect(workspaces.workspaces.length).toEqual(1);
expect(workspaces.workspaces[0].name).toEqual(workspaceName);
});
test('workspace list cache', async () => {
const workspaces1 = new Workspaces();
const provider1 = new LocalProvider({
workspaces: workspaces1.createScope(),
});
await provider1.loadWorkspaces();
expect(workspaces1.workspaces.length).toEqual(1);
expect(workspaces1.workspaces[0].name).toEqual(workspaceName);
expect(workspaces1.workspaces[0].id).toEqual(workspaceId);
});
test('update workspace', async () => {
await provider.updateWorkspaceMeta(workspaceId!, {
name: '1111',
});
expect(workspaces.workspaces[0].name).toEqual('1111');
});
test('delete workspace', async () => {
expect(workspaces.workspaces.length).toEqual(1);
await provider.deleteWorkspace(workspaces.workspaces[0].id);
expect(workspaces.workspaces.length).toEqual(0);
});
});
@@ -1,4 +1,5 @@
import { BaseProvider } from '../base';
import type { ProviderConstructorParams } from '../base';
import { varStorage as storage } from 'lib0/storage';
import { Workspace as WS, WorkspaceMeta } from '../../types';
import { Workspace, uuidv4 } from '@blocksuite/store';
@@ -12,8 +13,8 @@ export class LocalProvider extends BaseProvider {
public id = 'local';
private _idbMap: Map<string, IndexedDBProvider> = new Map();
constructor() {
super();
constructor(params: ProviderConstructorParams) {
super(params);
this.loadWorkspaces();
}
+1 -1
View File
@@ -1,4 +1,4 @@
import { getLogger } from 'src';
import { getLogger } from '../logger';
export type Workspace = {
name: string;
@@ -20,7 +20,7 @@ export class Workspaces extends Observable<'change'> {
private _workspacesMap = new Map<string, Workspace>();
get workspaces(): Workspace[] {
return Object.values(this._workspacesMap);
return Array.from(this._workspacesMap.values());
}
find(workspaceId: string) {