mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-29 13:27:31 -07:00
Fix bug
This commit is contained in:
parent
420848f16c
commit
43db18ee44
2 changed files with 26 additions and 6 deletions
|
@ -611,19 +611,21 @@ function incNotesCount(user: IUser) {
|
||||||
async function extractMentionedUsers(tokens: ReturnType<typeof parse>): Promise<IUser[]> {
|
async function extractMentionedUsers(tokens: ReturnType<typeof parse>): Promise<IUser[]> {
|
||||||
if (tokens == null) return [];
|
if (tokens == null) return [];
|
||||||
|
|
||||||
const mentionTokens = unique(
|
const mentionTokens = tokens
|
||||||
tokens
|
.filter(t => t.type == 'mention') as TextElementMention[];
|
||||||
.filter(t => t.type == 'mention') as TextElementMention[]
|
|
||||||
);
|
|
||||||
|
|
||||||
const mentionedUsers = unique(
|
let mentionedUsers =
|
||||||
erase(null, await Promise.all(mentionTokens.map(async m => {
|
erase(null, await Promise.all(mentionTokens.map(async m => {
|
||||||
try {
|
try {
|
||||||
return await resolveUser(m.username, m.host);
|
return await resolveUser(m.username, m.host);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
})))
|
})));
|
||||||
|
|
||||||
|
// Drop duplicate users
|
||||||
|
mentionedUsers = mentionedUsers.filter((u, i, self) =>
|
||||||
|
i === self.findIndex(u2 => u._id.equals(u2._id))
|
||||||
);
|
);
|
||||||
|
|
||||||
return mentionedUsers;
|
return mentionedUsers;
|
||||||
|
|
18
test/api.ts
18
test/api.ts
|
@ -508,6 +508,24 @@ describe('API', () => {
|
||||||
}, me);
|
}, me);
|
||||||
expect(res).have.status(400);
|
expect(res).have.status(400);
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
it('同じユーザーに複数メンションしても内部的にまとめられる', async(async () => {
|
||||||
|
const alice = await signup({ username: 'alice' });
|
||||||
|
const bob = await signup({ username: 'bob' });
|
||||||
|
const post = {
|
||||||
|
text: '@bob @bob @bob yo'
|
||||||
|
};
|
||||||
|
|
||||||
|
const res = await request('/notes/create', post, alice);
|
||||||
|
|
||||||
|
expect(res).have.status(200);
|
||||||
|
expect(res.body).be.a('object');
|
||||||
|
expect(res.body).have.property('createdNote');
|
||||||
|
expect(res.body.createdNote).have.property('text').eql(post.text);
|
||||||
|
|
||||||
|
const noteDoc = await db.get('notes').findOne({ _id: res.body.createdNote.id });
|
||||||
|
expect(noteDoc.mentions.map((id: any) => id.toString())).eql([bob.id.toString()]);
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('notes/show', () => {
|
describe('notes/show', () => {
|
||||||
|
|
Loading…
Reference in a new issue