Skip to content
This repository was archived by the owner on Nov 8, 2018. It is now read-only.

Commit 68449af

Browse files
nat-hendersonjtarchie
authored andcommitted
Add tests for mergeable feature
1 parent 616e4dd commit 68449af

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed

spec/filters/mergeable_spec.rb

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
require_relative '../../assets/lib/filters/mergeable'
2+
require_relative '../../assets/lib/pull_request'
3+
require_relative '../../assets/lib/input'
4+
require 'webmock/rspec'
5+
6+
describe Filters::Mergeable do
7+
let(:ignore_pr) do
8+
PullRequest.new(pr: { 'number' => 1, 'head' => { 'sha' => 'abc' }, 'mergeable' => false,
9+
'base' => { 'repo' => {'full_name' => 'user/repo', 'permissions' => {'push' => true} } } })
10+
end
11+
12+
let(:pr) do
13+
PullRequest.new(pr: { 'number' => 2, 'head' => { 'sha' => 'def' }, 'mergeable' => true ,
14+
'base' => { 'repo' => {'full_name' => 'user/repo', 'permissions' => {'push' => true} } } })
15+
end
16+
17+
let(:pull_requests) { [ignore_pr, pr] }
18+
19+
def stub_json(uri, body)
20+
stub_request(:get, uri)
21+
.to_return(headers: { 'Content-Type' => 'application/json' }, body: body.to_json)
22+
end
23+
24+
context 'when mergeable requirement is disabled' do
25+
it 'does not filter' do
26+
payload = { 'source' => { 'repo' => 'user/repo' } }
27+
filter = described_class.new(pull_requests: pull_requests, input: Input.instance(payload: payload))
28+
29+
expect(filter.pull_requests).to eq pull_requests
30+
end
31+
32+
it 'does not filter when explictly disabled' do
33+
payload = { 'source' => { 'repo' => 'user/repo', 'only_mergeable' => false } }
34+
filter = described_class.new(pull_requests: pull_requests, input: Input.instance(payload: payload))
35+
36+
expect(filter.pull_requests).to eq pull_requests
37+
end
38+
end
39+
40+
context 'when the mergeable filtering is enabled' do
41+
before do
42+
stub_json(%r{https://api.github.com/repos/user/repo/pulls/1/reviews}, [{ 'state' => 'CHANGES_REQUESTED' }])
43+
stub_json(%r{https://api.github.com/repos/user/repo/pulls/2/reviews}, [{ 'state' => 'APPROVED' }])
44+
end
45+
46+
it 'only returns PRs with that label' do
47+
payload = { 'source' => { 'repo' => 'user/repo', 'only_mergeable' => true } }
48+
filter = described_class.new(pull_requests: pull_requests, input: Input.instance(payload: payload))
49+
50+
expect(filter.pull_requests).to eq [pr]
51+
end
52+
end
53+
end

0 commit comments

Comments
 (0)