X-Git-Url: http://nitlanguage.org diff --git a/lib/github/tests/test_api.nit b/lib/github/tests/test_api.nit index 7176aaa..19538e4 100644 --- a/lib/github/tests/test_api.nit +++ b/lib/github/tests/test_api.nit @@ -23,31 +23,31 @@ intrude import api # # Cache files can be automatically created and updated by setting # `update_responses_cache` to `true` then running `nitunit`. -class MockGithubCurl - super GithubCurl +class MockGithubAPI + super GithubAPI # Mock so it returns the response from a file # # See `update_responses_cache`. - redef fun get_and_parse(uri) do - print uri # for debugging + redef fun send(method, path, headers, body) do + print path # for debugging - var path = uri.replace("https://api.github.com/", "/") assert has_response(path) if update_responses_cache then var file = response_file(path) - save_actual_response(uri, file) + save_actual_response(path, file) end - var response = response_string(path).parse_json + var response = response_string(path) if response_is_error(path) then - var title = "GithubAPIError" - var msg = response.as(JsonObject)["message"].as(String) - var err = new GithubError(msg, title) - err.json["requested_uri"] = uri - err.json["status_code"] = response_code(path) - return err + last_error = new GithubAPIError( + response.parse_json.as(JsonObject)["message"].as(String), + response_code(path).to_i, + path + ) + was_error = true + return null end return response end @@ -57,17 +57,27 @@ class MockGithubCurl 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/pulls/945/comments?page=1&per_page=3"] = "repo_pulls_945_comments" + map["/repos/nitlang/nit/pulls/comments/21010363"] = "repo_pulls_comment_21010363" map["/repos/nitlang/nit/commits/64ce1f"] = "repo_commits_64ce1f" + map["/repos/nitlang/nit/commits/4e3c688d/status"] = "repo_commits_4e3c68_status" map["/repos/nitlang/nit/comments/8982707"] = "repo_comments_8982707" - map["/repos/nitlang/nit/pulls/comments/21010363"] = "repo_pulls_comment_21010363" + map["/search/issues?q=foo repo:nitlang/nit&page=1&per_page=3"] = "repo_search_issues_nit" + map["/repos/nitlang/nit/stats/contributors"] = "repo_nit_contributors" # errors map["/users/not_found/not_found"] = "errors_404" return map @@ -126,9 +136,9 @@ class MockGithubCurl private fun save_actual_response(uri, file: String) do assert update_responses_cache - var request = new CurlHTTPRequest(uri) - request.user_agent = actual_curl.user_agent - request.headers = actual_curl.header + var request = new CurlHTTPRequest("{api_url}{sanitize_uri(uri)}") + request.user_agent = actual_api.user_agent + request.headers = actual_api.new_headers var response = request.execute if response isa CurlResponseSuccess then @@ -141,22 +151,16 @@ class MockGithubCurl end # Actual GithubCurl instance used for caching - private var actual_curl = new GithubCurl(get_github_oauth, "nitunit") + private var actual_api = new GithubAPI(get_github_oauth, "nitunit") end class TestGithubAPI test - var mock = new MockGithubCurl("test", "test") - - fun api: GithubAPI do - var api = new GithubAPI("test") - api.ghcurl = mock - return api - end + fun api: MockGithubAPI do return new MockGithubAPI("test", "test") fun test_deserialize is test do - var response = mock.response_string("/users/Morriar") + var response = api.response_string("/users/Morriar") var obj = api.deserialize(response) assert obj isa User assert obj.login == "Morriar" @@ -172,45 +176,25 @@ class TestGithubAPI var obj = api.get("/users/Morriar") assert not api.was_error assert api.last_error == null - assert obj isa JsonObject - assert obj["login"] == "Morriar" - end - - fun test_get_404 is test do - var api = self.api - var res = api.get("/users/not_found/not_found") - assert res == null - assert api.was_error - var err = api.last_error - assert err isa GithubError - assert err.name == "GithubAPIError" - assert err.message == "Not Found" - end - - fun test_load_from_github is test do - var api = self.api - var obj = api.load_from_github("/users/Morriar") - assert not api.was_error - assert api.last_error == null assert obj isa User assert obj.login == "Morriar" end - fun test_load_from_github_404 is test do + fun test_get_404 is test do var api = self.api - var res = api.load_from_github("/users/not_found/not_found") + var res = api.get("/users/not_found/not_found") assert res == null assert api.was_error var err = api.last_error - assert err isa GithubError - assert err.name == "GithubAPIError" + assert err isa GithubAPIError + assert err.status_code == 404 assert err.message == "Not Found" end # TODO test more error cases fun test_get_auth_user is test do - var user = api.load_auth_user + var user = api.get_auth_user assert user isa User assert user.login == "Morriar" assert user.avatar_url == "https://avatars2.githubusercontent.com/u/583144?v=4" @@ -220,7 +204,7 @@ class TestGithubAPI end fun test_get_user is test do - var user = api.load_user("Morriar") + var user = api.get_user("Morriar") assert user isa User assert user.login == "Morriar" assert user.avatar_url == "https://avatars2.githubusercontent.com/u/583144?v=4" @@ -230,7 +214,7 @@ class TestGithubAPI end fun test_get_repo is test do - var repo = api.load_repo("nitlang/nit") + var repo = api.get_repo("nitlang/nit") assert repo isa Repo assert repo.full_name == "nitlang/nit" assert repo.name == "nit" @@ -238,39 +222,81 @@ class TestGithubAPI assert repo.default_branch == "master" end - private var repo: Repo is lazy do return api.load_repo("nitlang/nit").as(not null) - fun test_get_branches is test do - var branches = api.load_repo_branches(repo) + var branches = api.get_repo_branches("nitlang/nit", 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 - # TODO contrib_stats + fun test_get_issues is test do + var issues = api.get_repo_issues("nitlang/nit", 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("nitlang/nit", "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("nitlang/nit", 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("nitlang/nit", 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("nitlang/nit", 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 fun test_get_branch is test do - var branch = api.load_branch(repo, "master") + var branch = api.get_branch("nitlang/nit", "master") assert branch isa Branch assert branch.name == "master" end - # TODO branch commits - fun test_get_commit is test do - var commit = api.load_commit(repo, "64ce1f") + var commit = api.get_commit("nitlang/nit", "64ce1f") assert commit isa Commit assert commit.sha == "64ce1f587209024f5de46d06c70526a569ff537f" # TODO other fields end + fun test_get_commit_status is test do + var status = api.get_commit_status("nitlang/nit", "4e3c688d") + assert status isa CommitStatus + assert status.state == "failure" + assert status.sha == "4e3c688d2c4b875c00f206eb4c4b6f2c4f34c096" + assert status.total_count == 1 + + var sub = status.statuses.first + assert sub.state == "failure" + assert sub.description == "Merged pipeline on gitlab: failed" + assert sub.context == "gitlab-ci" + + var repo = status.repository + assert repo isa Repo + assert repo.full_name == "nitlang/nit" + end + fun test_get_issue is test do - var issue = api.load_issue(repo, 1000) + var issue = api.get_issue("nitlang/nit", 1000) assert issue isa Issue assert issue.number == 1000 assert issue.title == "Raise nitc from the dead" @@ -283,12 +309,23 @@ class TestGithubAPI assert issue.is_pull_request end - # TODO issue comments - # TODO issue events + fun test_get_issue_comments is test do + var comments = api.get_issue_comments("nitlang/nit", 1000, 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 events = api.get_issue_events("nitlang/nit", 1000, 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.load_pull(repo, 1000) - assert pull isa Issue + var pull = api.get_pull("nitlang/nit", 1000) + assert pull isa PullRequest assert pull.number == 1000 assert pull.title == "Raise nitc from the dead" assert pull.user.as(User).login == "privat" @@ -299,21 +336,36 @@ class TestGithubAPI assert pull.body == "Raise dead on `nitc`.\nIt's super effective...\n" end + fun test_get_pull_comments is test do + var comments = api.get_pull_comments("nitlang/nit", 945, 1, 3) + assert comments.length == 2 + assert comments.first.path == "src/modelize/modelize_property.nit" + end + + fun test_get_pull_comment is test do + var comment = api.get_pull_comment("nitlang/nit", 21010363) + assert comment isa PullComment + assert comment.path == "src/modelize/modelize_property.nit" + assert comment.original_position == 26 + assert comment.pull_number == 945 + # TODO other fields + end + fun test_get_label is test do - var labl = api.load_label(repo, "ok_will_merge") + var labl = api.get_label("nitlang/nit", "ok_will_merge") assert labl isa Label assert labl.name == "ok_will_merge" end fun test_get_milestone is test do - var milestone = api.load_milestone(repo, 4) + var milestone = api.get_milestone("nitlang/nit", 4) assert milestone isa Milestone assert milestone.title == "v1.0prealpha" # TODO other fields end fun test_get_issue_event is test do - var event = api.load_issue_event(repo, 199674194) + var event = api.get_issue_event("nitlang/nit", 199674194) assert event isa IssueEvent assert event.actor.login == "privat" assert event.event == "labeled" @@ -321,7 +373,7 @@ class TestGithubAPI end fun test_get_issue_comment is test do - var comment = api.load_issue_comment(repo, 6020149) + var comment = api.get_issue_comment("nitlang/nit", 6020149) assert comment isa IssueComment assert comment.user.login == "privat" assert comment.created_at.to_s == "2012-05-30T20:16:54Z" @@ -329,18 +381,17 @@ class TestGithubAPI end fun test_get_comment is test do - var comment = api.load_commit_comment(repo, 8982707) + var comment = api.get_commit_comment("nitlang/nit", 8982707) assert comment isa CommitComment assert comment.user.login == "Morriar" assert comment.body == "For testing purposes...\n" assert comment.commit_id == "7eacb86d1e24b7e72bc9ac869bf7182c0300ceca" end - fun test_get_review_comments is test do - var comment = api.load_review_comment(repo, 21010363) - assert comment isa ReviewComment - assert comment.path == "src/modelize/modelize_property.nit" - assert comment.original_position == 26 - assert comment.pull_number == 945 + fun test_contributor_stats is test do + var stats = api.get_repo_contrib_stats("nitlang/nit") + assert stats.last.author.login == "privat" + assert stats.last.total == 4536 + assert stats.last.weeks.length == 575 end end