@@ -13,7 +13,7 @@ const mockRefSets = (prefixes: string[] = ['']): RefSet[] =>
1313 ignoreCase : false ,
1414 prefix : prefix ,
1515 title : 'test' ,
16- url : 'test/ <num>' ,
16+ url : '<num>' ,
1717 description : 'test' ,
1818 } ,
1919 ] ,
@@ -25,27 +25,65 @@ function assertAutolinks(actual: Map<string, Autolink>, expected: Array<string>)
2525
2626suite ( 'Autolinks Test Suite' , ( ) => {
2727 test ( 'Branch name autolinks' , ( ) => {
28- assertAutolinks ( getBranchAutolinks ( '123' , mockRefSets ( ) ) , [ 'test/ 123' ] ) ;
29- assertAutolinks ( getBranchAutolinks ( 'feature/123' , mockRefSets ( ) ) , [ 'test/ 123' ] ) ;
30- assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123' , mockRefSets ( ) ) , [ 'test/ 123' ] ) ;
31- assertAutolinks ( getBranchAutolinks ( '123.2' , mockRefSets ( ) ) , [ 'test/ 123' , 'test/2 '] ) ;
28+ assertAutolinks ( getBranchAutolinks ( '123' , mockRefSets ( ) ) , [ '123' ] ) ;
29+ assertAutolinks ( getBranchAutolinks ( 'feature/123' , mockRefSets ( ) ) , [ '123' ] ) ;
30+ assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123' , mockRefSets ( ) ) , [ '123' ] ) ;
31+ assertAutolinks ( getBranchAutolinks ( '123.2' , mockRefSets ( ) ) , [ '123' ] ) ;
3232 assertAutolinks ( getBranchAutolinks ( '123' , mockRefSets ( [ 'PRE-' ] ) ) , [ ] ) ;
3333 assertAutolinks ( getBranchAutolinks ( 'feature/123' , mockRefSets ( [ 'PRE-' ] ) ) , [ ] ) ;
34- assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/123' , mockRefSets ( [ '' ] ) ) , [ 'test/123' , 'test/2' ] ) ;
35- assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/123' , mockRefSets ( [ '' ] ) ) , [ 'test/123' , 'test/2' ] ) ;
36- // incorrectly solved cat worths to compare the blocks length so that the less block size (without possible link) is more likely a link
37- assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/3' , mockRefSets ( [ '' ] ) ) , [ 'test/2' , 'test/3' ] ) ;
38- assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123' , mockRefSets ( [ 'PRE-' ] ) ) , [ 'test/123' ] ) ;
39- assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123.2' , mockRefSets ( [ 'PRE-' ] ) ) , [ 'test/123' ] ) ;
40- assertAutolinks ( getBranchAutolinks ( 'feature/3-123-PRE-123' , mockRefSets ( [ 'PRE-' ] ) ) , [ 'test/123' ] ) ;
34+ assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/123' , mockRefSets ( [ '' ] ) ) , [ '123' , '2' ] ) ;
35+ assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/123' , mockRefSets ( [ '' ] ) ) , [ '123' , '2' ] ) ;
36+ assertAutolinks ( getBranchAutolinks ( 'feature/2-fa/3' , mockRefSets ( [ '' ] ) ) , [ '3' , '2' ] ) ;
37+ assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123' , mockRefSets ( [ 'PRE-' ] ) ) , [ '123' ] ) ;
38+ assertAutolinks ( getBranchAutolinks ( 'feature/PRE-123.2' , mockRefSets ( [ 'PRE-' ] ) ) , [ '123' ] ) ;
39+ assertAutolinks ( getBranchAutolinks ( 'feature/3-123-PRE-123' , mockRefSets ( [ 'PRE-' ] ) ) , [ '123' ] ) ;
4140 assertAutolinks (
4241 getBranchAutolinks ( 'feature/3-123-PRE-123' , mockRefSets ( [ '' , 'PRE-' ] ) ) ,
4342
44- [ 'test/ 123' , 'test/ 3' ] ,
43+ [ '123' , '3' ] ,
4544 ) ;
4645 } ) ;
4746
4847 test ( 'Commit message autolinks' , ( ) => {
49- assertAutolinks ( getAutolinks ( 'test message 123 sd' , mockRefSets ( ) ) , [ 'test/123' ] ) ;
48+ assertAutolinks ( getAutolinks ( 'test message 123 sd' , mockRefSets ( ) ) , [ '123' ] ) ;
49+ } ) ;
50+
51+ /**
52+ * 16.1.1^ - improved branch name autolinks matching
53+ */
54+ test ( 'Improved branch name autolinks matching' , ( ) => {
55+ // skip branch names chunks matching '^release(?=(-(?<number-chunk>))$` or other release-like values
56+ // skip pair in case of double chunk
57+ assertAutolinks ( getBranchAutolinks ( 'folder/release/16/issue-1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
58+ assertAutolinks ( getBranchAutolinks ( 'folder/release/16.1/issue-1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
59+ assertAutolinks ( getBranchAutolinks ( 'folder/release/16.1.1/1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
60+ // skip one in case of single chunk
61+ assertAutolinks ( getBranchAutolinks ( 'folder/release-16/1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
62+ assertAutolinks ( getBranchAutolinks ( 'folder/release-16.1/1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
63+ assertAutolinks ( getBranchAutolinks ( 'folder/release-16.1.2/1' , mockRefSets ( [ '' ] ) ) , [ '1' ] ) ;
64+
65+ /**
66+ * Added chunk matching logic for non-prefixed numbers:
67+ * - XX - is more likely issue number
68+ * - XX.XX - is less likely issue number, but still possible
69+ * - XX.XX.XX - is more likely not issue number
70+ */
71+ assertAutolinks ( getBranchAutolinks ( 'some-issue-in-release-2024' , mockRefSets ( [ '' ] ) ) , [ '2024' ] ) ;
72+ assertAutolinks ( getBranchAutolinks ( 'some-issue-in-release-2024.1' , mockRefSets ( [ '' ] ) ) , [ '2024' ] ) ;
73+ assertAutolinks ( getBranchAutolinks ( 'some-issue-in-release-2024.1.1' , mockRefSets ( [ '' ] ) ) , [ ] ) ;
74+
75+ assertAutolinks ( getBranchAutolinks ( 'folder/release-notes-16-1' , mockRefSets ( [ '' ] ) ) , [ '16' ] ) ;
76+ assertAutolinks ( getBranchAutolinks ( 'folder/16-1-release-notes' , mockRefSets ( [ '' ] ) ) , [ '16' ] ) ;
77+
78+ // considered the distance from the edges of the chunk as a priority sign
79+ assertAutolinks ( getBranchAutolinks ( 'folder/16-content-1-content' , mockRefSets ( [ '' ] ) ) , [ '16' , '1' ] ) ;
80+ assertAutolinks ( getBranchAutolinks ( 'folder/content-1-content-16' , mockRefSets ( [ '' ] ) ) , [ '16' , '1' ] ) ;
81+
82+ // the chunk that is more close to the end is more likely actual issue number
83+ assertAutolinks ( getBranchAutolinks ( '1-epic-folder/10-issue/100-subissue' , mockRefSets ( [ '' ] ) ) , [
84+ '100' ,
85+ '10' ,
86+ '1' ,
87+ ] ) ;
5088 } ) ;
5189} ) ;
0 commit comments