mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-18 18:46:19 +08:00
feat(server): handle workspace doc updates (#11937)
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,42 @@
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
|
||||
import { faker } from '@faker-js/faker';
|
||||
import type { Snapshot } from '@prisma/client';
|
||||
|
||||
import { Mocker } from './factory';
|
||||
|
||||
export type MockDocSnapshotInput = {
|
||||
user: { id: string };
|
||||
workspaceId: string;
|
||||
docId?: string;
|
||||
blob?: Uint8Array;
|
||||
};
|
||||
|
||||
export type MockedDocSnapshot = Snapshot;
|
||||
|
||||
export class MockDocSnapshot extends Mocker<
|
||||
MockDocSnapshotInput,
|
||||
MockedDocSnapshot
|
||||
> {
|
||||
override async create(input: MockDocSnapshotInput) {
|
||||
if (!input.blob) {
|
||||
const snapshot = await readFile(
|
||||
path.join(import.meta.dirname, '../__fixtures__/test-doc.snapshot.bin')
|
||||
);
|
||||
input.blob = snapshot;
|
||||
}
|
||||
const snapshot = await this.db.snapshot.create({
|
||||
data: {
|
||||
id: input.docId ?? faker.string.nanoid(),
|
||||
workspaceId: input.workspaceId,
|
||||
blob: input.blob,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
createdBy: input.user.id,
|
||||
updatedBy: input.user.id,
|
||||
},
|
||||
});
|
||||
return snapshot;
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ export * from './workspace-user.mock';
|
||||
|
||||
import { MockCopilotProvider } from './copilot.mock';
|
||||
import { MockDocMeta } from './doc-meta.mock';
|
||||
import { MockDocSnapshot } from './doc-snapshot.mock';
|
||||
import { MockEventBus } from './eventbus.mock';
|
||||
import { MockMailer } from './mailer.mock';
|
||||
import { MockJobQueue } from './queue.mock';
|
||||
@@ -22,6 +23,7 @@ export const Mockers = {
|
||||
WorkspaceUser: MockWorkspaceUser,
|
||||
UserSettings: MockUserSettings,
|
||||
DocMeta: MockDocMeta,
|
||||
DocSnapshot: MockDocSnapshot,
|
||||
};
|
||||
|
||||
export { MockCopilotProvider, MockEventBus, MockJobQueue, MockMailer };
|
||||
|
||||
@@ -5,6 +5,7 @@ import { JobQueue } from '../../base';
|
||||
|
||||
export class MockJobQueue {
|
||||
add = Sinon.createStubInstance(JobQueue).add.resolves();
|
||||
remove = Sinon.createStubInstance(JobQueue).remove.resolves();
|
||||
|
||||
last<Job extends JobName>(name: Job): { name: Job; payload: Jobs[Job] } {
|
||||
const addJobName = this.add.lastCall?.args[0];
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import { readFile } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
|
||||
import { faker } from '@faker-js/faker';
|
||||
import type { Prisma, Workspace } from '@prisma/client';
|
||||
import { omit } from 'lodash-es';
|
||||
@@ -7,6 +10,7 @@ import { Mocker } from './factory';
|
||||
|
||||
export type MockWorkspaceInput = Prisma.WorkspaceCreateInput & {
|
||||
owner?: { id: string };
|
||||
snapshot?: Uint8Array | true;
|
||||
};
|
||||
|
||||
export type MockedWorkspace = Workspace;
|
||||
@@ -14,8 +18,18 @@ export type MockedWorkspace = Workspace;
|
||||
export class MockWorkspace extends Mocker<MockWorkspaceInput, MockedWorkspace> {
|
||||
override async create(input?: Partial<MockWorkspaceInput>) {
|
||||
const owner = input?.owner;
|
||||
input = omit(input, 'owner');
|
||||
return await this.db.workspace.create({
|
||||
if (input?.snapshot === true) {
|
||||
const snapshot = await readFile(
|
||||
path.join(
|
||||
import.meta.dirname,
|
||||
'../__fixtures__/test-root-doc.snapshot.bin'
|
||||
)
|
||||
);
|
||||
input.snapshot = snapshot;
|
||||
}
|
||||
const snapshot = input?.snapshot;
|
||||
input = omit(input, 'owner', 'snapshot');
|
||||
const workspace = await this.db.workspace.create({
|
||||
data: {
|
||||
name: faker.animal.cat(),
|
||||
public: false,
|
||||
@@ -31,5 +45,21 @@ export class MockWorkspace extends Mocker<MockWorkspaceInput, MockedWorkspace> {
|
||||
: undefined,
|
||||
},
|
||||
});
|
||||
|
||||
// create a rootDoc snapshot
|
||||
if (snapshot) {
|
||||
await this.db.snapshot.create({
|
||||
data: {
|
||||
id: workspace.id,
|
||||
workspaceId: workspace.id,
|
||||
blob: snapshot,
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date(),
|
||||
createdBy: owner?.id,
|
||||
updatedBy: owner?.id,
|
||||
},
|
||||
});
|
||||
}
|
||||
return workspace;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user