1
1
import os
2
-
3
-
4
2
from unittest import mock
3
+
4
+ import redis
5
5
from gidgethub import sansio
6
6
7
7
os .environ ["REDIS_URL" ] = "someurl"
8
+ os .environ ["RETRY_SLEEP_TIME" ] = "1"
9
+
8
10
from miss_islington import backport_pr
9
11
10
12
11
13
class FakeGH :
12
- def __init__ (self , * , getitem = None , post = None ):
14
+ def __init__ (self , * , getitem = None , post = None , patch = None ):
13
15
self ._getitem_return = getitem
14
16
self .getitem_url = None
15
17
self .getiter_url = None
16
18
self ._post_return = post
19
+ self ._patch_return = patch
20
+ self .patch_url = self .patch_data = None
17
21
18
22
async def getitem (self , url , url_vars = {}):
19
23
self .getitem_url = sansio .format_url (url , url_vars )
@@ -24,6 +28,11 @@ async def post(self, url, *, data):
24
28
self .post_data = data
25
29
return self ._post_return
26
30
31
+ async def patch (self , url , * , data ):
32
+ self .patch_url = url
33
+ self .patch_data = data
34
+ return self ._patch_return
35
+
27
36
28
37
async def test_unmerged_pr_is_ignored ():
29
38
data = {"action" : "closed" , "pull_request" : {"merged" : False }}
@@ -206,3 +215,36 @@ async def test_easter_egg():
206
215
assert "Thanks @gvanrossum for the PR" in gh .post_data ["body" ]
207
216
assert "I'm not a witch" in gh .post_data ["body" ]
208
217
assert gh .post_url == "/repos/python/cpython/issues/1/comments"
218
+
219
+
220
+ async def test_backport_pr_redis_connection_error ():
221
+ data = {
222
+ "action" : "closed" ,
223
+ "pull_request" : {
224
+ "merged" : True ,
225
+ "number" : 1 ,
226
+ "merged_by" : {"login" : "Mariatta" },
227
+ "user" : {"login" : "gvanrossum" },
228
+ "merge_commit_sha" : "f2393593c99dd2d3ab8bfab6fcc5ddee540518a9" ,
229
+ },
230
+ "repository" : {
231
+ "issues_url" : "https://github.com/api/repos/python/cpython/issues/1"
232
+ },
233
+ }
234
+ event = sansio .Event (data , event = "pull_request" , delivery_id = "1" )
235
+
236
+ getitem = {
237
+ "https://github.com/api/repos/python/cpython/issues/1" : {
238
+ "labels_url" : "https://github.com/api/repos/python/cpython/issues/1/labels{/name}"
239
+ },
240
+ "https://github.com/api/repos/python/cpython/issues/1/labels" : [
241
+ {"name" : "CLA signed" },
242
+ {"name" : "needs backport to 3.7" },
243
+ ],
244
+ }
245
+
246
+ gh = FakeGH (getitem = getitem )
247
+ with mock .patch ("miss_islington.tasks.backport_task.delay" ) as backport_delay_mock :
248
+ backport_delay_mock .side_effect = redis .exceptions .ConnectionError
249
+ await backport_pr .router .dispatch (event , gh )
250
+ assert "trouble backporting after 5 attempts" in gh .post_data ["body" ]
0 commit comments