diff --git a/web_src/js/utils.test.js b/web_src/js/utils.test.js index 7d6e89e81c..15806e8a45 100644 --- a/web_src/js/utils.test.js +++ b/web_src/js/utils.test.js @@ -3,6 +3,7 @@ import { parseUrl, translateMonth, translateDay, blobToDataURI, toAbsoluteUrl, encodeURLEncodedBase64, decodeURLEncodedBase64, isDarkTheme, getCurrentLocale, parseDom, serializeXml, sleep, + parseRepoOwnerPathInfo, } from './utils.js'; afterEach(() => { diff --git a/web_src/js/utils/match.js b/web_src/js/utils/match.js index 369494f06c..982b54336d 100644 --- a/web_src/js/utils/match.js +++ b/web_src/js/utils/match.js @@ -49,10 +49,9 @@ export function matchIssue(queryText) { const query = queryText.toLowerCase().trim(); if (!query) { - // Return latest 5 issues/prs sorted by number descending return [...issues] .sort((a, b) => b.number - a.number) - .slice(0, 5); + .slice(0, maxMatches); } const isDigital = /^\d+$/.test(query); @@ -67,7 +66,7 @@ export function matchIssue(queryText) { results.push(...prefixMatches); } - if (!isDigital || results.length < 5) { + if (!isDigital || results.length < maxMatches) { // Fallback: find by title match, sorted by number descending const titleMatches = issues .filter(issue => @@ -79,10 +78,10 @@ export function matchIssue(queryText) { for (const match of titleMatches) { if (!results.includes(match)) { results.push(match); - if (results.length >= 5) break; + if (results.length >= maxMatches) break; } } } - return results.slice(0, 5); + return results.slice(0, maxMatches); } diff --git a/web_src/js/utils/match.test.js b/web_src/js/utils/match.test.js index 1e30b451d4..102993f95d 100644 --- a/web_src/js/utils/match.test.js +++ b/web_src/js/utils/match.test.js @@ -1,4 +1,4 @@ -import {matchEmoji, matchMention} from './match.js'; +import {matchEmoji, matchMention, matchIssue} from './match.js'; test('matchEmoji', () => { expect(matchEmoji('')).toEqual([ @@ -48,3 +48,15 @@ test('matchMention', () => { expect(matchMention('')).toEqual(window.config.mentionValues.slice(0, 6)); expect(matchMention('user4')).toEqual([window.config.mentionValues[3]]); }); + +test('matchIssue', () => { + expect(matchIssue('')).toEqual(window.config.issueValues.slice(0, 6)); + expect(matchIssue('1')).toEqual([window.config.issueValues[9], window.config.issueValues[0]]); + expect(matchIssue('issue')).toEqual([ + window.config.issueValues[0], + window.config.issueValues[1], + window.config.issueValues[2], + window.config.issueValues[7], + window.config.issueValues[9], + ]); +}); \ No newline at end of file diff --git a/web_src/js/vitest.setup.js b/web_src/js/vitest.setup.js index 5366958fb5..83c632dd40 100644 --- a/web_src/js/vitest.setup.js +++ b/web_src/js/vitest.setup.js @@ -15,4 +15,16 @@ window.config = { {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'}, ], + issueValues: [ + {number: 10, title:'Issue'}, + {number: 9, title:'Foo issue'}, + {number: 8, title:'Foo issue'}, + {number: 7, title:'Merged PR'}, + {number: 6, title:'Closed PR'}, + {number: 5, title:'PR'}, + {number: 4, title:'WIP: PR'}, + {number: 3, title:'Closed issue'}, + {number: 2, title:'PR'}, + {number: 1, title:'Issue'}, + ] };