mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-12 20:26:04 +08:00
fix(server): use client doc title when server title is empty (#11210)
close CLOUD-185
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
import type { WorkspaceDoc } from '@prisma/client';
|
||||||
|
import { Prisma } from '@prisma/client';
|
||||||
|
|
||||||
|
import { Mocker } from './factory';
|
||||||
|
|
||||||
|
export type MockDocMetaInput = Prisma.WorkspaceDocUncheckedCreateInput;
|
||||||
|
|
||||||
|
export type MockedDocMeta = WorkspaceDoc;
|
||||||
|
|
||||||
|
export class MockDocMeta extends Mocker<MockDocMetaInput, MockedDocMeta> {
|
||||||
|
override async create(input: MockDocMetaInput) {
|
||||||
|
return await this.db.workspaceDoc.create({
|
||||||
|
data: input,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ export * from './user.mock';
|
|||||||
export * from './workspace.mock';
|
export * from './workspace.mock';
|
||||||
export * from './workspace-user.mock';
|
export * from './workspace-user.mock';
|
||||||
|
|
||||||
|
import { MockDocMeta } from './doc-meta.mock';
|
||||||
import { MockMailer } from './mailer.mock';
|
import { MockMailer } from './mailer.mock';
|
||||||
import { MockJobQueue } from './queue.mock';
|
import { MockJobQueue } from './queue.mock';
|
||||||
import { MockTeamWorkspace } from './team-workspace.mock';
|
import { MockTeamWorkspace } from './team-workspace.mock';
|
||||||
@@ -18,6 +19,7 @@ export const Mockers = {
|
|||||||
TeamWorkspace: MockTeamWorkspace,
|
TeamWorkspace: MockTeamWorkspace,
|
||||||
WorkspaceUser: MockWorkspaceUser,
|
WorkspaceUser: MockWorkspaceUser,
|
||||||
UserSettings: MockUserSettings,
|
UserSettings: MockUserSettings,
|
||||||
|
DocMeta: MockDocMeta,
|
||||||
};
|
};
|
||||||
|
|
||||||
export { MockJobQueue, MockMailer };
|
export { MockJobQueue, MockMailer };
|
||||||
|
|||||||
@@ -587,3 +587,31 @@ test('should send mention email by user setting', async t => {
|
|||||||
// should not send mention email
|
// should not send mention email
|
||||||
t.is(module.mails.count('Mention'), mentionMailCount);
|
t.is(module.mails.count('Mention'), mentionMailCount);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should send mention email with use client doc title if server doc title is empty', async t => {
|
||||||
|
const { notificationService, module } = t.context;
|
||||||
|
const docId = randomUUID();
|
||||||
|
await module.create(Mockers.DocMeta, {
|
||||||
|
workspaceId: workspace.id,
|
||||||
|
docId,
|
||||||
|
// mock empty title
|
||||||
|
title: '',
|
||||||
|
});
|
||||||
|
const notification = await notificationService.createMention({
|
||||||
|
userId: member.id,
|
||||||
|
body: {
|
||||||
|
workspaceId: workspace.id,
|
||||||
|
createdByUserId: owner.id,
|
||||||
|
doc: {
|
||||||
|
id: docId,
|
||||||
|
title: 'doc-title-1',
|
||||||
|
blockId: 'block-id-1',
|
||||||
|
mode: DocMode.page,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
});
|
||||||
|
t.truthy(notification);
|
||||||
|
const mentionMail = module.mails.last('Mention');
|
||||||
|
t.is(mentionMail.to, member.email);
|
||||||
|
t.is(mentionMail.props.doc.title, 'doc-title-1');
|
||||||
|
});
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ export class NotificationService {
|
|||||||
input.body.workspaceId,
|
input.body.workspaceId,
|
||||||
input.body.doc.id
|
input.body.doc.id
|
||||||
);
|
);
|
||||||
const title = doc?.title ?? input.body.doc.title;
|
const title = doc?.title || input.body.doc.title;
|
||||||
const url = this.url.link(
|
const url = this.url.link(
|
||||||
generateDocPath({
|
generateDocPath({
|
||||||
workspaceId: input.body.workspaceId,
|
workspaceId: input.body.workspaceId,
|
||||||
|
|||||||
Reference in New Issue
Block a user