mirror of
https://github.com/go-gitea/gitea.git
synced 2026-03-10 11:05:50 +00:00
Eliminate a few database queries on all issue and pull request pages by moving mention autocomplete data to async JSON endpoints fetched on-demand when the user types `@`. See https://github.com/go-gitea/gitea/pull/36739#issuecomment-3963184858 for the full table of affected pages. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
79 lines
2.2 KiB
TypeScript
79 lines
2.2 KiB
TypeScript
import {GET} from '../modules/fetch.ts';
|
|
import {matchEmoji, matchMention} from './match.ts';
|
|
|
|
vi.mock('../modules/fetch.ts', () => ({
|
|
GET: vi.fn(),
|
|
}));
|
|
|
|
const testMentions = [
|
|
{key: 'user1 User 1', value: 'user1', name: 'user1', fullname: 'User 1', avatar: 'https://avatar1.com'},
|
|
{key: 'user2 User 2', value: 'user2', name: 'user2', fullname: 'User 2', avatar: 'https://avatar2.com'},
|
|
{key: 'org3 User 3', value: 'org3', name: 'org3', fullname: 'User 3', avatar: 'https://avatar3.com'},
|
|
{key: 'user4 User 4', value: 'user4', name: 'user4', fullname: 'User 4', avatar: 'https://avatar4.com'},
|
|
{key: 'user5 User 5', value: 'user5', name: 'user5', fullname: 'User 5', avatar: 'https://avatar5.com'},
|
|
{key: 'org6 User 6', value: 'org6', name: 'org6', fullname: 'User 6', avatar: 'https://avatar6.com'},
|
|
{key: 'org7 User 7', value: 'org7', name: 'org7', fullname: 'User 7', avatar: 'https://avatar7.com'},
|
|
];
|
|
|
|
test('matchEmoji', () => {
|
|
expect(matchEmoji('')).toMatchInlineSnapshot(`
|
|
[
|
|
"+1",
|
|
"-1",
|
|
"100",
|
|
"1234",
|
|
"1st_place_medal",
|
|
"2nd_place_medal",
|
|
]
|
|
`);
|
|
|
|
expect(matchEmoji('hea')).toMatchInlineSnapshot(`
|
|
[
|
|
"head_shaking_horizontally",
|
|
"head_shaking_vertically",
|
|
"headphones",
|
|
"headstone",
|
|
"health_worker",
|
|
"hear_no_evil",
|
|
]
|
|
`);
|
|
|
|
expect(matchEmoji('hear')).toMatchInlineSnapshot(`
|
|
[
|
|
"hear_no_evil",
|
|
"heard_mcdonald_islands",
|
|
"heart",
|
|
"heart_decoration",
|
|
"heart_eyes",
|
|
"heart_eyes_cat",
|
|
]
|
|
`);
|
|
|
|
expect(matchEmoji('poo')).toMatchInlineSnapshot(`
|
|
[
|
|
"poodle",
|
|
"hankey",
|
|
"spoon",
|
|
"bowl_with_spoon",
|
|
]
|
|
`);
|
|
|
|
expect(matchEmoji('1st_')).toMatchInlineSnapshot(`
|
|
[
|
|
"1st_place_medal",
|
|
]
|
|
`);
|
|
|
|
expect(matchEmoji('jellyfis')).toMatchInlineSnapshot(`
|
|
[
|
|
"jellyfish",
|
|
]
|
|
`);
|
|
});
|
|
|
|
test('matchMention', async () => {
|
|
vi.mocked(GET).mockResolvedValue({ok: true, json: () => Promise.resolve(testMentions)} as Response);
|
|
expect(await matchMention('/any-mentions', '')).toEqual(testMentions.slice(0, 6));
|
|
expect(await matchMention('/any-mentions', 'user4')).toEqual([testMentions[3]]);
|
|
});
|