diff --git a/.gitignore b/.gitignore index 06a47c5..c101db7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ env/ +Session.vim +Session.nvim __pycache__/ diff --git a/api.py b/api.py new file mode 100644 index 0000000..10817ad --- /dev/null +++ b/api.py @@ -0,0 +1,27 @@ +import httpx + + +class API: + headers = {"Accept": "application/vnd.github.v3+json"} + + def __init__(self, user_name: str) -> None: + self.user = self.load_user(user_name) + self.user_name = self.user["login"] + self.repos = self.load_repos() # TODO: Check if pagination + + def _get(self, url: str) -> dict: + """Uses httpx.Client().get to send the appropriate github headers, and return the url""" + with httpx.Client(headers=self.headers) as client: + return client.get(url).json() + + def load_user(self, user_name: str) -> dict: + """Sets the user object""" + return self._get(f"https://api.github.com/users/{user_name}") + + def load_repo(self, repo_name: str) -> dict: + """Set the repo object""" + return self._get(f"https://api.github.com/repos/{self.user_name}/{repo_name}") + + def load_repos(self) -> dict: + """Set the users repos""" + return self._get(f"https://api.github.com/users/{self.user_name}/repos") diff --git a/api_tests.py b/api_tests.py new file mode 100644 index 0000000..c816024 --- /dev/null +++ b/api_tests.py @@ -0,0 +1,28 @@ +import json +import pytest +from api import API +from pytest_httpx import HTTPXMock + + +def _load_user(): + with open("./tests/fixtures/user.json", "r") as f: + return json.loads(f.read()) + + +def _load_repos(): + with open("./tests/fixtures/repos.json", "r") as f: + return json.loads(f.read()) + + +def test_load_user(httpx_mock: HTTPXMock): + httpx_mock.add_response(method="GET", json=_load_user()) + + gh = API(user_name="tyrelsouza") + assert gh.user["login"] == "tyrelsouza" + +def test_load_repos(httpx_mock: HTTPXMock): + httpx_mock.add_response(method="GET", json=_load_user()) + httpx_mock.add_response(method="GET", json=_load_repos()) + + gh = API(user_name="tyrelsouza") + assert gh.repos[0]["git_url"] == "git://github.com/tyrelsouza/genealogy.git" diff --git a/cli.py b/cli.py index b4bae77..c51bf42 100644 --- a/cli.py +++ b/cli.py @@ -1,47 +1,17 @@ +from ghub import GHub +from rich.prompt import Prompt +from rich import print import httpx -from pprint import pprint - - -class GHub: - headers = {"Accept": "application/vnd.github.v3+json"} - - def __init__(self, user_name: str, repo_name: str): - self.user_name = user_name - self.repo_name = repo_name - - def get(self, url: str) -> dict: - """Uses httpx.Client().get to send the appropriate github headers, and return the url""" - with httpx.Client(headers=self.headers) as client: - return client.get(url).json() - - def schema(self) -> dict: - """Show all the schema that are available""" - return self.get("https://api.github.com") - - def set_user(self): - self.user = self.get_user() - - def get_user(self) -> dict: - """Get the user object""" - return self.get(f"https://api.github.com/users/{self.user_name}") - - def set_repo(self): - self.repo = self.get_repo() - - def get_repo(self) -> dict: - """Get the repo object""" - return self.get(f"https://api.github.com/repos/{self.user_name}/{self.repo_name}") def main(): - gh = GHub(user_name="tyrelsouza", repo_name="work_sample") - # pprint(gh.schema()) - pprint( - ( - gh.get_user(), - gh.get_repo(), - ) - ) + user_name = Prompt.ask("Username?") + gh = GHub() + gh.load_user(user_name=user_name) + print(gh.repos_table()) + + + if __name__ == "__main__": diff --git a/ghub.py b/ghub.py new file mode 100644 index 0000000..1eb930a --- /dev/null +++ b/ghub.py @@ -0,0 +1,41 @@ +from rich.table import Table +from rich.prompt import Prompt +from rich import print +from api import API + + +class GHub: + user = None + repos = None + + def load_user(self, user_name: str) -> None: + self.user_name = user_name + self.api = API(self.user_name) + self.user = self.api.user + self.repos = self.api.repos + + def repos_trimmed(self) -> list: + for repo in self.repos: + yield [ + str(f) + for f in [ + repo["name"], + repo["description"], + repo["stargazers_count"], + repo["watchers_count"], + repo["forks_count"], + repo["open_issues_count"], + ] + ] + + def repos_table(self) -> Table: + table = Table(show_header=True, header_style="bold magenta") + table.add_column("Name") + table.add_column("Description") + table.add_column("Stargazers") + table.add_column("Watchers") + table.add_column("Forks") + table.add_column("Open Issues") + for repo in self.repos_trimmed(): + table.add_row(*repo) + return table diff --git a/ghub_tests.py b/ghub_tests.py new file mode 100644 index 0000000..4706da7 --- /dev/null +++ b/ghub_tests.py @@ -0,0 +1,22 @@ +import json +import pytest +from ghub import GHub + +def _load_user(): + with open("./tests/fixtures/user.json", "r") as f: + return json.loads(f.read()) + +def _load_repos(): + with open("./tests/fixtures/repos.json", "r") as f: + return json.loads(f.read()) + +def _fake_tyrel() -> GHub: + gh = GHub() + gh.user = _load_user() + gh.repos = _load_repos() + return gh + + +def test_load_repos(): + gh = _fake_tyrel() + assert gh.repos[0]["git_url"] == "git://github.com/tyrelsouza/genealogy.git" diff --git a/requirements.in b/requirements.in index af96c94..945ab52 100644 --- a/requirements.in +++ b/requirements.in @@ -4,3 +4,4 @@ black invoke pytest pytest-httpx +rich diff --git a/requirements.txt b/requirements.txt index 000a6d8..c4bcfae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,6 +18,10 @@ click==8.0.3 # via # black # pip-tools +colorama==0.4.4 + # via rich +commonmark==0.9.1 + # via rich h11==0.12.0 # via httpcore httpcore==0.13.7 @@ -50,6 +54,8 @@ pluggy==1.0.0 # via pytest py==1.10.0 # via pytest +pygments==2.10.0 + # via rich pyparsing==2.4.7 # via packaging pytest==6.2.5 @@ -62,6 +68,8 @@ regex==2021.11.2 # via black rfc3986[idna2008]==1.5.0 # via httpx +rich==10.12.0 + # via -r requirements.in sniffio==1.2.0 # via # anyio diff --git a/tasks.py b/tasks.py index f4c5661..3361387 100644 --- a/tasks.py +++ b/tasks.py @@ -1,8 +1,16 @@ from invoke import task +from cli import main + + +@task +def run(c): + main() + @task def test(c): - c.run("pytest tests.py --pdb") + c.run("pytest *_tests.py") + @task def black(c): diff --git a/tests.py b/tests.py deleted file mode 100644 index 4988292..0000000 --- a/tests.py +++ /dev/null @@ -1,29 +0,0 @@ -import json -import pytest -from cli import GHub -from pytest_httpx import HTTPXMock - -def _load_user(): - with open("tests/user.json", "r") as f: - return json.loads(f.read()) - -def _load_repo(): - with open("tests/repo.json", "r") as f: - return json.loads(f.read()) - -def test_user(httpx_mock: HTTPXMock): - httpx_mock.add_response(method="GET", json=_load_user()) - - gh = GHub(user_name="tyrelsouza", repo_name="work_sample") - gh.set_user() - assert(gh.user["login"] == "tyrelsouza") - -def test_repo(httpx_mock: HTTPXMock): - httpx_mock.add_response(method="GET", json=_load_repo()) - - gh = GHub(user_name="tyrelsouza", repo_name="work_sample") - gh.set_repo() - breakpoint() - assert(gh.repo["login"] == "tyrelsouza2") - - diff --git a/tests/repo.json b/tests/fixtures/repo.json similarity index 100% rename from tests/repo.json rename to tests/fixtures/repo.json diff --git a/tests/fixtures/repos.json b/tests/fixtures/repos.json new file mode 100644 index 0000000..87deb14 --- /dev/null +++ b/tests/fixtures/repos.json @@ -0,0 +1,400 @@ +[ + { + "id": 416199052, + "node_id": "R_kgDOGM6xjA", + "name": "genealogy", + "full_name": "tyrelsouza/genealogy", + "private": false, + "owner": { + "login": "tyrelsouza", + "id": 923113, + "node_id": "MDQ6VXNlcjkyMzExMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/923113?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tyrelsouza", + "html_url": "https://github.com/tyrelsouza", + "followers_url": "https://api.github.com/users/tyrelsouza/followers", + "following_url": "https://api.github.com/users/tyrelsouza/following{/other_user}", + "gists_url": "https://api.github.com/users/tyrelsouza/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tyrelsouza/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tyrelsouza/subscriptions", + "organizations_url": "https://api.github.com/users/tyrelsouza/orgs", + "repos_url": "https://api.github.com/users/tyrelsouza/repos", + "events_url": "https://api.github.com/users/tyrelsouza/events{/privacy}", + "received_events_url": "https://api.github.com/users/tyrelsouza/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/tyrelsouza/genealogy", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/tyrelsouza/genealogy", + "forks_url": "https://api.github.com/repos/tyrelsouza/genealogy/forks", + "keys_url": "https://api.github.com/repos/tyrelsouza/genealogy/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tyrelsouza/genealogy/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tyrelsouza/genealogy/teams", + "hooks_url": "https://api.github.com/repos/tyrelsouza/genealogy/hooks", + "issue_events_url": "https://api.github.com/repos/tyrelsouza/genealogy/issues/events{/number}", + "events_url": "https://api.github.com/repos/tyrelsouza/genealogy/events", + "assignees_url": "https://api.github.com/repos/tyrelsouza/genealogy/assignees{/user}", + "branches_url": "https://api.github.com/repos/tyrelsouza/genealogy/branches{/branch}", + "tags_url": "https://api.github.com/repos/tyrelsouza/genealogy/tags", + "blobs_url": "https://api.github.com/repos/tyrelsouza/genealogy/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tyrelsouza/genealogy/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tyrelsouza/genealogy/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tyrelsouza/genealogy/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tyrelsouza/genealogy/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tyrelsouza/genealogy/languages", + "stargazers_url": "https://api.github.com/repos/tyrelsouza/genealogy/stargazers", + "contributors_url": "https://api.github.com/repos/tyrelsouza/genealogy/contributors", + "subscribers_url": "https://api.github.com/repos/tyrelsouza/genealogy/subscribers", + "subscription_url": "https://api.github.com/repos/tyrelsouza/genealogy/subscription", + "commits_url": "https://api.github.com/repos/tyrelsouza/genealogy/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tyrelsouza/genealogy/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tyrelsouza/genealogy/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tyrelsouza/genealogy/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tyrelsouza/genealogy/contents/{+path}", + "compare_url": "https://api.github.com/repos/tyrelsouza/genealogy/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tyrelsouza/genealogy/merges", + "archive_url": "https://api.github.com/repos/tyrelsouza/genealogy/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tyrelsouza/genealogy/downloads", + "issues_url": "https://api.github.com/repos/tyrelsouza/genealogy/issues{/number}", + "pulls_url": "https://api.github.com/repos/tyrelsouza/genealogy/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tyrelsouza/genealogy/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tyrelsouza/genealogy/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tyrelsouza/genealogy/labels{/name}", + "releases_url": "https://api.github.com/repos/tyrelsouza/genealogy/releases{/id}", + "deployments_url": "https://api.github.com/repos/tyrelsouza/genealogy/deployments", + "created_at": "2021-10-12T05:38:27Z", + "updated_at": "2021-10-12T05:38:32Z", + "pushed_at": "2021-10-12T05:38:29Z", + "git_url": "git://github.com/tyrelsouza/genealogy.git", + "ssh_url": "git@github.com:tyrelsouza/genealogy.git", + "clone_url": "https://github.com/tyrelsouza/genealogy.git", + "svn_url": "https://github.com/tyrelsouza/genealogy", + "homepage": null, + "size": 67, + "stargazers_count": 0, + "watchers_count": 0, + "language": null, + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "master" + }, + { + "id": 353575397, + "node_id": "MDEwOlJlcG9zaXRvcnkzNTM1NzUzOTc=", + "name": "proglog", + "full_name": "tyrelsouza/proglog", + "private": false, + "owner": { + "login": "tyrelsouza", + "id": 923113, + "node_id": "MDQ6VXNlcjkyMzExMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/923113?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tyrelsouza", + "html_url": "https://github.com/tyrelsouza", + "followers_url": "https://api.github.com/users/tyrelsouza/followers", + "following_url": "https://api.github.com/users/tyrelsouza/following{/other_user}", + "gists_url": "https://api.github.com/users/tyrelsouza/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tyrelsouza/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tyrelsouza/subscriptions", + "organizations_url": "https://api.github.com/users/tyrelsouza/orgs", + "repos_url": "https://api.github.com/users/tyrelsouza/repos", + "events_url": "https://api.github.com/users/tyrelsouza/events{/privacy}", + "received_events_url": "https://api.github.com/users/tyrelsouza/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/tyrelsouza/proglog", + "description": "Following Distributed Services with Go book", + "fork": false, + "url": "https://api.github.com/repos/tyrelsouza/proglog", + "forks_url": "https://api.github.com/repos/tyrelsouza/proglog/forks", + "keys_url": "https://api.github.com/repos/tyrelsouza/proglog/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tyrelsouza/proglog/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tyrelsouza/proglog/teams", + "hooks_url": "https://api.github.com/repos/tyrelsouza/proglog/hooks", + "issue_events_url": "https://api.github.com/repos/tyrelsouza/proglog/issues/events{/number}", + "events_url": "https://api.github.com/repos/tyrelsouza/proglog/events", + "assignees_url": "https://api.github.com/repos/tyrelsouza/proglog/assignees{/user}", + "branches_url": "https://api.github.com/repos/tyrelsouza/proglog/branches{/branch}", + "tags_url": "https://api.github.com/repos/tyrelsouza/proglog/tags", + "blobs_url": "https://api.github.com/repos/tyrelsouza/proglog/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tyrelsouza/proglog/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tyrelsouza/proglog/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tyrelsouza/proglog/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tyrelsouza/proglog/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tyrelsouza/proglog/languages", + "stargazers_url": "https://api.github.com/repos/tyrelsouza/proglog/stargazers", + "contributors_url": "https://api.github.com/repos/tyrelsouza/proglog/contributors", + "subscribers_url": "https://api.github.com/repos/tyrelsouza/proglog/subscribers", + "subscription_url": "https://api.github.com/repos/tyrelsouza/proglog/subscription", + "commits_url": "https://api.github.com/repos/tyrelsouza/proglog/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tyrelsouza/proglog/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tyrelsouza/proglog/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tyrelsouza/proglog/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tyrelsouza/proglog/contents/{+path}", + "compare_url": "https://api.github.com/repos/tyrelsouza/proglog/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tyrelsouza/proglog/merges", + "archive_url": "https://api.github.com/repos/tyrelsouza/proglog/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tyrelsouza/proglog/downloads", + "issues_url": "https://api.github.com/repos/tyrelsouza/proglog/issues{/number}", + "pulls_url": "https://api.github.com/repos/tyrelsouza/proglog/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tyrelsouza/proglog/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tyrelsouza/proglog/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tyrelsouza/proglog/labels{/name}", + "releases_url": "https://api.github.com/repos/tyrelsouza/proglog/releases{/id}", + "deployments_url": "https://api.github.com/repos/tyrelsouza/proglog/deployments", + "created_at": "2021-04-01T04:42:22Z", + "updated_at": "2021-04-10T04:17:56Z", + "pushed_at": "2021-04-10T04:17:54Z", + "git_url": "git://github.com/tyrelsouza/proglog.git", + "ssh_url": "git@github.com:tyrelsouza/proglog.git", + "clone_url": "https://github.com/tyrelsouza/proglog.git", + "svn_url": "https://github.com/tyrelsouza/proglog", + "homepage": null, + "size": 8, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Go", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "main" + }, + { + "id": 415131409, + "node_id": "R_kgDOGL5nEQ", + "name": "tyrel-intellij-demo", + "full_name": "tyrelsouza/tyrel-intellij-demo", + "private": false, + "owner": { + "login": "tyrelsouza", + "id": 923113, + "node_id": "MDQ6VXNlcjkyMzExMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/923113?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tyrelsouza", + "html_url": "https://github.com/tyrelsouza", + "followers_url": "https://api.github.com/users/tyrelsouza/followers", + "following_url": "https://api.github.com/users/tyrelsouza/following{/other_user}", + "gists_url": "https://api.github.com/users/tyrelsouza/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tyrelsouza/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tyrelsouza/subscriptions", + "organizations_url": "https://api.github.com/users/tyrelsouza/orgs", + "repos_url": "https://api.github.com/users/tyrelsouza/repos", + "events_url": "https://api.github.com/users/tyrelsouza/events{/privacy}", + "received_events_url": "https://api.github.com/users/tyrelsouza/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/tyrelsouza/tyrel-intellij-demo", + "description": null, + "fork": false, + "url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo", + "forks_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/forks", + "keys_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/teams", + "hooks_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/hooks", + "issue_events_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/issues/events{/number}", + "events_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/events", + "assignees_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/assignees{/user}", + "branches_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/branches{/branch}", + "tags_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/tags", + "blobs_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/languages", + "stargazers_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/stargazers", + "contributors_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/contributors", + "subscribers_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/subscribers", + "subscription_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/subscription", + "commits_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/contents/{+path}", + "compare_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/merges", + "archive_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/downloads", + "issues_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/issues{/number}", + "pulls_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/labels{/name}", + "releases_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/releases{/id}", + "deployments_url": "https://api.github.com/repos/tyrelsouza/tyrel-intellij-demo/deployments", + "created_at": "2021-10-08T21:28:08Z", + "updated_at": "2021-10-08T21:30:01Z", + "pushed_at": "2021-10-08T21:29:58Z", + "git_url": "git://github.com/tyrelsouza/tyrel-intellij-demo.git", + "ssh_url": "git@github.com:tyrelsouza/tyrel-intellij-demo.git", + "clone_url": "https://github.com/tyrelsouza/tyrel-intellij-demo.git", + "svn_url": "https://github.com/tyrelsouza/tyrel-intellij-demo", + "homepage": null, + "size": 104, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Java", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 0, + "license": null, + "allow_forking": true, + "is_template": false, + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 0, + "watchers": 0, + "default_branch": "main" + }, + { + "id": 228900091, + "node_id": "MDEwOlJlcG9zaXRvcnkyMjg5MDAwOTE=", + "name": "work_sample", + "full_name": "tyrelsouza/work_sample", + "private": false, + "owner": { + "login": "tyrelsouza", + "id": 923113, + "node_id": "MDQ6VXNlcjkyMzExMw==", + "avatar_url": "https://avatars.githubusercontent.com/u/923113?v=4", + "gravatar_id": "", + "url": "https://api.github.com/users/tyrelsouza", + "html_url": "https://github.com/tyrelsouza", + "followers_url": "https://api.github.com/users/tyrelsouza/followers", + "following_url": "https://api.github.com/users/tyrelsouza/following{/other_user}", + "gists_url": "https://api.github.com/users/tyrelsouza/gists{/gist_id}", + "starred_url": "https://api.github.com/users/tyrelsouza/starred{/owner}{/repo}", + "subscriptions_url": "https://api.github.com/users/tyrelsouza/subscriptions", + "organizations_url": "https://api.github.com/users/tyrelsouza/orgs", + "repos_url": "https://api.github.com/users/tyrelsouza/repos", + "events_url": "https://api.github.com/users/tyrelsouza/events{/privacy}", + "received_events_url": "https://api.github.com/users/tyrelsouza/received_events", + "type": "User", + "site_admin": false + }, + "html_url": "https://github.com/tyrelsouza/work_sample", + "description": "i need a public repo for work.", + "fork": false, + "url": "https://api.github.com/repos/tyrelsouza/work_sample", + "forks_url": "https://api.github.com/repos/tyrelsouza/work_sample/forks", + "keys_url": "https://api.github.com/repos/tyrelsouza/work_sample/keys{/key_id}", + "collaborators_url": "https://api.github.com/repos/tyrelsouza/work_sample/collaborators{/collaborator}", + "teams_url": "https://api.github.com/repos/tyrelsouza/work_sample/teams", + "hooks_url": "https://api.github.com/repos/tyrelsouza/work_sample/hooks", + "issue_events_url": "https://api.github.com/repos/tyrelsouza/work_sample/issues/events{/number}", + "events_url": "https://api.github.com/repos/tyrelsouza/work_sample/events", + "assignees_url": "https://api.github.com/repos/tyrelsouza/work_sample/assignees{/user}", + "branches_url": "https://api.github.com/repos/tyrelsouza/work_sample/branches{/branch}", + "tags_url": "https://api.github.com/repos/tyrelsouza/work_sample/tags", + "blobs_url": "https://api.github.com/repos/tyrelsouza/work_sample/git/blobs{/sha}", + "git_tags_url": "https://api.github.com/repos/tyrelsouza/work_sample/git/tags{/sha}", + "git_refs_url": "https://api.github.com/repos/tyrelsouza/work_sample/git/refs{/sha}", + "trees_url": "https://api.github.com/repos/tyrelsouza/work_sample/git/trees{/sha}", + "statuses_url": "https://api.github.com/repos/tyrelsouza/work_sample/statuses/{sha}", + "languages_url": "https://api.github.com/repos/tyrelsouza/work_sample/languages", + "stargazers_url": "https://api.github.com/repos/tyrelsouza/work_sample/stargazers", + "contributors_url": "https://api.github.com/repos/tyrelsouza/work_sample/contributors", + "subscribers_url": "https://api.github.com/repos/tyrelsouza/work_sample/subscribers", + "subscription_url": "https://api.github.com/repos/tyrelsouza/work_sample/subscription", + "commits_url": "https://api.github.com/repos/tyrelsouza/work_sample/commits{/sha}", + "git_commits_url": "https://api.github.com/repos/tyrelsouza/work_sample/git/commits{/sha}", + "comments_url": "https://api.github.com/repos/tyrelsouza/work_sample/comments{/number}", + "issue_comment_url": "https://api.github.com/repos/tyrelsouza/work_sample/issues/comments{/number}", + "contents_url": "https://api.github.com/repos/tyrelsouza/work_sample/contents/{+path}", + "compare_url": "https://api.github.com/repos/tyrelsouza/work_sample/compare/{base}...{head}", + "merges_url": "https://api.github.com/repos/tyrelsouza/work_sample/merges", + "archive_url": "https://api.github.com/repos/tyrelsouza/work_sample/{archive_format}{/ref}", + "downloads_url": "https://api.github.com/repos/tyrelsouza/work_sample/downloads", + "issues_url": "https://api.github.com/repos/tyrelsouza/work_sample/issues{/number}", + "pulls_url": "https://api.github.com/repos/tyrelsouza/work_sample/pulls{/number}", + "milestones_url": "https://api.github.com/repos/tyrelsouza/work_sample/milestones{/number}", + "notifications_url": "https://api.github.com/repos/tyrelsouza/work_sample/notifications{?since,all,participating}", + "labels_url": "https://api.github.com/repos/tyrelsouza/work_sample/labels{/name}", + "releases_url": "https://api.github.com/repos/tyrelsouza/work_sample/releases{/id}", + "deployments_url": "https://api.github.com/repos/tyrelsouza/work_sample/deployments", + "created_at": "2019-12-18T18:36:33Z", + "updated_at": "2019-12-18T18:37:38Z", + "pushed_at": "2019-12-18T18:37:36Z", + "git_url": "git://github.com/tyrelsouza/work_sample.git", + "ssh_url": "git@github.com:tyrelsouza/work_sample.git", + "clone_url": "https://github.com/tyrelsouza/work_sample.git", + "svn_url": "https://github.com/tyrelsouza/work_sample", + "homepage": null, + "size": 3, + "stargazers_count": 0, + "watchers_count": 0, + "language": "Python", + "has_issues": true, + "has_projects": true, + "has_downloads": true, + "has_wiki": true, + "has_pages": false, + "forks_count": 0, + "mirror_url": null, + "archived": false, + "disabled": false, + "open_issues_count": 1, + "license": { + "key": "mit", + "name": "MIT License", + "spdx_id": "MIT", + "url": "https://api.github.com/licenses/mit", + "node_id": "MDc6TGljZW5zZTEz" + }, + "allow_forking": true, + "is_template": false, + "topics": [], + "visibility": "public", + "forks": 0, + "open_issues": 1, + "watchers": 0, + "default_branch": "master" + } +] diff --git a/tests/fixtures/schema.json b/tests/fixtures/schema.json new file mode 100644 index 0000000..6ac0226 --- /dev/null +++ b/tests/fixtures/schema.json @@ -0,0 +1,35 @@ +{ + "current_user_url": "https://api.github.com/user", + "current_user_authorizations_html_url": "https://github.com/settings/connections/applications{/client_id}", + "authorizations_url": "https://api.github.com/authorizations", + "code_search_url": "https://api.github.com/search/code?q={query}{&page,per_page,sort,order}", + "commit_search_url": "https://api.github.com/search/commits?q={query}{&page,per_page,sort,order}", + "emails_url": "https://api.github.com/user/emails", + "emojis_url": "https://api.github.com/emojis", + "events_url": "https://api.github.com/events", + "feeds_url": "https://api.github.com/feeds", + "followers_url": "https://api.github.com/user/followers", + "following_url": "https://api.github.com/user/following{/target}", + "gists_url": "https://api.github.com/gists{/gist_id}", + "hub_url": "https://api.github.com/hub", + "issue_search_url": "https://api.github.com/search/issues?q={query}{&page,per_page,sort,order}", + "issues_url": "https://api.github.com/issues", + "keys_url": "https://api.github.com/user/keys", + "label_search_url": "https://api.github.com/search/labels?q={query}&repository_id={repository_id}{&page,per_page}", + "notifications_url": "https://api.github.com/notifications", + "organization_url": "https://api.github.com/orgs/{org}", + "organization_repositories_url": "https://api.github.com/orgs/{org}/repos{?type,page,per_page,sort}", + "organization_teams_url": "https://api.github.com/orgs/{org}/teams", + "public_gists_url": "https://api.github.com/gists/public", + "rate_limit_url": "https://api.github.com/rate_limit", + "repository_url": "https://api.github.com/repos/{owner}/{repo}", + "repository_search_url": "https://api.github.com/search/repositories?q={query}{&page,per_page,sort,order}", + "current_user_repositories_url": "https://api.github.com/user/repos{?type,page,per_page,sort}", + "starred_url": "https://api.github.com/user/starred{/owner}{/repo}", + "starred_gists_url": "https://api.github.com/gists/starred", + "topic_search_url": "https://api.github.com/search/topics?q={query}{&page,per_page}", + "user_url": "https://api.github.com/users/{user}", + "user_organizations_url": "https://api.github.com/user/orgs", + "user_repositories_url": "https://api.github.com/users/{user}/repos{?type,page,per_page,sort}", + "user_search_url": "https://api.github.com/search/users?q={query}{&page,per_page,sort,order}" +} diff --git a/tests/user.json b/tests/fixtures/user.json similarity index 100% rename from tests/user.json rename to tests/fixtures/user.json