@@ -4,28 +4,36 @@ const test = require('tap').test
4
4
const Rule = require ( '../../lib/rules/fixes-url' )
5
5
const Commit = require ( 'gitlint-parser-node' )
6
6
const Validator = require ( '../../' )
7
- const INVALID_FIXES_URL = 'Fixes must be a url, not an issue number.'
7
+
8
+ const INVALID_PRURL = 'Pull request URL must reference a comment or discussion.'
9
+ const NOT_AN_ISSUE_NUMBER = 'Fixes must be a URL, not an issue number.'
10
+ const NOT_A_GITHUB_URL = 'Fixes must be a GitHub URL.'
11
+ const VALID_FIXES_URL = 'Valid fixes URL.'
12
+
13
+ const makeCommit = ( msg ) => {
14
+ return new Commit ( {
15
+ sha : 'e7c077c610afa371430180fbd447bfef60ebc5ea'
16
+ , author : {
17
+ name : 'Evan Lucas'
18
+
19
+ , date : '2016-04-12T19:42:23Z'
20
+ }
21
+ , message : msg
22
+ } , new Validator ( ) )
23
+ }
8
24
9
25
test ( 'rule: fixes-url' , ( t ) => {
10
- t . test ( 'invalid ' , ( tt ) => {
26
+ t . test ( 'issue number ' , ( tt ) => {
11
27
tt . plan ( 7 )
12
- const v = new Validator ( )
13
- const context = new Commit ( {
14
- sha : 'e7c077c610afa371430180fbd447bfef60ebc5ea'
15
- , author : {
16
- name : 'Evan Lucas'
17
-
18
- , date : '2016-04-12T19:42:23Z'
19
- }
20
- , message : `test: fix something
28
+ const context = makeCommit ( `test: fix something
21
29
22
30
Fixes: #1234`
23
- } , v )
31
+ )
24
32
25
33
context . report = ( opts ) => {
26
34
tt . pass ( 'called report' )
27
35
tt . equal ( opts . id , 'fixes-url' , 'id' )
28
- tt . equal ( opts . message , INVALID_FIXES_URL , 'message' )
36
+ tt . equal ( opts . message , NOT_AN_ISSUE_NUMBER , 'message' )
29
37
tt . equal ( opts . string , '#1234' , 'string' )
30
38
tt . equal ( opts . line , 1 , 'line' )
31
39
tt . equal ( opts . column , 7 , 'column' )
@@ -35,5 +43,130 @@ Fixes: #1234`
35
43
Rule . validate ( context )
36
44
} )
37
45
46
+ t . test ( 'GitHub issue URL' , ( tt ) => {
47
+ tt . plan ( 7 )
48
+ const url = 'https://github.com/nodejs/node/issues/1234'
49
+ const context = makeCommit ( `test: fix something
50
+
51
+ Fixes: ${ url } `
52
+ )
53
+
54
+ context . report = ( opts ) => {
55
+ tt . pass ( 'called report' )
56
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
57
+ tt . equal ( opts . message , VALID_FIXES_URL , 'message' )
58
+ tt . equal ( opts . string , url , 'string' )
59
+ tt . equal ( opts . line , 1 , 'line' )
60
+ tt . equal ( opts . column , 7 , 'column' )
61
+ tt . equal ( opts . level , 'pass' , 'level' )
62
+ }
63
+
64
+ Rule . validate ( context )
65
+ } )
66
+
67
+ t . test ( 'GitHub issue URL with comment' , ( tt ) => {
68
+ tt . plan ( 7 )
69
+ const url = 'https://github.com/nodejs/node/issues/1234#issuecomment-1234'
70
+ const context = makeCommit ( `test: fix something
71
+
72
+ Fixes: ${ url } `
73
+ )
74
+
75
+ context . report = ( opts ) => {
76
+ tt . pass ( 'called report' )
77
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
78
+ tt . equal ( opts . message , VALID_FIXES_URL , 'message' )
79
+ tt . equal ( opts . string , url , 'string' )
80
+ tt . equal ( opts . line , 1 , 'line' )
81
+ tt . equal ( opts . column , 7 , 'column' )
82
+ tt . equal ( opts . level , 'pass' , 'level' )
83
+ }
84
+
85
+ Rule . validate ( context )
86
+ } )
87
+
88
+ t . test ( 'GitHub PR URL' , ( tt ) => {
89
+ tt . plan ( 7 )
90
+ const url = 'https://github.com/nodejs/node/pull/1234'
91
+ const context = makeCommit ( `test: fix something
92
+
93
+ Fixes: ${ url } `
94
+ )
95
+
96
+ context . report = ( opts ) => {
97
+ tt . pass ( 'called report' )
98
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
99
+ tt . equal ( opts . message , INVALID_PRURL , 'message' )
100
+ tt . equal ( opts . string , url , 'string' )
101
+ tt . equal ( opts . line , 1 , 'line' )
102
+ tt . equal ( opts . column , 7 , 'column' )
103
+ tt . equal ( opts . level , 'fail' , 'level' )
104
+ }
105
+
106
+ Rule . validate ( context )
107
+ } )
108
+
109
+ t . test ( 'GitHub PR URL with comment' , ( tt ) => {
110
+ tt . plan ( 7 )
111
+ const url = 'https://github.com/nodejs/node/pull/1234#issuecomment-1234'
112
+ const context = makeCommit ( `test: fix something
113
+
114
+ Fixes: ${ url } `
115
+ )
116
+
117
+ context . report = ( opts ) => {
118
+ tt . pass ( 'called report' )
119
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
120
+ tt . equal ( opts . message , VALID_FIXES_URL , 'message' )
121
+ tt . equal ( opts . string , url , 'string' )
122
+ tt . equal ( opts . line , 1 , 'line' )
123
+ tt . equal ( opts . column , 7 , 'column' )
124
+ tt . equal ( opts . level , 'pass' , 'level' )
125
+ }
126
+
127
+ Rule . validate ( context )
128
+ } )
129
+
130
+ t . test ( 'GitHub PR URL with discussion comment' , ( tt ) => {
131
+ tt . plan ( 7 )
132
+ const url = 'https://github.com/nodejs/node/pull/1234#discussion_r1234'
133
+ const context = makeCommit ( `test: fix something
134
+
135
+ Fixes: ${ url } `
136
+ )
137
+
138
+ context . report = ( opts ) => {
139
+ tt . pass ( 'called report' )
140
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
141
+ tt . equal ( opts . message , VALID_FIXES_URL , 'message' )
142
+ tt . equal ( opts . string , url , 'string' )
143
+ tt . equal ( opts . line , 1 , 'line' )
144
+ tt . equal ( opts . column , 7 , 'column' )
145
+ tt . equal ( opts . level , 'pass' , 'level' )
146
+ }
147
+
148
+ Rule . validate ( context )
149
+ } )
150
+
151
+ t . test ( 'non-GitHub URL' , ( tt ) => {
152
+ tt . plan ( 7 )
153
+ const context = makeCommit ( `test: fix something
154
+
155
+ Fixes: https://nodejs.org`
156
+ )
157
+
158
+ context . report = ( opts ) => {
159
+ tt . pass ( 'called report' )
160
+ tt . equal ( opts . id , 'fixes-url' , 'id' )
161
+ tt . equal ( opts . message , NOT_A_GITHUB_URL , 'message' )
162
+ tt . equal ( opts . string , 'https://nodejs.org' , 'string' )
163
+ tt . equal ( opts . line , 1 , 'line' )
164
+ tt . equal ( opts . column , 7 , 'column' )
165
+ tt . equal ( opts . level , 'fail' , 'level' )
166
+ }
167
+
168
+ Rule . validate ( context )
169
+ } )
170
+
38
171
t . end ( )
39
172
} )
0 commit comments