1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
from unittest import TestCase
from mock import patch
import check_blockers
JUJUBOT_USER = {'login': 'jujubot', 'id': 7779494}
OTHER_USER = {'login': 'user', 'id': 1}
class CheckBlockers(TestCase):
def test_parse_args(self):
args = check_blockers.parse_args(['master', '17'])
self.assertEqual('master', args.branch)
self.assertEqual('17', args.pull_request)
def test_get_lp_bugs_with_master(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
data = {'entries': []}
gj.return_value = data
check_blockers.get_lp_bugs(args)
gj.assert_called_with((check_blockers.LP_BUGS.format('juju-core')))
def test_get_lp_bugs_with_devel(self):
args = check_blockers.parse_args(['1.20', '17'])
with patch('check_blockers.DEVEL') as devel:
devel.return_value = '1.20'
with patch('check_blockers.get_json') as gj:
data = {'entries': []}
gj.return_value = data
check_blockers.get_lp_bugs(args)
gj.assert_called_with(
(check_blockers.LP_BUGS.format('juju-core/1.20')))
def test_get_lp_bugs_without_blocking_bugs(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
empty_bug_list = {'entries': []}
gj.return_value = empty_bug_list
bugs = check_blockers.get_lp_bugs(args)
self.assertEqual({}, bugs)
def test_get_lp_bugs_with_blocking_bugs(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
bug_list = {
'entries': [
{'self_link': 'https://lp/j/98765'},
{'self_link': 'https://lp/j/54321'},
]}
gj.return_value = bug_list
bugs = check_blockers.get_lp_bugs(args)
self.assertEqual(['54321', '98765'], sorted(bugs.keys()))
def test_get_reason_without_blocking_bugs(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
code, reason = check_blockers.get_reason({}, args)
self.assertEqual(0, code)
self.assertEqual('No blocking bugs', reason)
self.assertEqual(0, gj.call_count)
def test_get_reason_without_comments(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = []
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(1, code)
self.assertEqual('Could not get 17 comments from github', reason)
gj.assert_called_with((check_blockers.GH_COMMENTS.format('17')))
def test_get_reason_with_blockers_no_match(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = [{'body': '$$merge$$', 'user': OTHER_USER}]
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(1, code)
self.assertEqual("Does not match ['fixes-98765']", reason)
def test_get_reason_with_blockers_with_match(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = [
{'body': '$$merge$$', 'user': OTHER_USER},
{'body': 'la la __fixes-98765__ ha ha', 'user': OTHER_USER}]
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(0, code)
self.assertEqual("Matches fixes-98765", reason)
def test_get_reason_with_blockers_with_jujubot_comment(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = [
{'body': '$$merge$$', 'user': OTHER_USER},
{'body': 'la la $$fixes-98765$$ ha ha', 'user': JUJUBOT_USER}]
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(1, code)
self.assertEqual("Does not match ['fixes-98765']", reason)
def test_get_reason_with_blockers_with_reply_jujubot_comment(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = [
{'body': '$$merge$$', 'user': OTHER_USER},
{'body': 'Juju bot wrote $$fixes-98765$$', 'user': OTHER_USER}]
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(1, code)
self.assertEqual("Does not match ['fixes-98765']", reason)
def test_get_reason_with_blockers_with_jfdi(self):
args = check_blockers.parse_args(['master', '17'])
with patch('check_blockers.get_json') as gj:
gj.return_value = [
{'body': '$$merge$$', 'user': OTHER_USER},
{'body': 'la la __JFDI__ ha ha', 'user': OTHER_USER}]
bugs = {'98765': {'self_link': 'https://lp/j/98765'}}
code, reason = check_blockers.get_reason(bugs, args)
self.assertEqual(0, code)
self.assertEqual("Engineer says JFDI", reason)
|