Skip to content

Commit 8e70c12

Browse files
committed
test: refactor test/rules/fixes-url.js
Extract common code for tests that are expected to pass and tests that are expected to fail to make it easier to add future test cases.
1 parent 633493d commit 8e70c12

File tree

1 file changed

+60
-140
lines changed

1 file changed

+60
-140
lines changed

test/rules/fixes-url.js

Lines changed: 60 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -23,150 +23,70 @@ const makeCommit = (msg) => {
2323
}
2424

2525
test('rule: fixes-url', (t) => {
26-
t.test('issue number', (tt) => {
27-
tt.plan(7)
28-
const context = makeCommit(`test: fix something
29-
30-
Fixes: #1234`
31-
)
32-
33-
context.report = (opts) => {
34-
tt.pass('called report')
35-
tt.equal(opts.id, 'fixes-url', 'id')
36-
tt.equal(opts.message, NOT_AN_ISSUE_NUMBER, 'message')
37-
tt.equal(opts.string, '#1234', 'string')
38-
tt.equal(opts.line, 1, 'line')
39-
tt.equal(opts.column, 7, 'column')
40-
tt.equal(opts.level, 'fail', 'level')
41-
}
42-
43-
Rule.validate(context)
44-
})
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
26+
const valid = [
27+
[ 'GitHub issue URL'
28+
, 'https://github.com/nodejs/node/issues/1234' ]
29+
, [ 'GitHub issue URL with comment'
30+
, 'https://github.com/nodejs/node/issues/1234#issuecomment-1234' ]
31+
, [ 'GitHub PR URL with comment'
32+
, 'https://github.com/nodejs/node/pull/1234#issuecomment-1234' ]
33+
, [ 'GitHub PR URL with discussion comment'
34+
, 'https://github.com/nodejs/node/pull/1234#discussion_r1234' ]
35+
]
36+
37+
for (const [name, url] of valid) {
38+
t.test(name, (tt) => {
39+
tt.plan(7)
40+
const context = makeCommit(`test: fix something
7141
7242
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
43+
)
44+
45+
context.report = (opts) => {
46+
tt.pass('called report')
47+
tt.equal(opts.id, 'fixes-url', 'id')
48+
tt.equal(opts.message, VALID_FIXES_URL, 'message')
49+
tt.equal(opts.string, url, 'string')
50+
tt.equal(opts.line, 1, 'line')
51+
tt.equal(opts.column, 7, 'column')
52+
tt.equal(opts.level, 'pass', 'level')
53+
}
54+
55+
Rule.validate(context)
56+
})
57+
}
58+
59+
const invalid = [
60+
[ 'issue number', NOT_AN_ISSUE_NUMBER
61+
, '#1234' ]
62+
, [ 'GitHub PR URL', INVALID_PRURL
63+
, 'https://github.com/nodejs/node/pull/1234' ]
64+
, [ 'non-GitHub URL', NOT_A_GITHUB_URL
65+
, 'https://nodejs.org' ]
66+
, [ 'not a URL or issue number', NOT_A_GITHUB_URL
67+
, 'fhqwhgads' ]
68+
]
69+
for (const [name, expected, url] of invalid) {
70+
t.test(name, (tt) => {
71+
tt.plan(7)
72+
const context = makeCommit(`test: fix something
9273
9374
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-
})
75+
)
76+
77+
context.report = (opts) => {
78+
tt.pass('called report')
79+
tt.equal(opts.id, 'fixes-url', 'id')
80+
tt.equal(opts.message, expected, 'message')
81+
tt.equal(opts.string, url, 'string')
82+
tt.equal(opts.line, 1, 'line')
83+
tt.equal(opts.column, 7, 'column')
84+
tt.equal(opts.level, 'fail', 'level')
85+
}
86+
87+
Rule.validate(context)
88+
})
89+
}
17090

17191
t.end()
17292
})

0 commit comments

Comments
 (0)