github: Refactorize array requests
authorAlexandre Terrasa <alexandre@moz-code.org>
Fri, 21 Jun 2019 02:25:16 +0000 (22:25 -0400)
committerAlexandre Terrasa <alexandre@moz-code.org>
Thu, 11 Jul 2019 01:42:15 +0000 (21:42 -0400)
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>

lib/github/api.nit
lib/github/tests/mock/repo_branches_nit.res
lib/github/tests/mock/repo_issues_comments_nit.res [new file with mode: 0644]
lib/github/tests/mock/repo_issues_events_nit.res [new file with mode: 0644]
lib/github/tests/mock/repo_issues_nit.res [new file with mode: 0644]
lib/github/tests/mock/repo_labels_nit.res [new file with mode: 0644]
lib/github/tests/mock/repo_milestones_nit.res [new file with mode: 0644]
lib/github/tests/mock/repo_pulls_nit.res [new file with mode: 0644]
lib/github/tests/test_api.nit

index 9d28990..beb9bad 100644 (file)
@@ -229,32 +229,20 @@ class GithubAPI
                return get("/repos/{full_name}").as(nullable Repo)
        end
 
-       # List of branches associated with their names.
-       fun get_repo_branches(repo: Repo): Array[Branch] do
-               message(1, "Get branches for {repo.full_name}")
-               var array = get("/repos/{repo.full_name}/branches")
-               var res = new Array[Branch]
-               if not array isa Array[Object] then return res # empty array
-               for branch in array do
-                       if not branch isa Branch then continue
-                       res.add branch
-               end
-               return res
+       # List of repo branches.
+       #
+       # Pagination:
+       #       * `page`: page to fetch (default: 1)
+       #       * `per_page`: number of branches by page (default: 30)
+       fun get_repo_branches(repo: Repo, page, per_page: nullable Int): Array[Branch] do
+               return new GithubArray[Branch].from(get(
+                       "/repos/{repo.full_name}/branches?{pagination(page, per_page)}"))
        end
 
        # List of issues associated with their ids.
-       fun get_repo_issues(repo: Repo): Array[Issue] do
-               message(1, "Get issues for {repo.full_name}")
-               var res = new Array[Issue]
-               var issue = get_repo_last_issue(repo)
-               if issue == null then return res
-               res.add issue
-               while issue != null and issue.number > 1 do
-                       issue = get_issue(repo, issue.number - 1)
-                       if issue == null then continue
-                       res.add issue
-               end
-               return res
+       fun get_repo_issues(repo: Repo, page, per_page: nullable Int): Array[Issue] do
+               return new GithubArray[Issue].from(get(
+                       "/repos/{repo.full_name}/issues?{pagination(page, per_page)}"))
        end
 
        # Search issues in this repo form an advanced query.
@@ -286,19 +274,15 @@ class GithubAPI
        end
 
        # List of labels associated with their names.
-       fun get_repo_labels(repo: Repo): Array[Label] do
-               message(1, "Get labels for {repo.full_name}")
-               var array = get("repos/{repo.full_name}/labels")
-               if not array isa JsonArray then return new Array[Label]
-               return deserialize(array.to_json).as(Array[Label])
+       fun get_repo_labels(repo: Repo, page, per_page: nullable Int): Array[Label] do
+               return new GithubArray[Label].from(get(
+                       "/repos/{repo.full_name}/labels?{pagination(page, per_page)}"))
        end
 
        # List of milestones associated with their ids.
-       fun get_repo_milestones(repo: Repo): Array[Milestone] do
-               message(1, "Get milestones for {repo.full_name}")
-               var array = get("/repos/{repo.full_name}/milestones")
-               if not array isa JsonArray then return new Array[Milestone]
-               return deserialize(array.to_json).as(Array[Milestone])
+       fun get_repo_milestones(repo: Repo, page, per_page: nullable Int): Array[Milestone] do
+               return new GithubArray[Milestone].from(get(
+                       "/repos/{repo.full_name}/milestones?{pagination(page, per_page)}"))
        end
 
        # List of pull-requests associated with their ids.
@@ -306,23 +290,9 @@ class GithubAPI
        # Implementation notes: because PR numbers are not consecutive,
        # PR are loaded from pages.
        # See: https://developer.github.com/v3/pulls/#list-pull-requests
-       fun get_repo_pulls(repo: Repo): Array[PullRequest] do
-               message(1, "Get pulls for {repo.full_name}")
-               var key = "/repos/{repo.full_name}"
-               var res = new Array[PullRequest]
-               var page = 1
-               loop
-                       var array = get("{key}/pulls?page={page}").as(JsonArray)
-                       if array.is_empty then break
-                       for obj in array do
-                               if not obj isa JsonObject then continue
-                               var pr = deserialize(array.to_json).as(nullable PullRequest)
-                               if pr == null then continue
-                               res.add pr
-                       end
-                       page += 1
-               end
-               return res
+       fun get_repo_pulls(repo: Repo, page, per_page: nullable Int): Array[PullRequest] do
+               return new GithubArray[PullRequest].from(get(
+                       "/repos/{repo.full_name}/pulls?{pagination(page, per_page)}"))
        end
 
        # List of contributor related statistics.
@@ -405,44 +375,15 @@ class GithubAPI
        end
 
        # List of event on this issue.
-       fun get_issue_comments(repo: Repo, issue: Issue): Array[IssueComment] do
-               var res = new Array[IssueComment]
-               var count = issue.comments or else 0
-               var page = 1
-               loop
-                       var array = get("/repos/{repo.full_name}/issues/{issue.number}/comments?page={page}")
-                       if not array isa JsonArray then break
-                       if array.is_empty then break
-                       for obj in array do
-                               if not obj isa JsonObject then continue
-                               var id = obj["id"].as(Int)
-                               var comment = get_issue_comment(repo, id)
-                               if comment == null then continue
-                               res.add(comment)
-                       end
-                       if res.length >= count then break
-                       page += 1
-               end
-               return res
+       fun get_issue_comments(repo: Repo, issue: Issue, page, per_page: nullable Int): Array[IssueComment] do
+               return new GithubArray[IssueComment].from(get(
+                       "/repos/{repo.full_name}/issues/{issue.number}/comments?{pagination(page, per_page)}"))
        end
 
        # List of events on this issue.
-       fun get_issue_events(repo: Repo, issue: Issue): Array[IssueEvent] do
-               var res = new Array[IssueEvent]
-               var key = "/repos/{repo.full_name}/issues/{issue.number}"
-               var page = 1
-               loop
-                       var array = get("{key}/events?page={page}")
-                       if not array isa JsonArray or array.is_empty then break
-                       for obj in array do
-                               if not obj isa JsonObject then continue
-                               var event = deserialize(obj.to_json).as(nullable IssueEvent)
-                               if event == null then continue
-                               res.add event
-                       end
-                       page += 1
-               end
-               return res
+       fun get_issue_events(repo: Repo, issue: Issue, page, per_page: nullable Int): Array[IssueEvent] do
+               return new GithubArray[IssueEvent].from(get(
+                       "/repos/{repo.full_name}/issues/{issue.number}/events?{pagination(page, per_page)}"))
        end
 
        # Get the Github pull request #`number`.
@@ -560,6 +501,27 @@ class GithubAPI
        fun get_review_comment(repo: Repo, id: Int): nullable ReviewComment do
                return get("/repos/{repo.full_name}/pulls/comments/{id}").as(nullable ReviewComment)
        end
+
+       private fun pagination(page, per_page: nullable Int): String do
+               return "page={page or else 1}&per_page={per_page or else 30}"
+       end
+end
+
+# Return deserialization as an array of E
+#
+# Non-subtypes will be ignored.
+private class GithubArray[E]
+       super Array[E]
+
+       # Create `self` from an Array of objects
+       #
+       # Objects non-subtyping E will be ignored.
+       init from(res: nullable Object) do
+               if not res isa Array[Object] then return
+               for obj in res do
+                       if obj isa E then add obj
+               end
+       end
 end
 
 # An Error returned by GithubAPI
@@ -852,7 +814,7 @@ class PullRequest
        var merge_commit_sha: nullable String is writable
 
        # Count of comments made on the pull request diff.
-       var review_comments: Int is writable
+       var review_comments: nullable Int is writable
 
        # Pull request head (can be a commit SHA or a branch name).
        var head: PullRef is writable
@@ -861,7 +823,7 @@ class PullRequest
        var base: PullRef is writable
 
        # Is this pull request merged?
-       var merged: Bool is writable
+       var merged: nullable Bool is writable
 
        # Is this pull request mergeable?
        var mergeable: nullable Bool is writable
@@ -869,22 +831,22 @@ class PullRequest
        # Mergeable state of this pull request.
        #
        # See <https://developer.github.com/v3/pulls/#list-pull-requests>.
-       var mergeable_state: String is writable
+       var mergeable_state: nullable String is writable
 
        # User that merged this pull request (if any).
        var merged_by: nullable User is writable
 
        # Count of commits in this pull request.
-       var commits: Int is writable
+       var commits: nullable Int is writable
 
        # Added line count.
-       var additions: Int is writable
+       var additions: nullable Int is writable
 
        # Deleted line count.
-       var deletions: Int is writable
+       var deletions: nullable Int is writable
 
        # Changed files count.
-       var changed_files: Int is writable
+       var changed_files: nullable Int is writable
 
        # URL to patch file
        var patch_url: nullable String is writable
index ff67214..472b0dc 100644 (file)
@@ -1 +1 @@
-[{"name":"master","commit":{"sha":"9248f1c81c08b6c0ec7785678dbb1d7440b885d9","url":"https://api.github.com/repos/nitlang/nit/commits/9248f1c81c08b6c0ec7785678dbb1d7440b885d9"},"protected":true},{"name":"next","commit":{"sha":"9248f1c81c08b6c0ec7785678dbb1d7440b885d9","url":"https://api.github.com/repos/nitlang/nit/commits/9248f1c81c08b6c0ec7785678dbb1d7440b885d9"},"protected":false}]
\ No newline at end of file
+[{"name":"master","commit":{"sha":"8fd264ae263d5418c56671414b9788c5d67621b4","url":"https://api.github.com/repos/nitlang/nit/commits/8fd264ae263d5418c56671414b9788c5d67621b4"},"protected":true},{"name":"next","commit":{"sha":"9248f1c81c08b6c0ec7785678dbb1d7440b885d9","url":"https://api.github.com/repos/nitlang/nit/commits/9248f1c81c08b6c0ec7785678dbb1d7440b885d9"},"protected":false}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_issues_comments_nit.res b/lib/github/tests/mock/repo_issues_comments_nit.res
new file mode 100644 (file)
index 0000000..bf10fff
--- /dev/null
@@ -0,0 +1 @@
+[{"url":"https://api.github.com/repos/nitlang/nit/issues/comments/66562728","html_url":"https://github.com/nitlang/nit/pull/1000#issuecomment-66562728","issue_url":"https://api.github.com/repos/nitlang/nit/issues/1000","id":66562728,"node_id":"MDEyOklzc3VlQ29tbWVudDY2NTYyNzI4","user":{"login":"R4PaSs","id":1444825,"node_id":"MDQ6VXNlcjE0NDQ4MjU=","avatar_url":"https://avatars3.githubusercontent.com/u/1444825?v=4","gravatar_id":"","url":"https://api.github.com/users/R4PaSs","html_url":"https://github.com/R4PaSs","followers_url":"https://api.github.com/users/R4PaSs/followers","following_url":"https://api.github.com/users/R4PaSs/following{/other_user}","gists_url":"https://api.github.com/users/R4PaSs/gists{/gist_id}","starred_url":"https://api.github.com/users/R4PaSs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/R4PaSs/subscriptions","organizations_url":"https://api.github.com/users/R4PaSs/orgs","repos_url":"https://api.github.com/users/R4PaSs/repos","events_url":"https://api.github.com/users/R4PaSs/events{/privacy}","received_events_url":"https://api.github.com/users/R4PaSs/received_events","type":"User","site_admin":false},"created_at":"2014-12-11T03:05:01Z","updated_at":"2014-12-11T03:05:01Z","author_association":"CONTRIBUTOR","body":"The king is dead, long live the king.\n"},{"url":"https://api.github.com/repos/nitlang/nit/issues/comments/66562735","html_url":"https://github.com/nitlang/nit/pull/1000#issuecomment-66562735","issue_url":"https://api.github.com/repos/nitlang/nit/issues/1000","id":66562735,"node_id":"MDEyOklzc3VlQ29tbWVudDY2NTYyNzM1","user":{"login":"R4PaSs","id":1444825,"node_id":"MDQ6VXNlcjE0NDQ4MjU=","avatar_url":"https://avatars3.githubusercontent.com/u/1444825?v=4","gravatar_id":"","url":"https://api.github.com/users/R4PaSs","html_url":"https://github.com/R4PaSs","followers_url":"https://api.github.com/users/R4PaSs/followers","following_url":"https://api.github.com/users/R4PaSs/following{/other_user}","gists_url":"https://api.github.com/users/R4PaSs/gists{/gist_id}","starred_url":"https://api.github.com/users/R4PaSs/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/R4PaSs/subscriptions","organizations_url":"https://api.github.com/users/R4PaSs/orgs","repos_url":"https://api.github.com/users/R4PaSs/repos","events_url":"https://api.github.com/users/R4PaSs/events{/privacy}","received_events_url":"https://api.github.com/users/R4PaSs/received_events","type":"User","site_admin":false},"created_at":"2014-12-11T03:05:07Z","updated_at":"2014-12-11T03:05:07Z","author_association":"CONTRIBUTOR","body":"+1\n"},{"url":"https://api.github.com/repos/nitlang/nit/issues/comments/66563386","html_url":"https://github.com/nitlang/nit/pull/1000#issuecomment-66563386","issue_url":"https://api.github.com/repos/nitlang/nit/issues/1000","id":66563386,"node_id":"MDEyOklzc3VlQ29tbWVudDY2NTYzMzg2","user":{"login":"xymus","id":208057,"node_id":"MDQ6VXNlcjIwODA1Nw==","avatar_url":"https://avatars0.githubusercontent.com/u/208057?v=4","gravatar_id":"","url":"https://api.github.com/users/xymus","html_url":"https://github.com/xymus","followers_url":"https://api.github.com/users/xymus/followers","following_url":"https://api.github.com/users/xymus/following{/other_user}","gists_url":"https://api.github.com/users/xymus/gists{/gist_id}","starred_url":"https://api.github.com/users/xymus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xymus/subscriptions","organizations_url":"https://api.github.com/users/xymus/orgs","repos_url":"https://api.github.com/users/xymus/repos","events_url":"https://api.github.com/users/xymus/events{/privacy}","received_events_url":"https://api.github.com/users/xymus/received_events","type":"User","site_admin":false},"created_at":"2014-12-11T03:15:31Z","updated_at":"2014-12-11T03:15:31Z","author_association":"CONTRIBUTOR","body":"Je seconde Lucas, +1, mais je crains qu'il faudra aussi mettre à jour plusieurs contrib!\n"}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_issues_events_nit.res b/lib/github/tests/mock/repo_issues_events_nit.res
new file mode 100644 (file)
index 0000000..8fad615
--- /dev/null
@@ -0,0 +1 @@
+[{"id":205931537,"node_id":"MDEyOkxhYmVsZWRFdmVudDIwNTkzMTUzNw==","url":"https://api.github.com/repos/nitlang/nit/issues/events/205931537","actor":{"login":"privat","id":135828,"node_id":"MDQ6VXNlcjEzNTgyOA==","avatar_url":"https://avatars1.githubusercontent.com/u/135828?v=4","gravatar_id":"","url":"https://api.github.com/users/privat","html_url":"https://github.com/privat","followers_url":"https://api.github.com/users/privat/followers","following_url":"https://api.github.com/users/privat/following{/other_user}","gists_url":"https://api.github.com/users/privat/gists{/gist_id}","starred_url":"https://api.github.com/users/privat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privat/subscriptions","organizations_url":"https://api.github.com/users/privat/orgs","repos_url":"https://api.github.com/users/privat/repos","events_url":"https://api.github.com/users/privat/events{/privacy}","received_events_url":"https://api.github.com/users/privat/received_events","type":"User","site_admin":false},"event":"labeled","commit_id":null,"commit_url":null,"created_at":"2014-12-11T02:55:15Z","label":{"name":"need_review","color":"fbca04"}},{"id":205944886,"node_id":"MDIzOkhlYWRSZWZGb3JjZVB1c2hlZEV2ZW50MjA1OTQ0ODg2","url":"https://api.github.com/repos/nitlang/nit/issues/events/205944886","actor":{"login":"privat","id":135828,"node_id":"MDQ6VXNlcjEzNTgyOA==","avatar_url":"https://avatars1.githubusercontent.com/u/135828?v=4","gravatar_id":"","url":"https://api.github.com/users/privat","html_url":"https://github.com/privat","followers_url":"https://api.github.com/users/privat/followers","following_url":"https://api.github.com/users/privat/following{/other_user}","gists_url":"https://api.github.com/users/privat/gists{/gist_id}","starred_url":"https://api.github.com/users/privat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privat/subscriptions","organizations_url":"https://api.github.com/users/privat/orgs","repos_url":"https://api.github.com/users/privat/repos","events_url":"https://api.github.com/users/privat/events{/privacy}","received_events_url":"https://api.github.com/users/privat/received_events","type":"User","site_admin":false},"event":"head_ref_force_pushed","commit_id":null,"commit_url":null,"created_at":"2014-12-11T03:49:46Z"},{"id":205946351,"node_id":"MDE0Ok1lbnRpb25lZEV2ZW50MjA1OTQ2MzUx","url":"https://api.github.com/repos/nitlang/nit/issues/events/205946351","actor":{"login":"xymus","id":208057,"node_id":"MDQ6VXNlcjIwODA1Nw==","avatar_url":"https://avatars0.githubusercontent.com/u/208057?v=4","gravatar_id":"","url":"https://api.github.com/users/xymus","html_url":"https://github.com/xymus","followers_url":"https://api.github.com/users/xymus/followers","following_url":"https://api.github.com/users/xymus/following{/other_user}","gists_url":"https://api.github.com/users/xymus/gists{/gist_id}","starred_url":"https://api.github.com/users/xymus/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xymus/subscriptions","organizations_url":"https://api.github.com/users/xymus/orgs","repos_url":"https://api.github.com/users/xymus/repos","events_url":"https://api.github.com/users/xymus/events{/privacy}","received_events_url":"https://api.github.com/users/xymus/received_events","type":"User","site_admin":false},"event":"mentioned","commit_id":null,"commit_url":null,"created_at":"2014-12-11T03:55:37Z"}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_issues_nit.res b/lib/github/tests/mock/repo_issues_nit.res
new file mode 100644 (file)
index 0000000..43ca3f2
--- /dev/null
@@ -0,0 +1 @@
+[{"url":"https://api.github.com/repos/nitlang/nit/issues/2755","repository_url":"https://api.github.com/repos/nitlang/nit","labels_url":"https://api.github.com/repos/nitlang/nit/issues/2755/labels{/name}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2755/comments","events_url":"https://api.github.com/repos/nitlang/nit/issues/2755/events","html_url":"https://github.com/nitlang/nit/pull/2755","id":458934924,"node_id":"MDExOlB1bGxSZXF1ZXN0MjkwNDEzOTAw","number":2755,"title":"nitrpg: Move `nitrpg` to its own repository","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2019-06-20T23:34:44Z","updated_at":"2019-06-21T00:45:47Z","closed_at":null,"author_association":"MEMBER","pull_request":{"url":"https://api.github.com/repos/nitlang/nit/pulls/2755","html_url":"https://github.com/nitlang/nit/pull/2755","diff_url":"https://github.com/nitlang/nit/pull/2755.diff","patch_url":"https://github.com/nitlang/nit/pull/2755.patch"},"body":"`nitrpg` is broken since a long time. I think https:/api.github.com actually changed twice since it broke. I don't plan on killing it yet but I moved it to its own repository until I worked again on it (or never).\r\n\r\nSee https://github.com/Morriar/nitrpg.\r\n\r\nSigned-off-by: Alexandre Terrasa <alexandre@moz-code.org>"},{"url":"https://api.github.com/repos/nitlang/nit/issues/2754","repository_url":"https://api.github.com/repos/nitlang/nit","labels_url":"https://api.github.com/repos/nitlang/nit/issues/2754/labels{/name}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2754/comments","events_url":"https://api.github.com/repos/nitlang/nit/issues/2754/events","html_url":"https://github.com/nitlang/nit/pull/2754","id":458805732,"node_id":"MDExOlB1bGxSZXF1ZXN0MjkwMzI2MTEw","number":2754,"title":"First (and small) integration of the ICU library in Nit : locale and case modification","user":{"login":"anadaouda","id":36400538,"node_id":"MDQ6VXNlcjM2NDAwNTM4","avatar_url":"https://avatars1.githubusercontent.com/u/36400538?v=4","gravatar_id":"","url":"https://api.github.com/users/anadaouda","html_url":"https://github.com/anadaouda","followers_url":"https://api.github.com/users/anadaouda/followers","following_url":"https://api.github.com/users/anadaouda/following{/other_user}","gists_url":"https://api.github.com/users/anadaouda/gists{/gist_id}","starred_url":"https://api.github.com/users/anadaouda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anadaouda/subscriptions","organizations_url":"https://api.github.com/users/anadaouda/orgs","repos_url":"https://api.github.com/users/anadaouda/repos","events_url":"https://api.github.com/users/anadaouda/events{/privacy}","received_events_url":"https://api.github.com/users/anadaouda/received_events","type":"User","site_admin":false},"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2019-06-20T18:28:52Z","updated_at":"2019-06-20T18:48:05Z","closed_at":null,"author_association":"FIRST_TIMER","pull_request":{"url":"https://api.github.com/repos/nitlang/nit/pulls/2754","html_url":"https://github.com/nitlang/nit/pull/2754","diff_url":"https://github.com/nitlang/nit/pull/2754.diff","patch_url":"https://github.com/nitlang/nit/pull/2754.patch"},"body":"## ICU\r\nICU (International Components for Unicode) is an API which implements algorithms provided by the Unicode Consortium in C.\r\n\r\n## locale.nit\r\nLocale object which makes sure that the name of the locale is valid and handled by the ICU library\r\n\r\n## caseModification.nit\r\nAddition of `uppercase`, `lowercase` and `title` in the `String` and `CString` classes using a `CaseModification` object."},{"url":"https://api.github.com/repos/nitlang/nit/issues/2753","repository_url":"https://api.github.com/repos/nitlang/nit","labels_url":"https://api.github.com/repos/nitlang/nit/issues/2753/labels{/name}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2753/comments","events_url":"https://api.github.com/repos/nitlang/nit/issues/2753/events","html_url":"https://github.com/nitlang/nit/pull/2753","id":457781476,"node_id":"MDExOlB1bGxSZXF1ZXN0Mjg5NTE5NzM0","number":2753,"title":"Mock Github API tests","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false},{"id":225254102,"node_id":"MDU6TGFiZWwyMjUyNTQxMDI=","url":"https://api.github.com/repos/nitlang/nit/labels/tests_are_ok","name":"tests_are_ok","color":"00b800","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":1,"created_at":"2019-06-19T02:53:50Z","updated_at":"2019-06-20T18:27:49Z","closed_at":null,"author_association":"MEMBER","pull_request":{"url":"https://api.github.com/repos/nitlang/nit/pulls/2753","html_url":"https://github.com/nitlang/nit/pull/2753","diff_url":"https://github.com/nitlang/nit/pull/2753.diff","patch_url":"https://github.com/nitlang/nit/pull/2753.patch"},"body":"This PR adds a mock to GithubAPI so we can avoid sending requests to the API on CI.\r\n\r\nFor each API call we save the actual Github response body from the API and reuse it during the tests.\r\nThe attribute `update_responses_cache` can be set to `true` so the cache files are updated from the API when `nitunit` is called."}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_labels_nit.res b/lib/github/tests/mock/repo_labels_nit.res
new file mode 100644 (file)
index 0000000..b2856da
--- /dev/null
@@ -0,0 +1 @@
+[{"id":87474920,"node_id":"MDU6TGFiZWw4NzQ3NDkyMA==","url":"https://api.github.com/repos/nitlang/nit/labels/API","name":"API","color":"006b75","default":false},{"id":243644303,"node_id":"MDU6TGFiZWwyNDM2NDQzMDM=","url":"https://api.github.com/repos/nitlang/nit/labels/Feature%20Request","name":"Feature Request","color":"d4c5f9","default":false},{"id":250684857,"node_id":"MDU6TGFiZWwyNTA2ODQ4NTc=","url":"https://api.github.com/repos/nitlang/nit/labels/NEP","name":"NEP","color":"50a0ff","default":false}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_milestones_nit.res b/lib/github/tests/mock/repo_milestones_nit.res
new file mode 100644 (file)
index 0000000..071bf39
--- /dev/null
@@ -0,0 +1 @@
+[{"url":"https://api.github.com/repos/nitlang/nit/milestones/4","html_url":"https://github.com/nitlang/nit/milestone/4","labels_url":"https://api.github.com/repos/nitlang/nit/milestones/4/labels","id":795157,"node_id":"MDk6TWlsZXN0b25lNzk1MTU3","number":4,"title":"v1.0prealpha","description":"The first public version that we are proud off and can be used sanely by non Nit people.","creator":{"login":"privat","id":135828,"node_id":"MDQ6VXNlcjEzNTgyOA==","avatar_url":"https://avatars1.githubusercontent.com/u/135828?v=4","gravatar_id":"","url":"https://api.github.com/users/privat","html_url":"https://github.com/privat","followers_url":"https://api.github.com/users/privat/followers","following_url":"https://api.github.com/users/privat/following{/other_user}","gists_url":"https://api.github.com/users/privat/gists{/gist_id}","starred_url":"https://api.github.com/users/privat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privat/subscriptions","organizations_url":"https://api.github.com/users/privat/orgs","repos_url":"https://api.github.com/users/privat/repos","events_url":"https://api.github.com/users/privat/events{/privacy}","received_events_url":"https://api.github.com/users/privat/received_events","type":"User","site_admin":false},"open_issues":22,"closed_issues":22,"state":"open","created_at":"2014-09-19T00:16:45Z","updated_at":"2017-06-02T12:43:15Z","due_on":null,"closed_at":null},{"url":"https://api.github.com/repos/nitlang/nit/milestones/5","html_url":"https://github.com/nitlang/nit/milestone/5","labels_url":"https://api.github.com/repos/nitlang/nit/milestones/5/labels","id":904285,"node_id":"MDk6TWlsZXN0b25lOTA0Mjg1","number":5,"title":"nitdoc - Structured Documentation","description":"Display the documentation as a user manual and with reading suggestions.","creator":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"open_issues":6,"closed_issues":7,"state":"open","created_at":"2014-12-15T13:49:19Z","updated_at":"2018-06-21T12:50:02Z","due_on":null,"closed_at":null},{"url":"https://api.github.com/repos/nitlang/nit/milestones/6","html_url":"https://github.com/nitlang/nit/milestone/6","labels_url":"https://api.github.com/repos/nitlang/nit/milestones/6/labels","id":904291,"node_id":"MDk6TWlsZXN0b25lOTA0Mjkx","number":6,"title":"nitdoc - Abstraction levels","description":"Provide abstraction mecanisms for lists and tress, diagrams and figures, source code presentation.","creator":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"open_issues":2,"closed_issues":0,"state":"open","created_at":"2014-12-15T13:52:04Z","updated_at":"2014-12-15T15:37:50Z","due_on":null,"closed_at":null}]
\ No newline at end of file
diff --git a/lib/github/tests/mock/repo_pulls_nit.res b/lib/github/tests/mock/repo_pulls_nit.res
new file mode 100644 (file)
index 0000000..ecdc180
--- /dev/null
@@ -0,0 +1 @@
+[{"url":"https://api.github.com/repos/nitlang/nit/pulls/2755","id":290413900,"node_id":"MDExOlB1bGxSZXF1ZXN0MjkwNDEzOTAw","html_url":"https://github.com/nitlang/nit/pull/2755","diff_url":"https://github.com/nitlang/nit/pull/2755.diff","patch_url":"https://github.com/nitlang/nit/pull/2755.patch","issue_url":"https://api.github.com/repos/nitlang/nit/issues/2755","number":2755,"state":"open","locked":false,"title":"nitrpg: Move `nitrpg` to its own repository","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"body":"`nitrpg` is broken since a long time. I think https:/api.github.com actually changed twice since it broke. I don't plan on killing it yet but I moved it to its own repository until I worked again on it (or never).\r\n\r\nSee https://github.com/Morriar/nitrpg.\r\n\r\nSigned-off-by: Alexandre Terrasa <alexandre@moz-code.org>","created_at":"2019-06-20T23:34:44Z","updated_at":"2019-06-21T00:45:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1acf6cf46daaebea63410ee86a365ecf4eb291f3","assignee":null,"assignees":[],"requested_reviewers":[{"login":"privat","id":135828,"node_id":"MDQ6VXNlcjEzNTgyOA==","avatar_url":"https://avatars1.githubusercontent.com/u/135828?v=4","gravatar_id":"","url":"https://api.github.com/users/privat","html_url":"https://github.com/privat","followers_url":"https://api.github.com/users/privat/followers","following_url":"https://api.github.com/users/privat/following{/other_user}","gists_url":"https://api.github.com/users/privat/gists{/gist_id}","starred_url":"https://api.github.com/users/privat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privat/subscriptions","organizations_url":"https://api.github.com/users/privat/orgs","repos_url":"https://api.github.com/users/privat/repos","events_url":"https://api.github.com/users/privat/events{/privacy}","received_events_url":"https://api.github.com/users/privat/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/nitlang/nit/pulls/2755/commits","review_comments_url":"https://api.github.com/repos/nitlang/nit/pulls/2755/comments","review_comment_url":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2755/comments","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/5dbab8fac6905d57abf78076c58916b0b34b35ce","head":{"label":"Morriar:at-move-nitrpg","ref":"at-move-nitrpg","sha":"5dbab8fac6905d57abf78076c58916b0b34b35ce","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"repo":{"id":1456691,"node_id":"MDEwOlJlcG9zaXRvcnkxNDU2Njkx","name":"nit","full_name":"Morriar/nit","private":false,"owner":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Morriar/nit","description":"Nit language","fork":true,"url":"https://api.github.com/repos/Morriar/nit","forks_url":"https://api.github.com/repos/Morriar/nit/forks","keys_url":"https://api.github.com/repos/Morriar/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Morriar/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Morriar/nit/teams","hooks_url":"https://api.github.com/repos/Morriar/nit/hooks","issue_events_url":"https://api.github.com/repos/Morriar/nit/issues/events{/number}","events_url":"https://api.github.com/repos/Morriar/nit/events","assignees_url":"https://api.github.com/repos/Morriar/nit/assignees{/user}","branches_url":"https://api.github.com/repos/Morriar/nit/branches{/branch}","tags_url":"https://api.github.com/repos/Morriar/nit/tags","blobs_url":"https://api.github.com/repos/Morriar/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Morriar/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Morriar/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/Morriar/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Morriar/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/Morriar/nit/languages","stargazers_url":"https://api.github.com/repos/Morriar/nit/stargazers","contributors_url":"https://api.github.com/repos/Morriar/nit/contributors","subscribers_url":"https://api.github.com/repos/Morriar/nit/subscribers","subscription_url":"https://api.github.com/repos/Morriar/nit/subscription","commits_url":"https://api.github.com/repos/Morriar/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/Morriar/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/Morriar/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/Morriar/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/Morriar/nit/contents/{+path}","compare_url":"https://api.github.com/repos/Morriar/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Morriar/nit/merges","archive_url":"https://api.github.com/repos/Morriar/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Morriar/nit/downloads","issues_url":"https://api.github.com/repos/Morriar/nit/issues{/number}","pulls_url":"https://api.github.com/repos/Morriar/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/Morriar/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/Morriar/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Morriar/nit/labels{/name}","releases_url":"https://api.github.com/repos/Morriar/nit/releases{/id}","deployments_url":"https://api.github.com/repos/Morriar/nit/deployments","created_at":"2011-03-08T22:16:33Z","updated_at":"2018-08-23T01:37:28Z","pushed_at":"2019-06-20T23:32:07Z","git_url":"git://github.com/Morriar/nit.git","ssh_url":"git@github.com:Morriar/nit.git","clone_url":"https://github.com/Morriar/nit.git","svn_url":"https://github.com/Morriar/nit","homepage":"http://nitlanguage.org","size":208064,"stargazers_count":2,"watchers_count":2,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":16,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":16,"watchers":2,"default_branch":"master"}},"base":{"label":"nitlang:master","ref":"master","sha":"8fd264ae263d5418c56671414b9788c5d67621b4","user":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"repo":{"id":328597,"node_id":"MDEwOlJlcG9zaXRvcnkzMjg1OTc=","name":"nit","full_name":"nitlang/nit","private":false,"owner":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/nitlang/nit","description":"Nit language","fork":false,"url":"https://api.github.com/repos/nitlang/nit","forks_url":"https://api.github.com/repos/nitlang/nit/forks","keys_url":"https://api.github.com/repos/nitlang/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nitlang/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nitlang/nit/teams","hooks_url":"https://api.github.com/repos/nitlang/nit/hooks","issue_events_url":"https://api.github.com/repos/nitlang/nit/issues/events{/number}","events_url":"https://api.github.com/repos/nitlang/nit/events","assignees_url":"https://api.github.com/repos/nitlang/nit/assignees{/user}","branches_url":"https://api.github.com/repos/nitlang/nit/branches{/branch}","tags_url":"https://api.github.com/repos/nitlang/nit/tags","blobs_url":"https://api.github.com/repos/nitlang/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nitlang/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nitlang/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/nitlang/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/nitlang/nit/languages","stargazers_url":"https://api.github.com/repos/nitlang/nit/stargazers","contributors_url":"https://api.github.com/repos/nitlang/nit/contributors","subscribers_url":"https://api.github.com/repos/nitlang/nit/subscribers","subscription_url":"https://api.github.com/repos/nitlang/nit/subscription","commits_url":"https://api.github.com/repos/nitlang/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/nitlang/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/nitlang/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/nitlang/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/nitlang/nit/contents/{+path}","compare_url":"https://api.github.com/repos/nitlang/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nitlang/nit/merges","archive_url":"https://api.github.com/repos/nitlang/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nitlang/nit/downloads","issues_url":"https://api.github.com/repos/nitlang/nit/issues{/number}","pulls_url":"https://api.github.com/repos/nitlang/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/nitlang/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/nitlang/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nitlang/nit/labels{/name}","releases_url":"https://api.github.com/repos/nitlang/nit/releases{/id}","deployments_url":"https://api.github.com/repos/nitlang/nit/deployments","created_at":"2009-10-06T15:03:00Z","updated_at":"2019-06-20T18:53:54Z","pushed_at":"2019-06-20T23:34:45Z","git_url":"git://github.com/nitlang/nit.git","ssh_url":"git@github.com:nitlang/nit.git","clone_url":"https://github.com/nitlang/nit.git","svn_url":"https://github.com/nitlang/nit","homepage":"http://nitlanguage.org","size":123163,"stargazers_count":187,"watchers_count":187,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":58,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":174,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":58,"open_issues":174,"watchers":187,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2755"},"html":{"href":"https://github.com/nitlang/nit/pull/2755"},"issue":{"href":"https://api.github.com/repos/nitlang/nit/issues/2755"},"comments":{"href":"https://api.github.com/repos/nitlang/nit/issues/2755/comments"},"review_comments":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2755/comments"},"review_comment":{"href":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2755/commits"},"statuses":{"href":"https://api.github.com/repos/nitlang/nit/statuses/5dbab8fac6905d57abf78076c58916b0b34b35ce"}},"author_association":"MEMBER"},{"url":"https://api.github.com/repos/nitlang/nit/pulls/2754","id":290326110,"node_id":"MDExOlB1bGxSZXF1ZXN0MjkwMzI2MTEw","html_url":"https://github.com/nitlang/nit/pull/2754","diff_url":"https://github.com/nitlang/nit/pull/2754.diff","patch_url":"https://github.com/nitlang/nit/pull/2754.patch","issue_url":"https://api.github.com/repos/nitlang/nit/issues/2754","number":2754,"state":"open","locked":false,"title":"First (and small) integration of the ICU library in Nit : locale and case modification","user":{"login":"anadaouda","id":36400538,"node_id":"MDQ6VXNlcjM2NDAwNTM4","avatar_url":"https://avatars1.githubusercontent.com/u/36400538?v=4","gravatar_id":"","url":"https://api.github.com/users/anadaouda","html_url":"https://github.com/anadaouda","followers_url":"https://api.github.com/users/anadaouda/followers","following_url":"https://api.github.com/users/anadaouda/following{/other_user}","gists_url":"https://api.github.com/users/anadaouda/gists{/gist_id}","starred_url":"https://api.github.com/users/anadaouda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anadaouda/subscriptions","organizations_url":"https://api.github.com/users/anadaouda/orgs","repos_url":"https://api.github.com/users/anadaouda/repos","events_url":"https://api.github.com/users/anadaouda/events{/privacy}","received_events_url":"https://api.github.com/users/anadaouda/received_events","type":"User","site_admin":false},"body":"## ICU\r\nICU (International Components for Unicode) is an API which implements algorithms provided by the Unicode Consortium in C.\r\n\r\n## locale.nit\r\nLocale object which makes sure that the name of the locale is valid and handled by the ICU library\r\n\r\n## caseModification.nit\r\nAddition of `uppercase`, `lowercase` and `title` in the `String` and `CString` classes using a `CaseModification` object.","created_at":"2019-06-20T18:28:52Z","updated_at":"2019-06-20T18:48:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b4da82a7ab077e2c08741a576c3d920f09d22a84","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/nitlang/nit/pulls/2754/commits","review_comments_url":"https://api.github.com/repos/nitlang/nit/pulls/2754/comments","review_comment_url":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2754/comments","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/fbb5f6c481cd45ef2f20f62138723dd428eb060d","head":{"label":"anadaouda:icu","ref":"icu","sha":"fbb5f6c481cd45ef2f20f62138723dd428eb060d","user":{"login":"anadaouda","id":36400538,"node_id":"MDQ6VXNlcjM2NDAwNTM4","avatar_url":"https://avatars1.githubusercontent.com/u/36400538?v=4","gravatar_id":"","url":"https://api.github.com/users/anadaouda","html_url":"https://github.com/anadaouda","followers_url":"https://api.github.com/users/anadaouda/followers","following_url":"https://api.github.com/users/anadaouda/following{/other_user}","gists_url":"https://api.github.com/users/anadaouda/gists{/gist_id}","starred_url":"https://api.github.com/users/anadaouda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anadaouda/subscriptions","organizations_url":"https://api.github.com/users/anadaouda/orgs","repos_url":"https://api.github.com/users/anadaouda/repos","events_url":"https://api.github.com/users/anadaouda/events{/privacy}","received_events_url":"https://api.github.com/users/anadaouda/received_events","type":"User","site_admin":false},"repo":{"id":192944232,"node_id":"MDEwOlJlcG9zaXRvcnkxOTI5NDQyMzI=","name":"nit","full_name":"anadaouda/nit","private":false,"owner":{"login":"anadaouda","id":36400538,"node_id":"MDQ6VXNlcjM2NDAwNTM4","avatar_url":"https://avatars1.githubusercontent.com/u/36400538?v=4","gravatar_id":"","url":"https://api.github.com/users/anadaouda","html_url":"https://github.com/anadaouda","followers_url":"https://api.github.com/users/anadaouda/followers","following_url":"https://api.github.com/users/anadaouda/following{/other_user}","gists_url":"https://api.github.com/users/anadaouda/gists{/gist_id}","starred_url":"https://api.github.com/users/anadaouda/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anadaouda/subscriptions","organizations_url":"https://api.github.com/users/anadaouda/orgs","repos_url":"https://api.github.com/users/anadaouda/repos","events_url":"https://api.github.com/users/anadaouda/events{/privacy}","received_events_url":"https://api.github.com/users/anadaouda/received_events","type":"User","site_admin":false},"html_url":"https://github.com/anadaouda/nit","description":"Nit language","fork":true,"url":"https://api.github.com/repos/anadaouda/nit","forks_url":"https://api.github.com/repos/anadaouda/nit/forks","keys_url":"https://api.github.com/repos/anadaouda/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/anadaouda/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/anadaouda/nit/teams","hooks_url":"https://api.github.com/repos/anadaouda/nit/hooks","issue_events_url":"https://api.github.com/repos/anadaouda/nit/issues/events{/number}","events_url":"https://api.github.com/repos/anadaouda/nit/events","assignees_url":"https://api.github.com/repos/anadaouda/nit/assignees{/user}","branches_url":"https://api.github.com/repos/anadaouda/nit/branches{/branch}","tags_url":"https://api.github.com/repos/anadaouda/nit/tags","blobs_url":"https://api.github.com/repos/anadaouda/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/anadaouda/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/anadaouda/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/anadaouda/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/anadaouda/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/anadaouda/nit/languages","stargazers_url":"https://api.github.com/repos/anadaouda/nit/stargazers","contributors_url":"https://api.github.com/repos/anadaouda/nit/contributors","subscribers_url":"https://api.github.com/repos/anadaouda/nit/subscribers","subscription_url":"https://api.github.com/repos/anadaouda/nit/subscription","commits_url":"https://api.github.com/repos/anadaouda/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/anadaouda/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/anadaouda/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/anadaouda/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/anadaouda/nit/contents/{+path}","compare_url":"https://api.github.com/repos/anadaouda/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/anadaouda/nit/merges","archive_url":"https://api.github.com/repos/anadaouda/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/anadaouda/nit/downloads","issues_url":"https://api.github.com/repos/anadaouda/nit/issues{/number}","pulls_url":"https://api.github.com/repos/anadaouda/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/anadaouda/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/anadaouda/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/anadaouda/nit/labels{/name}","releases_url":"https://api.github.com/repos/anadaouda/nit/releases{/id}","deployments_url":"https://api.github.com/repos/anadaouda/nit/deployments","created_at":"2019-06-20T15:25:48Z","updated_at":"2019-06-20T18:32:09Z","pushed_at":"2019-06-20T18:03:33Z","git_url":"git://github.com/anadaouda/nit.git","ssh_url":"git@github.com:anadaouda/nit.git","clone_url":"https://github.com/anadaouda/nit.git","svn_url":"https://github.com/anadaouda/nit","homepage":"http://nitlanguage.org","size":123094,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"nitlang:master","ref":"master","sha":"9248f1c81c08b6c0ec7785678dbb1d7440b885d9","user":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"repo":{"id":328597,"node_id":"MDEwOlJlcG9zaXRvcnkzMjg1OTc=","name":"nit","full_name":"nitlang/nit","private":false,"owner":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/nitlang/nit","description":"Nit language","fork":false,"url":"https://api.github.com/repos/nitlang/nit","forks_url":"https://api.github.com/repos/nitlang/nit/forks","keys_url":"https://api.github.com/repos/nitlang/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nitlang/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nitlang/nit/teams","hooks_url":"https://api.github.com/repos/nitlang/nit/hooks","issue_events_url":"https://api.github.com/repos/nitlang/nit/issues/events{/number}","events_url":"https://api.github.com/repos/nitlang/nit/events","assignees_url":"https://api.github.com/repos/nitlang/nit/assignees{/user}","branches_url":"https://api.github.com/repos/nitlang/nit/branches{/branch}","tags_url":"https://api.github.com/repos/nitlang/nit/tags","blobs_url":"https://api.github.com/repos/nitlang/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nitlang/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nitlang/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/nitlang/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/nitlang/nit/languages","stargazers_url":"https://api.github.com/repos/nitlang/nit/stargazers","contributors_url":"https://api.github.com/repos/nitlang/nit/contributors","subscribers_url":"https://api.github.com/repos/nitlang/nit/subscribers","subscription_url":"https://api.github.com/repos/nitlang/nit/subscription","commits_url":"https://api.github.com/repos/nitlang/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/nitlang/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/nitlang/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/nitlang/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/nitlang/nit/contents/{+path}","compare_url":"https://api.github.com/repos/nitlang/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nitlang/nit/merges","archive_url":"https://api.github.com/repos/nitlang/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nitlang/nit/downloads","issues_url":"https://api.github.com/repos/nitlang/nit/issues{/number}","pulls_url":"https://api.github.com/repos/nitlang/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/nitlang/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/nitlang/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nitlang/nit/labels{/name}","releases_url":"https://api.github.com/repos/nitlang/nit/releases{/id}","deployments_url":"https://api.github.com/repos/nitlang/nit/deployments","created_at":"2009-10-06T15:03:00Z","updated_at":"2019-06-20T18:53:54Z","pushed_at":"2019-06-20T23:34:45Z","git_url":"git://github.com/nitlang/nit.git","ssh_url":"git@github.com:nitlang/nit.git","clone_url":"https://github.com/nitlang/nit.git","svn_url":"https://github.com/nitlang/nit","homepage":"http://nitlanguage.org","size":123163,"stargazers_count":187,"watchers_count":187,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":58,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":174,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":58,"open_issues":174,"watchers":187,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2754"},"html":{"href":"https://github.com/nitlang/nit/pull/2754"},"issue":{"href":"https://api.github.com/repos/nitlang/nit/issues/2754"},"comments":{"href":"https://api.github.com/repos/nitlang/nit/issues/2754/comments"},"review_comments":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2754/comments"},"review_comment":{"href":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2754/commits"},"statuses":{"href":"https://api.github.com/repos/nitlang/nit/statuses/fbb5f6c481cd45ef2f20f62138723dd428eb060d"}},"author_association":"FIRST_TIME_CONTRIBUTOR"},{"url":"https://api.github.com/repos/nitlang/nit/pulls/2753","id":289519734,"node_id":"MDExOlB1bGxSZXF1ZXN0Mjg5NTE5NzM0","html_url":"https://github.com/nitlang/nit/pull/2753","diff_url":"https://github.com/nitlang/nit/pull/2753.diff","patch_url":"https://github.com/nitlang/nit/pull/2753.patch","issue_url":"https://api.github.com/repos/nitlang/nit/issues/2753","number":2753,"state":"open","locked":false,"title":"Mock Github API tests","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"body":"This PR adds a mock to GithubAPI so we can avoid sending requests to the API on CI.\r\n\r\nFor each API call we save the actual Github response body from the API and reuse it during the tests.\r\nThe attribute `update_responses_cache` can be set to `true` so the cache files are updated from the API when `nitunit` is called.","created_at":"2019-06-19T02:53:50Z","updated_at":"2019-06-20T18:27:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"e28d2edb92bfefd354d6fd4916cb861661d69dcf","assignee":null,"assignees":[],"requested_reviewers":[{"login":"privat","id":135828,"node_id":"MDQ6VXNlcjEzNTgyOA==","avatar_url":"https://avatars1.githubusercontent.com/u/135828?v=4","gravatar_id":"","url":"https://api.github.com/users/privat","html_url":"https://github.com/privat","followers_url":"https://api.github.com/users/privat/followers","following_url":"https://api.github.com/users/privat/following{/other_user}","gists_url":"https://api.github.com/users/privat/gists{/gist_id}","starred_url":"https://api.github.com/users/privat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/privat/subscriptions","organizations_url":"https://api.github.com/users/privat/orgs","repos_url":"https://api.github.com/users/privat/repos","events_url":"https://api.github.com/users/privat/events{/privacy}","received_events_url":"https://api.github.com/users/privat/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":1252784180,"node_id":"MDU6TGFiZWwxMjUyNzg0MTgw","url":"https://api.github.com/repos/nitlang/nit/labels/ok_to_test","name":"ok_to_test","color":"1e179e","default":false},{"id":225254102,"node_id":"MDU6TGFiZWwyMjUyNTQxMDI=","url":"https://api.github.com/repos/nitlang/nit/labels/tests_are_ok","name":"tests_are_ok","color":"00b800","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/nitlang/nit/pulls/2753/commits","review_comments_url":"https://api.github.com/repos/nitlang/nit/pulls/2753/comments","review_comment_url":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/nitlang/nit/issues/2753/comments","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/5c19395e548326c9d78dff9b274e3e7b93c1704f","head":{"label":"Morriar:at-github_mock","ref":"at-github_mock","sha":"5c19395e548326c9d78dff9b274e3e7b93c1704f","user":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"repo":{"id":1456691,"node_id":"MDEwOlJlcG9zaXRvcnkxNDU2Njkx","name":"nit","full_name":"Morriar/nit","private":false,"owner":{"login":"Morriar","id":583144,"node_id":"MDQ6VXNlcjU4MzE0NA==","avatar_url":"https://avatars2.githubusercontent.com/u/583144?v=4","gravatar_id":"","url":"https://api.github.com/users/Morriar","html_url":"https://github.com/Morriar","followers_url":"https://api.github.com/users/Morriar/followers","following_url":"https://api.github.com/users/Morriar/following{/other_user}","gists_url":"https://api.github.com/users/Morriar/gists{/gist_id}","starred_url":"https://api.github.com/users/Morriar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Morriar/subscriptions","organizations_url":"https://api.github.com/users/Morriar/orgs","repos_url":"https://api.github.com/users/Morriar/repos","events_url":"https://api.github.com/users/Morriar/events{/privacy}","received_events_url":"https://api.github.com/users/Morriar/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Morriar/nit","description":"Nit language","fork":true,"url":"https://api.github.com/repos/Morriar/nit","forks_url":"https://api.github.com/repos/Morriar/nit/forks","keys_url":"https://api.github.com/repos/Morriar/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Morriar/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Morriar/nit/teams","hooks_url":"https://api.github.com/repos/Morriar/nit/hooks","issue_events_url":"https://api.github.com/repos/Morriar/nit/issues/events{/number}","events_url":"https://api.github.com/repos/Morriar/nit/events","assignees_url":"https://api.github.com/repos/Morriar/nit/assignees{/user}","branches_url":"https://api.github.com/repos/Morriar/nit/branches{/branch}","tags_url":"https://api.github.com/repos/Morriar/nit/tags","blobs_url":"https://api.github.com/repos/Morriar/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Morriar/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Morriar/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/Morriar/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Morriar/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/Morriar/nit/languages","stargazers_url":"https://api.github.com/repos/Morriar/nit/stargazers","contributors_url":"https://api.github.com/repos/Morriar/nit/contributors","subscribers_url":"https://api.github.com/repos/Morriar/nit/subscribers","subscription_url":"https://api.github.com/repos/Morriar/nit/subscription","commits_url":"https://api.github.com/repos/Morriar/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/Morriar/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/Morriar/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/Morriar/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/Morriar/nit/contents/{+path}","compare_url":"https://api.github.com/repos/Morriar/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Morriar/nit/merges","archive_url":"https://api.github.com/repos/Morriar/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Morriar/nit/downloads","issues_url":"https://api.github.com/repos/Morriar/nit/issues{/number}","pulls_url":"https://api.github.com/repos/Morriar/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/Morriar/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/Morriar/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Morriar/nit/labels{/name}","releases_url":"https://api.github.com/repos/Morriar/nit/releases{/id}","deployments_url":"https://api.github.com/repos/Morriar/nit/deployments","created_at":"2011-03-08T22:16:33Z","updated_at":"2018-08-23T01:37:28Z","pushed_at":"2019-06-20T23:32:07Z","git_url":"git://github.com/Morriar/nit.git","ssh_url":"git@github.com:Morriar/nit.git","clone_url":"https://github.com/Morriar/nit.git","svn_url":"https://github.com/Morriar/nit","homepage":"http://nitlanguage.org","size":208064,"stargazers_count":2,"watchers_count":2,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":16,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":2,"open_issues":16,"watchers":2,"default_branch":"master"}},"base":{"label":"nitlang:master","ref":"master","sha":"9248f1c81c08b6c0ec7785678dbb1d7440b885d9","user":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"repo":{"id":328597,"node_id":"MDEwOlJlcG9zaXRvcnkzMjg1OTc=","name":"nit","full_name":"nitlang/nit","private":false,"owner":{"login":"nitlang","id":5420298,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU0MjAyOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/5420298?v=4","gravatar_id":"","url":"https://api.github.com/users/nitlang","html_url":"https://github.com/nitlang","followers_url":"https://api.github.com/users/nitlang/followers","following_url":"https://api.github.com/users/nitlang/following{/other_user}","gists_url":"https://api.github.com/users/nitlang/gists{/gist_id}","starred_url":"https://api.github.com/users/nitlang/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nitlang/subscriptions","organizations_url":"https://api.github.com/users/nitlang/orgs","repos_url":"https://api.github.com/users/nitlang/repos","events_url":"https://api.github.com/users/nitlang/events{/privacy}","received_events_url":"https://api.github.com/users/nitlang/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/nitlang/nit","description":"Nit language","fork":false,"url":"https://api.github.com/repos/nitlang/nit","forks_url":"https://api.github.com/repos/nitlang/nit/forks","keys_url":"https://api.github.com/repos/nitlang/nit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/nitlang/nit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/nitlang/nit/teams","hooks_url":"https://api.github.com/repos/nitlang/nit/hooks","issue_events_url":"https://api.github.com/repos/nitlang/nit/issues/events{/number}","events_url":"https://api.github.com/repos/nitlang/nit/events","assignees_url":"https://api.github.com/repos/nitlang/nit/assignees{/user}","branches_url":"https://api.github.com/repos/nitlang/nit/branches{/branch}","tags_url":"https://api.github.com/repos/nitlang/nit/tags","blobs_url":"https://api.github.com/repos/nitlang/nit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/nitlang/nit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/nitlang/nit/git/refs{/sha}","trees_url":"https://api.github.com/repos/nitlang/nit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/nitlang/nit/statuses/{sha}","languages_url":"https://api.github.com/repos/nitlang/nit/languages","stargazers_url":"https://api.github.com/repos/nitlang/nit/stargazers","contributors_url":"https://api.github.com/repos/nitlang/nit/contributors","subscribers_url":"https://api.github.com/repos/nitlang/nit/subscribers","subscription_url":"https://api.github.com/repos/nitlang/nit/subscription","commits_url":"https://api.github.com/repos/nitlang/nit/commits{/sha}","git_commits_url":"https://api.github.com/repos/nitlang/nit/git/commits{/sha}","comments_url":"https://api.github.com/repos/nitlang/nit/comments{/number}","issue_comment_url":"https://api.github.com/repos/nitlang/nit/issues/comments{/number}","contents_url":"https://api.github.com/repos/nitlang/nit/contents/{+path}","compare_url":"https://api.github.com/repos/nitlang/nit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/nitlang/nit/merges","archive_url":"https://api.github.com/repos/nitlang/nit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/nitlang/nit/downloads","issues_url":"https://api.github.com/repos/nitlang/nit/issues{/number}","pulls_url":"https://api.github.com/repos/nitlang/nit/pulls{/number}","milestones_url":"https://api.github.com/repos/nitlang/nit/milestones{/number}","notifications_url":"https://api.github.com/repos/nitlang/nit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/nitlang/nit/labels{/name}","releases_url":"https://api.github.com/repos/nitlang/nit/releases{/id}","deployments_url":"https://api.github.com/repos/nitlang/nit/deployments","created_at":"2009-10-06T15:03:00Z","updated_at":"2019-06-20T18:53:54Z","pushed_at":"2019-06-20T23:34:45Z","git_url":"git://github.com/nitlang/nit.git","ssh_url":"git@github.com:nitlang/nit.git","clone_url":"https://github.com/nitlang/nit.git","svn_url":"https://github.com/nitlang/nit","homepage":"http://nitlanguage.org","size":123163,"stargazers_count":187,"watchers_count":187,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":58,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":174,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":58,"open_issues":174,"watchers":187,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2753"},"html":{"href":"https://github.com/nitlang/nit/pull/2753"},"issue":{"href":"https://api.github.com/repos/nitlang/nit/issues/2753"},"comments":{"href":"https://api.github.com/repos/nitlang/nit/issues/2753/comments"},"review_comments":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2753/comments"},"review_comment":{"href":"https://api.github.com/repos/nitlang/nit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/nitlang/nit/pulls/2753/commits"},"statuses":{"href":"https://api.github.com/repos/nitlang/nit/statuses/5c19395e548326c9d78dff9b274e3e7b93c1704f"}},"author_association":"MEMBER"}]
\ No newline at end of file
index a2ea73d..0ed3234 100644 (file)
@@ -57,13 +57,19 @@ class MockGithubAPI
                map["/user"] = "user_Morriar"
                map["/users/Morriar"] = "user_Morriar"
                map["/repos/nitlang/nit"] = "repo_nit"
+               map["/repos/nitlang/nit/labels?page=1&per_page=3"] = "repo_labels_nit"
                map["/repos/nitlang/nit/labels/ok_will_merge"] = "repo_labels_ok_will_merge"
+               map["/repos/nitlang/nit/milestones?page=1&per_page=3"] = "repo_milestones_nit"
                map["/repos/nitlang/nit/milestones/4"] = "repo_milestones_4"
-               map["/repos/nitlang/nit/branches"] = "repo_branches_nit"
+               map["/repos/nitlang/nit/branches?page=1&per_page=2"] = "repo_branches_nit"
                map["/repos/nitlang/nit/branches/master"] = "repo_branches_master"
+               map["/repos/nitlang/nit/issues?page=1&per_page=3"] = "repo_issues_nit"
                map["/repos/nitlang/nit/issues/1000"] = "repo_issues_1000"
+               map["/repos/nitlang/nit/issues/1000/comments?page=1&per_page=3"] = "repo_issues_comments_nit"
                map["/repos/nitlang/nit/issues/comments/6020149"] = "repo_issues_comments_6020149"
+               map["/repos/nitlang/nit/issues/1000/events?page=1&per_page=3"] = "repo_issues_events_nit"
                map["/repos/nitlang/nit/issues/events/199674194"] = "repo_issues_events_199674194"
+               map["/repos/nitlang/nit/pulls?page=1&per_page=3"] = "repo_pulls_nit"
                map["/repos/nitlang/nit/pulls/1000"] = "repo_pulls_1000"
                map["/repos/nitlang/nit/commits/64ce1f"] = "repo_commits_64ce1f"
                map["/repos/nitlang/nit/comments/8982707"] = "repo_comments_8982707"
@@ -215,17 +221,48 @@ class TestGithubAPI
        private var repo: Repo is lazy do return api.get_repo("nitlang/nit").as(not null)
 
        fun test_get_branches is test do
-               var branches = api.get_repo_branches(repo)
+               var branches = api.get_repo_branches(repo, 1, 2)
                assert branches.length == 2
                assert branches.first.name == "master"
                assert branches.last.name == "next"
        end
 
-       # TODO issues
-       # TODO repo_last_issue
-       # TODO labels
-       # TODO milestones
-       # TODO pulls
+       fun test_get_issues is test do
+               var issues = api.get_repo_issues(repo, 1, 3)
+               assert issues.length == 3
+               assert issues.first.title == "nitrpg: Move `nitrpg` to its own repository"
+               assert issues.last.title == "Mock Github API tests"
+       end
+
+       fun test_search_issues is test do
+               var results = api.search_repo_issues(repo, "foo", 1, 3)
+               assert results isa SearchResults
+               assert results.items.length == 3
+               assert results.items.first.as(Issue).title == "Introduction of contracts in Nit"
+               assert results.items.last.as(Issue).title == "Appel de méthodes abstraites non redéfinies"
+       end
+
+       fun test_get_labels is test do
+               var labels = api.get_repo_labels(repo, 1, 3)
+               assert labels.length == 3
+               assert labels.first.name == "API"
+               assert labels.last.name == "NEP"
+       end
+
+       fun test_get_milestones is test do
+               var milestones = api.get_repo_milestones(repo, 1, 3)
+               assert milestones.length == 3
+               assert milestones.first.title == "v1.0prealpha"
+               assert milestones.last.title == "nitdoc - Abstraction levels"
+       end
+
+       fun test_get_pulls is test do
+               var pulls = api.get_repo_pulls(repo, 1, 3)
+               assert pulls.length == 3
+               assert pulls.first.title == "nitrpg: Move `nitrpg` to its own repository"
+               assert pulls.last.title == "Mock Github API tests"
+       end
+
        # TODO contrib_stats
 
        fun test_get_branch is test do
@@ -257,8 +294,23 @@ class TestGithubAPI
                assert issue.is_pull_request
        end
 
-       # TODO issue comments
-       # TODO issue events
+       fun test_get_issue_comments is test do
+               var issue = api.get_issue(repo, 1000)
+               assert issue isa Issue
+               var comments = api.get_issue_comments(repo, issue, 1, 3)
+               assert comments.length == 3
+               assert comments.first.user.login == "R4PaSs"
+               assert comments.last.user.login == "xymus"
+       end
+
+       fun test_get_issue_events is test do
+               var issue = api.get_issue(repo, 1000)
+               assert issue isa Issue
+               var events = api.get_issue_events(repo, issue, 1, 3)
+               assert events.length == 3
+               assert events.first.actor.login == "privat"
+               assert events.last.actor.login == "xymus"
+       end
 
        fun test_get_pull is test do
                var pull = api.get_pull(repo, 1000)