def test_getRemoteBugBatch_caching(self): self._addIssuesResponse() tracker = GitLab("https://gitlab.com/user/repository/issues") tracker.initializeRemoteBugDB( [str(bug["iid"]) for bug in self.sample_bugs]) responses.reset() self.assertEqual( {bug["iid"]: bug for bug in self.sample_bugs[:2]}, tracker.getRemoteBugBatch(["1", "2"])) self.assertEqual(0, len(responses.calls))
def test_getRemoteBugBatch(self): self._addIssuesResponse() tracker = GitLab("https://gitlab.com/user/repository/issues") self.assertEqual( {bug["iid"]: bug for bug in self.sample_bugs[:2]}, tracker.getRemoteBugBatch(["1", "2"])) self.assertEqual( "https://gitlab.com/api/v4/projects/user%2Frepository/issues?" "iids[]=1&iids[]=2", responses.calls[-1].request.url)
def test_getRemoteBugBatch_last_accessed(self): self._addIssuesResponse() tracker = GitLab("https://gitlab.com/user/repository/issues") since = datetime(2015, 1, 1, 12, 0, 0, tzinfo=pytz.UTC) self.assertEqual( {bug["iid"]: bug for bug in self.sample_bugs[:2]}, tracker.getRemoteBugBatch(["1", "2"], last_accessed=since)) self.assertEqual( "https://gitlab.com/api/v4/projects/user%2Frepository/issues?" "updated_after=2015-01-01T12%3A00%3A00Z&iids[]=1&iids[]=2", responses.calls[-1].request.url)
def test_getRemoteBugBatch_pagination(self): def issues_callback(request): url = urlsplit(request.url) base_url = urlunsplit(list(url[:3]) + ["", ""]) page = int(parse_qs(url.query).get("page", ["1"])[0]) links = [] if page != 3: links.append('<%s?page=%d>; rel="next"' % (base_url, page + 1)) links.append('<%s?page=3>; rel="last"' % base_url) if page != 1: links.append('<%s?page=1>; rel="first"' % base_url) links.append('<%s?page=%d>; rel="prev"' % (base_url, page - 1)) start = (page - 1) * 2 end = page * 2 return ( 200, {"Link": ", ".join(links)}, json.dumps(self.sample_bugs[start:end])) responses.add_callback( "GET", "https://gitlab.com/api/v4/projects/user%2Frepository/issues", callback=issues_callback, content_type="application/json") tracker = GitLab("https://gitlab.com/user/repository/issues") self.assertEqual( {bug["iid"]: bug for bug in self.sample_bugs}, tracker.getRemoteBugBatch( [str(bug["iid"]) for bug in self.sample_bugs])) expected_urls = [ "https://gitlab.com/api/v4/projects/user%2Frepository/issues?" + "&".join("iids[]=%s" % bug["iid"] for bug in self.sample_bugs), "https://gitlab.com/api/v4/projects/user%2Frepository/issues?" "page=2", "https://gitlab.com/api/v4/projects/user%2Frepository/issues?" "page=3", ] self.assertEqual( expected_urls, [call.request.url for call in responses.calls])