MCPcopy Create free account
hub / github.com/alibaba/open-code-review / FetchDiffRefsTest

Class FetchDiffRefsTest

examples/gitlab_ci/post_review_test.py:1258–1378  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1256
1257
1258class FetchDiffRefsTest(unittest.TestCase):
1259 API_BASE = "https://gitlab.example/api/v4/projects/1/merge_requests/2"
1260 TOKEN = "test-token"
1261 AUTH_HEADER = "PRIVATE-TOKEN"
1262
1263 def test_success(self):
1264 body = json.dumps([{
1265 "base_commit_sha": "aaa", "start_commit_sha": "bbb", "head_commit_sha": "ccc",
1266 }]).encode()
1267 with mock.patch.object(pr.urllib.request, "urlopen",
1268 lambda req, timeout=None: FakeResponse(body)), \
1269 mock.patch.object(pr, "_sleep", lambda _s: None):
1270 refs = pr.fetch_diff_refs(self.API_BASE, self.TOKEN, self.AUTH_HEADER, DEFAULT_CONFIG)
1271 self.assertEqual(refs, {"base_sha": "aaa", "start_sha": "bbb", "head_sha": "ccc"})
1272
1273 def test_returns_none_on_failure(self):
1274 with mock.patch.object(pr.urllib.request, "urlopen",
1275 lambda req, timeout=None: (_ for _ in ()).throw(http_error(404, b"not found"))), \
1276 mock.patch.object(pr, "_sleep", lambda _s: None):
1277 refs = pr.fetch_diff_refs(self.API_BASE, self.TOKEN, self.AUTH_HEADER, DEFAULT_CONFIG)
1278 self.assertIsNone(refs)
1279
1280 def test_returns_none_on_empty_versions(self):
1281 with mock.patch.object(pr.urllib.request, "urlopen",
1282 lambda req, timeout=None: FakeResponse(b"[]")), \
1283 mock.patch.object(pr, "_sleep", lambda _s: None):
1284 refs = pr.fetch_diff_refs(self.API_BASE, self.TOKEN, self.AUTH_HEADER, DEFAULT_CONFIG)
1285 self.assertIsNone(refs)
1286
1287 def test_uses_retry_on_transient(self):
1288 body = json.dumps([{
1289 "base_commit_sha": "aaa", "start_commit_sha": "bbb", "head_commit_sha": "ccc",
1290 }]).encode()
1291 calls = {"n": 0}
1292
1293 def fake_urlopen(req, timeout=None):
1294 calls["n"] += 1
1295 if calls["n"] == 1:
1296 raise http_error(500, b"server error")
1297 return FakeResponse(body)
1298
1299 with mock.patch.object(pr.urllib.request, "urlopen", fake_urlopen), \
1300 mock.patch.object(pr, "_sleep", lambda _s: None), \
1301 mock.patch.object(pr.random, "random", lambda: 0.5):
1302 refs = pr.fetch_diff_refs(self.API_BASE, self.TOKEN, self.AUTH_HEADER, DEFAULT_CONFIG)
1303 self.assertEqual(calls["n"], 2)
1304 self.assertIsNotNone(refs)
1305
1306 def _versions(self, *triples):
1307 # triples: (base, start, head, [created_at])
1308 return [{
1309 "base_commit_sha": t[0], "start_commit_sha": t[1],
1310 "head_commit_sha": t[2],
1311 **({"created_at": t[3]} if len(t) > 3 else {}),
1312 } for t in triples]
1313
1314 def test_picks_version_matching_expected_head(self):
1315 versions = self._versions(

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected