From 3a79346ce0a3e2b4b7b4bef0bad1f6be8fa82596 Mon Sep 17 00:00:00 2001 From: Alex Yang Date: Mon, 25 Sep 2023 11:49:23 -0500 Subject: [PATCH] test: workspace provider (#4497) --- .../infra/src/__tests__/workspace.spec.ts | 55 ++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) diff --git a/packages/infra/src/__tests__/workspace.spec.ts b/packages/infra/src/__tests__/workspace.spec.ts index f0a52c6595..8bf8406906 100644 --- a/packages/infra/src/__tests__/workspace.spec.ts +++ b/packages/infra/src/__tests__/workspace.spec.ts @@ -1,10 +1,13 @@ import { AffineSchemas } from '@blocksuite/blocks/models'; +import type { DocProviderCreator } from '@blocksuite/store'; import { Schema, Workspace } from '@blocksuite/store'; -import { expect, test } from 'vitest'; +import { getDefaultStore } from 'jotai/vanilla'; +import { beforeEach, expect, test } from 'vitest'; import { disablePassiveProviders, enablePassiveProviders, + getActiveBlockSuiteWorkspaceAtom, getWorkspace, INTERNAL_BLOCKSUITE_HASH_MAP, workspacePassiveEffectWeakMap, @@ -14,10 +17,42 @@ const schema = new Schema(); schema.register(AffineSchemas); +const activeWorkspaceEnabled = new Set(); +const passiveWorkspaceEnabled = new Set(); + +beforeEach(() => { + activeWorkspaceEnabled.clear(); +}); + const createWorkspace = (id: string) => { + const activeCreator: DocProviderCreator = () => ({ + flavour: 'active', + active: true, + sync() { + activeWorkspaceEnabled.add(id); + }, + get whenReady(): Promise { + return Promise.resolve(); + }, + }); + const passiveCreator: DocProviderCreator = () => ({ + flavour: 'passive', + passive: true, + connect() { + passiveWorkspaceEnabled.add(id); + }, + disconnect() { + passiveWorkspaceEnabled.delete(id); + }, + get connected() { + return false; + }, + }); + return new Workspace({ id, schema, + providerCreators: [activeCreator, passiveCreator], }); }; @@ -35,3 +70,21 @@ test('workspace passive provider should enable correctly', () => { disablePassiveProviders(getWorkspace('1')); expect(workspacePassiveEffectWeakMap.get(getWorkspace('1'))).toBe(undefined); }); + +test('workspace provider should initialize correctly', async () => { + INTERNAL_BLOCKSUITE_HASH_MAP.set('1', createWorkspace('1')); + { + enablePassiveProviders(getWorkspace('1')); + expect(activeWorkspaceEnabled.size).toBe(0); + expect(passiveWorkspaceEnabled.size).toBe(1); + disablePassiveProviders(getWorkspace('1')); + expect(activeWorkspaceEnabled.size).toBe(0); + expect(passiveWorkspaceEnabled.size).toBe(0); + } + { + const atom = getActiveBlockSuiteWorkspaceAtom('1'); + await getDefaultStore().get(atom); + expect(activeWorkspaceEnabled.size).toBe(1); + expect(passiveWorkspaceEnabled.size).toBe(0); + } +});