fix(api): 🐛 Fix duplicated mentions, general refactorings

This commit is contained in:
Jesse Wierzbinski 2024-12-09 15:30:18 +01:00
parent 84a0a07ea6
commit e293bd280d
No known key found for this signature in database
5 changed files with 29 additions and 29 deletions

View file

@ -143,7 +143,7 @@ describe(meta.route, () => {
const objects = (await response.json()) as ApiNotification[];
expect(objects.length).toBe(2);
expect(objects.length).toBe(3);
// There should be no element with a status with id of timeline[0].id
expect(objects).not.toContainEqual(
expect.objectContaining({

View file

@ -153,25 +153,25 @@ export default apiRoute((app) =>
// Filters in `Filters` table have keyword in `FilterKeywords` table (use LIKE)
// Filters table has a userId and a context which is an array
sql`NOT EXISTS (
SELECT 1
FROM "Filters"
WHERE "Filters"."userId" = ${user.id}
AND "Filters"."filter_action" = 'hide'
AND EXISTS (
SELECT 1
FROM "FilterKeywords", "Notifications" as "n_inner", "Notes"
WHERE "FilterKeywords"."filterId" = "Filters"."id"
AND "n_inner"."noteId" = "Notes"."id"
AND "Notes"."content" LIKE
'%' || "FilterKeywords"."keyword" || '%'
AND "n_inner"."id" = "Notifications"."id"
)
AND "Filters"."context" @> ARRAY['notifications']
)`,
SELECT 1
FROM "Filters"
WHERE "Filters"."userId" = ${user.id}
AND "Filters"."filter_action" = 'hide'
AND EXISTS (
SELECT 1
FROM "FilterKeywords", "Notifications" as "n_inner", "Notes"
WHERE "FilterKeywords"."filterId" = "Filters"."id"
AND "n_inner"."noteId" = "Notes"."id"
AND "Notes"."content" LIKE
'%' || "FilterKeywords"."keyword" || '%'
AND "n_inner"."id" = "Notifications"."id"
)
AND "Filters"."context" @> ARRAY['notifications']
)`,
),
limit,
context.req.url,
user?.id,
user.id,
);
return context.json(

View file

@ -310,6 +310,9 @@ describe(meta.route, () => {
const object = (await response.json()) as ApiStatus;
expect(object.content).toBe(
`<p>Hello, <a class="u-url mention" rel="nofollow noopener noreferrer" target="_blank" href="${users[1].getUri()}">@${users[1].data.username}</a>!</p>`,
);
expect(object.mentions).toBeArrayOfSize(1);
expect(object.mentions[0]).toMatchObject({
id: users[1].id,

View file

@ -298,20 +298,17 @@ export const replaceTextMentions = (text: string, mentions: User[]): string => {
);
}
return finalText
.replace(
createRegExp(
return finalText.replace(
createRegExp(
exactly(
exactly(`@${username}`)
.notBefore(anyOf(letter, digit, charIn("@")))
.notAfter(anyOf(letter, digit, charIn("@"))),
[global],
),
linkTemplate(`@${username}@${baseHost}`),
)
.replaceAll(
`@${username}@${baseHost}`,
linkTemplate(`@${username}@${baseHost}`),
);
).or(exactly(`@${username}@${baseHost}`)),
[global],
),
linkTemplate(`@${username}@${baseHost}`),
);
}, text);
};

View file

@ -43,7 +43,6 @@ mock.module("@versia/kit/db", () => ({
},
Notification: {
fromSql: jest.fn(),
insert: jest.fn(),
},
}));
@ -242,6 +241,7 @@ describe("InboxProcessor", () => {
id: "followee-id",
data: { isLocked: false },
sendFollowAccept: jest.fn(),
notify: jest.fn(),
};
const mockRelationship = {
data: { following: false },