예제 #1
0
 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))
예제 #2
0
 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)
예제 #3
0
 def test_getRemoteBug(self):
     responses.add(
         "GET",
         "https://gitlab.com/api/v4/projects/user%2Frepository/issues/1",
         json=self.sample_bugs[0])
     tracker = GitLab("https://gitlab.com/user/repository/issues")
     self.assertEqual((1, self.sample_bugs[0]), tracker.getRemoteBug("1"))
     self.assertEqual(
         "https://gitlab.com/api/v4/projects/user%2Frepository/issues/1",
         responses.calls[-1].request.url)
예제 #4
0
 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)
예제 #5
0
 def test__getPage_unauthenticated(self):
     responses.add(
         "GET", "https://gitlab.com/api/v4/projects/user%2Frepository/test",
         json="success")
     tracker = GitLab("https://gitlab.com/user/repository/issues")
     self.assertEqual("success", tracker._getPage("test").json())
     requests = [call.request for call in responses.calls]
     self.assertThat(requests, MatchesListwise([
         MatchesStructure(
             path_url=Equals("/api/v4/projects/user%2Frepository/test"),
             headers=Not(Contains("Private-Token"))),
         ]))
예제 #6
0
 def test__getPage_authenticated(self):
     responses.add(
         "GET", "https://gitlab.com/api/v4/projects/user%2Frepository/test",
         json="success")
     self.pushConfig(
         "checkwatches.credentials", **{"gitlab.com.token": "sosekrit"})
     tracker = GitLab("https://gitlab.com/user/repository/issues")
     self.assertEqual("success", tracker._getPage("test").json())
     requests = [call.request for call in responses.calls]
     self.assertThat(requests, MatchesListwise([
         MatchesStructure(
             path_url=Equals("/api/v4/projects/user%2Frepository/test"),
             headers=ContainsDict({"Private-Token": Equals("sosekrit")})),
         ]))
예제 #7
0
    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])
예제 #8
0
 def test_status_closed(self):
     self.sample_bugs = [
         {"id": 101, "iid": 1, "state": "closed", "labels": []},
         # Labels do not affect status, even if names collide.
         {"id": 102, "iid": 2, "state": "closed",
          "labels": ["feature", "opened"]},
         ]
     self._addIssuesResponse()
     tracker = GitLab("https://gitlab.com/user/repository/issues")
     tracker.initializeRemoteBugDB(["1", "2"])
     remote_status = tracker.getRemoteStatus("1")
     self.assertEqual("closed", remote_status)
     lp_status = tracker.convertRemoteStatus(remote_status)
     self.assertEqual(BugTaskStatus.FIXRELEASED, lp_status)
     remote_status = tracker.getRemoteStatus("2")
     self.assertEqual("closed feature opened", remote_status)
     lp_status = tracker.convertRemoteStatus(remote_status)
     self.assertEqual(BugTaskStatus.FIXRELEASED, lp_status)
예제 #9
0
 def test_implements_interface(self):
     self.assertTrue(verifyObject(
         IExternalBugTracker,
         GitLab("https://gitlab.com/user/repository/issues")))