diff --git a/github3/repos/repo.py b/github3/repos/repo.py index 65ccadf80..f6b77b006 100644 --- a/github3/repos/repo.py +++ b/github3/repos/repo.py @@ -1276,6 +1276,7 @@ def is_assignee(self, username): url = self._build_url('assignees', str(username), base_url=self._api) return self._boolean(self._get(url), 204, 404) + @requires_auth def is_collaborator(self, username): """Check to see if ``username`` is a collaborator on this repository. diff --git a/tests/cassettes/Repository_delete_key.json b/tests/cassettes/Repository_delete_key.json new file mode 100644 index 000000000..d7987a3be --- /dev/null +++ b/tests/cassettes/Repository_delete_key.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "GET", "uri": "https://api.github.com/repos/itsmemattchung/github3.py"}, "response": {"body": {"string": "", "base64_string": "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", "encoding": "utf-8"}, "headers": {"vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "x-github-media-type": "github.v3; param=full; format=json", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "x-accepted-oauth-scopes": "repo", "etag": "W/\"a2955235d82f8b86eebe7dd671ebddd1\"", "cache-control": "private, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "4995", "x-served-by": "318e55760cf7cdb40e61175a4d36cd32", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:14B55:1FED6A2:5694EE51", "access-control-allow-credentials": "true", "last-modified": "Thu, 08 Oct 2015 19:57:33 GMT", "date": "Tue, 12 Jan 2016 12:15:14 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452603348"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/itsmemattchung/github3.py"}, "recorded_at": "2016-01-12T12:15:14"}, {"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Content-Length": "0", "Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "DELETE", "uri": "https://api.github.com/repos/itsmemattchung/github3.py/keys/15312662"}, "response": {"body": {"string": "", "encoding": null}, "headers": {"status": "204 No Content", "x-ratelimit-remaining": "4994", "x-github-media-type": "github.v3; param=full; format=json", "x-content-type-options": "nosniff", "content-security-policy": "default-src 'none'", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "x-github-request-id": "3F91CA23:14B55:1FED6F5:5694EE52", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "vary": "Accept-Encoding", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-served-by": "52437fedc85beec8da3449496900fb9a", "access-control-allow-credentials": "true", "date": "Tue, 12 Jan 2016 12:15:14 GMT", "x-frame-options": "deny", "access-control-allow-origin": "*", "x-accepted-oauth-scopes": "", "x-xss-protection": "1; mode=block", "x-ratelimit-reset": "1452603348"}, "status": {"message": "No Content", "code": 204}, "url": "https://api.github.com/repos/itsmemattchung/github3.py/keys/15312662"}, "recorded_at": "2016-01-12T12:15:15"}], "recorded_with": "betamax/0.5.0"} \ No newline at end of file diff --git a/tests/cassettes/Repository_delete_subscription.json b/tests/cassettes/Repository_delete_subscription.json new file mode 100644 index 000000000..41897623a --- /dev/null +++ b/tests/cassettes/Repository_delete_subscription.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py"}, "response": {"body": {"string": "", "base64_string": "H4sIAAAAAAAAA62YTY/iOBCG/wrKdWlMoD9mkEYze9rd2xx6L3tBTmKI1Ukc2Q6Ijvq/71t2QgKj5aO9FwTB9fh1ucqpchvJLFotX+L5SxxPo4qXIlpFW2nzJlnO6kM0jTZNUay7P4zclnwndWMWj+xklNpXQkerNirUVlZgjIeCQtMsHudflvNpxHfccr1udIFxubW1WTHmH5qZpzZG6FRVVlR2lqqSNcwbf999W4K21R2DsBEenLFq2XG8MWCGnQnKbVmcSfBTO5OzwRtVFGoPyrnoaxOxoyV50lFktf0kBZYtUzYX8B2W9EGOkMbeL8pZtdhAY9cyI47BhmiR3S2ss4Ms2v+PlmlRKwdsEpNqWVupqvsFnliDpvSWV/Kdf44GawMISbtfirOCtdghFu8392Ytq7Xc8fRArtEiFXIHZ38SeWYPoj3UlLZ/IyjI9dKKNc9KSsMNL4z4mEZueotB7sEUWXdr9J+meSaOu4oJfx5srqpJIRPN9WGyUXoikbN6w1PE6mSPY2SCcJ38Ie2fTTL5/edfO8pejHs7KrmYuc75J8l4KodIV/bkIgLpCQAkvYlDEIfsW4bPLp9SpDpPlOZWXTs0Lgs8AbVs/JNiyQpeBgl3AIBypcI86QAASWMacVNoX1644xjW50/VlIk/8m7JmstoT4BWbnDOV0IEefAIaVl/KiMdqjQPw/aMlvlvbrf5Nkgq2QOTFCoJ4uBFyRykZSbn/j1k16HqiEqME6gWm2CpxDhCrQ7cbyeTIEckXoIWWx+ks2ewtvNowattw7dh1CMEu06v6i1/v1rEXM6dgQIkVWhaJk34ITdwSKmvHZDvYS4dMAPUFSSXy5wrDhgVNs4FZSmv1QWXiR3iJOz/ByzF6Tmafl8vY67LJUbLhjPZH/odPcS73anf6xzP0bUDQSHRM1j7W81tTicXpqq5FiGiOwRrE45iazabtbngrqwuhQ7MYE8Aius0R9UYorPtGah6Sm5dtb4hmRmq90LxLMi3RwiAfhtDtHrCeP9r9KFBAh1gTCxlIYxVVdgZO1DG7EpZuZHpLR3L5XQ7AbXfjaxSMeVFMUXUWplKxDFqbdpFFJwizEOegGXgGsB3KoVASAd5XQvPaJnvNFMt0Ihka27RQCzm8eJhvnyIl6/x19XTl9XT8h+spKmzkzHPD/P4IZ6/zmPcIawWMY2pG5OPMH7I4nWO/59X8SMNwQnYhSC+4YoBn7jW+KW/H7UUdGsAQ2PywfDHYLb6j/uPziwtEEtnQX/7nLvz19J1U0jNVSlqlAndTcpxlcv6MIOnM7RfmUrNDD0wo5XJdwx9WT7hGmZUEKSqqbAfj49fp9GeW9SuePWOH/aFxLHpo6m5Wfs0jVZWN9RV4slwDIwe7uWbHHpPjCLJpjfzXVw3Xfy8wLkptVbdDVGFtMUNQC2qbrZBmG8lwXFGoyG0lGEl3cIyseFNYde+nsZKMjQChaopmIQusRS6q6A7rHHz7COtl0pniP+OproSdo/+sdfjRIxrl25Fi+ePfwG2mOhtZxMAAA==", "encoding": "utf-8"}, "headers": {"vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "x-github-media-type": "github.v3; param=full; format=json", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "x-accepted-oauth-scopes": "repo", "etag": "W/\"6d69b02dc799ef17053da55bbd3e6279\"", "cache-control": "private, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "4993", "x-served-by": "8dd185e423974a7e13abbbe6e060031e", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:12180:4AE4DC7:5694EF28", "access-control-allow-credentials": "true", "last-modified": "Sun, 10 Jan 2016 01:24:21 GMT", "date": "Tue, 12 Jan 2016 12:18:49 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452603348"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py"}, "recorded_at": "2016-01-12T12:18:49"}, {"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Content-Length": "0", "Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "DELETE", "uri": "https://api.github.com/repos/sigmavirus24/github3.py/subscription"}, "response": {"body": {"string": "", "encoding": null}, "headers": {"status": "204 No Content", "x-ratelimit-remaining": "4992", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "content-security-policy": "default-src 'none'", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "x-github-request-id": "3F91CA23:12180:4AE4E82:5694EF29", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "vary": "Accept-Encoding", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-served-by": "c6c65e5196703428e7641f7d1e9bc353", "access-control-allow-credentials": "true", "date": "Tue, 12 Jan 2016 12:18:49 GMT", "access-control-allow-origin": "*", "x-frame-options": "deny", "x-ratelimit-reset": "1452603348"}, "status": {"message": "No Content", "code": 204}, "url": "https://api.github.com/repos/sigmavirus24/github3.py/subscription"}, "recorded_at": "2016-01-12T12:18:49"}], "recorded_with": "betamax/0.5.0"} \ No newline at end of file diff --git a/tests/cassettes/Repository_edit.json b/tests/cassettes/Repository_edit.json new file mode 100644 index 000000000..5663a03ad --- /dev/null +++ b/tests/cassettes/Repository_edit.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "GET", "uri": "https://api.github.com/repos/itsmemattchung/github3.py"}, "response": {"body": {"string": "", "base64_string": "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", "encoding": "utf-8"}, "headers": {"vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "x-github-media-type": "github.v3; param=full; format=json", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "x-accepted-oauth-scopes": "repo", "etag": "W/\"a2955235d82f8b86eebe7dd671ebddd1\"", "cache-control": "private, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "4991", "x-served-by": "dc1ce2bfb41810a06c705e83b388572d", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:B791:3FAEFE5:5694EF70", "access-control-allow-credentials": "true", "last-modified": "Thu, 08 Oct 2015 19:57:33 GMT", "date": "Tue, 12 Jan 2016 12:20:00 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452603348"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/itsmemattchung/github3.py"}, "recorded_at": "2016-01-12T12:20:01"}, {"request": {"body": {"string": "{\"name\": \"github3py\"}", "encoding": "utf-8"}, "headers": {"Content-Length": "21", "Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "PATCH", "uri": "https://api.github.com/repos/itsmemattchung/github3.py"}, "response": {"body": {"string": "", "base64_string": "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", "encoding": "utf-8"}, "headers": {"vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "x-github-media-type": "github.v3; param=full; format=json", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "x-accepted-oauth-scopes": "", "etag": "W/\"5cba1173bda7ee102ce397f43272f9e0\"", "cache-control": "private, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "4990", "x-served-by": "173530fed4bbeb1e264b2ed22e8b5c20", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:B791:3FAF023:5694EF70", "access-control-allow-credentials": "true", "date": "Tue, 12 Jan 2016 12:20:01 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452603348"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/itsmemattchung/github3.py"}, "recorded_at": "2016-01-12T12:20:01"}], "recorded_with": "betamax/0.5.0"} \ No newline at end of file diff --git a/tests/cassettes/Repository_git_commit.json b/tests/cassettes/Repository_git_commit.json new file mode 100644 index 000000000..4b5096649 --- /dev/null +++ b/tests/cassettes/Repository_git_commit.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json"}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py"}, "response": {"body": {"string": "", "base64_string": "H4sIAAAAAAAAA62YTY/iOBCG/wrKdWlMAkz3RBrN7Gl3b3PovewFOYkhVidxZDsgOur/vq/tfMFo+WjvBUFwPX5drnKq3AY8C+LVc7h8DsN5UNGSBXGw5zpvktWiPgXzYNcUxbb7Q/F9SQ9cNipak7NR4lgxGcRtUIg9r8CYDgXFTBOtly+r5TygB6qp3DaywLhc61rFhLiHauGojWIyFZVmlV6koiQNccbfD99WoO1lxzDYAA8uWDXvOM4YMEUuBOW6LC4kuKmtycXgnSgKcQTlUvStichgaTxpKbzaf5ICy5YInTP4Dkv6MI7gSj8uylq12ECltzwzHIUNkSx7WFhnB1lm/z9aIlktLLBJVCp5rbmoHhd4Zg2akHta8Xf6ORqsFSBG2uNSrBWs2QGx+Li5M2tJLfmBpifjGslSxg9w9ieRF/Yg6lNt0vZvBIVxPddsS7PSpOGOFop9zAM7vcYg+2COrLs3+s/TPGPDrmLCnyedi2pW8ERSeZrthJxx5Kzc0RSxOjviGJkhXGd/cP1nk8x+//nXwWQvxr0NSq5mrnX+WTKeyzGkG3tyFYH0BACS3tjJi2PsW4LPLp9SpDpNhKRa3Do0rgs8A7Vk+tPEkma09BJuAQDlQvh50gIA4ko17K7Qvr5wy1Gkz5+qKRN35N2TNdfRjgCtVOGcrxjz8uAAaUl/KiMdqjT3w/aMlrhvdrfp3kuqsQcmKUTixcGLklhIS1RO3XtIb33VGaphnEEl23lLNYwBqqXnfluZBjIg8RLU2HovnT2DtJ1HC1rtG7r3ow4Q7Lp5Ve/p+80i5nrujBQgTYUmedL4H3Ijxyh1tQPy3c+lI2aE2oLkeplzwwGTwsa6oCz5rbrgOrFDnIX9/4A1cXqJNr9vlzG35RpGS8Yz2R36Hd3Hu92p3+ucztG1A14h0TNI+1tNdW5OLkxVU8l8RHcI0iYUxdZisWhzRm1ZXTLpmcGOABSVaY6q0Udn2zNQ9ZRU22p9Z2RmqN4LQTMv3w4QAN02+mh1hOn+1+hDvQRawJRY8oIpLSq/M3akTNmV0HzH03s6luvpdgZqvytepWxOi2KOqNU85Yhj1NpmF1FwMj8POQKWgWsA16kUDCHt5XXJHKMlrtNMJUMjkm2pRgMRLcPoabl6Clev4dd48xJvVv9gJU2dnY358rQMn8Ll6zLEHUIchWZM3ah8gnFDotcwitcvcbQ0Q3ACdiGIb7hiwCeuNX7p7ycthbk1gKFS+Wj4YzSL/+P+ozNLC8TSRdDfP+fh8rV02xRSc1GyGmVCd5MyrHJVnxbwdIb2KxOpWqAHJmZl/B1Dn1cbXMNMCoJUNBX2Y73+Og+OVKN2xat3+rAvJIamz0xN1dalaRBr2ZiuEk/GY2Dy8Mjf+Nh7YpSRrHoz18V104VfIpybXErR3RBVSFvcANSs6mYbhG1cKwmONZoMwVLwZ7+SbmEZ29Gm0FtXT2MlGRqBQtRYSsX0EZ1gT7a4aRXSaYs2H/8Clg2hwjETAAA=", "encoding": "utf-8"}, "headers": {"vary": "Accept", "x-github-media-type": "github.v3; param=full; format=json", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "etag": "W/\"c10696a3231778f2b4d52d390ab74bac\"", "cache-control": "public, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "53", "x-served-by": "5aeb3f30c9e3ef6ef7bcbcddfd9a68f7", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:B794:469F977:5694FB08", "access-control-allow-credentials": "true", "last-modified": "Sun, 10 Jan 2016 01:24:21 GMT", "date": "Tue, 12 Jan 2016 13:09:29 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "60", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452604405"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py"}, "recorded_at": "2016-01-12T13:09:29"}, {"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json"}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py/git/commits/9ea7482560c9e70c66019f7981aa1727caf888e0"}, "response": {"body": {"string": "", "base64_string": "H4sIAAAAAAAAA72TTY/bIBBA/wpyr0kwGAP2qdKeethbT+1WqzEebEv+WsCtVlH+e3HcSOmhUqKsejOeYR7zBo6JbyEpkwJBCc1zmZoCVWqkTFlhVaEZAFNcGbBaa0yTXbK4Pm5oQ5h9SSnM3aHpQrtUBzMN1OE8eeq7ZoCfnVs8F3SLZof5ff2kMWvogqd3ENsw9K9/Y6+Q/4JtoHs4sIR2ckl5TEYYMDb5BUbyNLkavJli5zhAt/Z+Tfy8eHT+ME6x8/79SkXMryGsVXjK5D5le8a/pqLksmTZt+S0S7YDBvx/xOAwHuj4Z+aomZEV4yloYBK4yXgujE5rAMGR51oobZXNH5/5yvX0Zl50M6D30Kz2ntE1SOal74nDtwV9IJ/yTBHrpoHEizTEqYRg2mVsaIhRT4eucdH8/nwXX8aX8Xn7UROLv8iaQwx49FuJdf16TiVhOkc9PXZjwLVIN407soxdOEUJMzgcg0/K7xeDAorU6qySVinIhcUKjIRCSJ6DzJBnlTGQV+Jxg5dXcwfxoVdzM+e0u8jQnOVSGmmtQhZFqAIrK7XFTAAark2NSknBPk7GHcSHZNzMOf04/Qb8a2mUUQUAAA==", "encoding": "utf-8"}, "headers": {"vary": "Accept", "x-github-media-type": "github.v3; param=full; format=json", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "etag": "W/\"89f2c3d394b744f77fde2a91d3f3db9d\"", "cache-control": "public, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "52", "x-served-by": "76d9828c7e4f1d910f7ba069e90ce976", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:B794:469FA3F:5694FB09", "access-control-allow-credentials": "true", "last-modified": "Tue, 12 Jan 2016 04:26:13 GMT", "date": "Tue, 12 Jan 2016 13:09:29 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "60", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452604405"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py/git/commits/9ea7482560c9e70c66019f7981aa1727caf888e0"}, "recorded_at": "2016-01-12T13:09:29"}], "recorded_with": "betamax/0.5.0"} \ No newline at end of file diff --git a/tests/cassettes/Repository_is_collaborator.json b/tests/cassettes/Repository_is_collaborator.json new file mode 100644 index 000000000..3c2073a7f --- /dev/null +++ b/tests/cassettes/Repository_is_collaborator.json @@ -0,0 +1 @@ +{"http_interactions": [{"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py"}, "response": {"body": {"string": "", "base64_string": "H4sIAAAAAAAAA62YTY/iOBCG/wrKdWlMAkz3RBrN7Gl3b3PovewFOYkhVidxZDsgOur/vq/tfMFo+WjvBUFwPX5drnKq3AY8C+LVc7h8DsN5UNGSBXGw5zpvktWiPgXzYNcUxbb7Q/F9SQ9cNipak7NR4lgxGcRtUIg9r8CYDgXFTBOtly+r5TygB6qp3DaywLhc61rFhLiHauGojWIyFZVmlV6koiQNccbfD99WoO1lxzDYAA8uWDXvOM4YMEUuBOW6LC4kuKmtycXgnSgKcQTlUvStichgaTxpKbzaf5ICy5YInTP4Dkv6MI7gSj8uylq12ECltzwzHIUNkSx7WFhnB1lm/z9aIlktLLBJVCp5rbmoHhd4Zg2akHta8Xf6ORqsFSBG2uNSrBWs2QGx+Li5M2tJLfmBpifjGslSxg9w9ieRF/Yg6lNt0vZvBIVxPddsS7PSpOGOFop9zAM7vcYg+2COrLs3+s/TPGPDrmLCnyedi2pW8ERSeZrthJxx5Kzc0RSxOjviGJkhXGd/cP1nk8x+//nXwWQvxr0NSq5mrnX+WTKeyzGkG3tyFYH0BACS3tjJi2PsW4LPLp9SpDpNhKRa3Do0rgs8A7Vk+tPEkma09BJuAQDlQvh50gIA4ko17K7Qvr5wy1Gkz5+qKRN35N2TNdfRjgCtVOGcrxjz8uAAaUl/KiMdqjT3w/aMlrhvdrfp3kuqsQcmKUTixcGLklhIS1RO3XtIb33VGaphnEEl23lLNYwBqqXnfluZBjIg8RLU2HovnT2DtJ1HC1rtG7r3ow4Q7Lp5Ve/p+80i5nrujBQgTYUmedL4H3Ijxyh1tQPy3c+lI2aE2oLkeplzwwGTwsa6oCz5rbrgOrFDnIX9/4A1cXqJNr9vlzG35RpGS8Yz2R36Hd3Hu92p3+ucztG1A14h0TNI+1tNdW5OLkxVU8l8RHcI0iYUxdZisWhzRm1ZXTLpmcGOABSVaY6q0Udn2zNQ9ZRU22p9Z2RmqN4LQTMv3w4QAN02+mh1hOn+1+hDvQRawJRY8oIpLSq/M3akTNmV0HzH03s6luvpdgZqvytepWxOi2KOqNU85Yhj1NpmF1FwMj8POQKWgWsA16kUDCHt5XXJHKMlrtNMJUMjkm2pRgMRLcPoabl6Clev4dd48xJvVv9gJU2dnY358rQMn8Ll6zLEHUIchWZM3ah8gnFDotcwitcvcbQ0Q3ACdiGIb7hiwCeuNX7p7ycthbk1gKFS+Wj4YzSL/+P+ozNLC8TSRdDfP+fh8rV02xRSc1GyGmVCd5MyrHJVnxbwdIb2KxOpWqAHJmZl/B1Dn1cbXMNMCoJUNBX2Y73+Og+OVKN2xat3+rAvJIamz0xN1dalaRBr2ZiuEk/GY2Dy8Mjf+Nh7YpSRrHoz18V104VfIpybXErR3RBVSFvcANSs6mYbhG1cKwmONZoMwVLwZ7+SbmEZ29Gm0FtXT2MlGRqBQtQmmJgssRRzV2HusKbNs4u0Xqo5Q9x3NNUV00f0j70eK2Jau3QrijYf/wILLfFfZxMAAA==", "encoding": "utf-8"}, "headers": {"vary": "Accept, Authorization, Cookie, X-GitHub-OTP", "x-github-media-type": "github.v3; param=full; format=json", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-xss-protection": "1; mode=block", "x-content-type-options": "nosniff", "x-accepted-oauth-scopes": "repo", "etag": "W/\"5cb2601c68da9f413b72cd92e191c9e5\"", "cache-control": "private, max-age=60, s-maxage=60", "status": "200 OK", "x-ratelimit-remaining": "4998", "x-served-by": "e183f7c661b1bbc2c987b3c4dc7b04e0", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "transfer-encoding": "chunked", "x-github-request-id": "3F91CA23:6394:28C0A4F:5694F886", "access-control-allow-credentials": "true", "last-modified": "Sun, 10 Jan 2016 01:24:21 GMT", "date": "Tue, 12 Jan 2016 12:58:46 GMT", "access-control-allow-origin": "*", "content-security-policy": "default-src 'none'", "content-encoding": "gzip", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-frame-options": "deny", "content-type": "application/json; charset=utf-8", "x-ratelimit-reset": "1452606964"}, "status": {"message": "OK", "code": 200}, "url": "https://api.github.com/repos/sigmavirus24/github3.py"}, "recorded_at": "2016-01-12T12:58:47"}, {"request": {"body": {"string": "", "encoding": "utf-8"}, "headers": {"Accept-Encoding": "gzip, deflate", "Accept": "application/vnd.github.v3.full+json", "User-Agent": "github3.py/1.0.0a2", "Accept-Charset": "utf-8", "Connection": "keep-alive", "Content-Type": "application/json", "Authorization": "token "}, "method": "GET", "uri": "https://api.github.com/repos/sigmavirus24/github3.py/collaborators/itsmemattchung"}, "response": {"body": {"string": "", "encoding": null}, "headers": {"status": "204 No Content", "x-ratelimit-remaining": "4997", "x-github-media-type": "github.v3; param=full; format=json", "x-content-type-options": "nosniff", "content-security-policy": "default-src 'none'", "access-control-expose-headers": "ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval", "x-github-request-id": "3F91CA23:6394:28C0AA7:5694F886", "strict-transport-security": "max-age=31536000; includeSubdomains; preload", "vary": "Accept-Encoding", "server": "GitHub.com", "x-ratelimit-limit": "5000", "x-oauth-scopes": "admin:public_key, gist, repo, user", "x-served-by": "7b641bda7ec2ca7cd9df72d2578baf75", "access-control-allow-credentials": "true", "date": "Tue, 12 Jan 2016 12:58:47 GMT", "x-frame-options": "deny", "access-control-allow-origin": "*", "x-accepted-oauth-scopes": "", "x-xss-protection": "1; mode=block", "x-ratelimit-reset": "1452606964"}, "status": {"message": "No Content", "code": 204}, "url": "https://api.github.com/repos/sigmavirus24/github3.py/collaborators/itsmemattchung"}, "recorded_at": "2016-01-12T12:58:47"}], "recorded_with": "betamax/0.5.0"} \ No newline at end of file diff --git a/tests/integration/test_repos_repo.py b/tests/integration/test_repos_repo.py index 8e190d6d7..bd0838b4c 100644 --- a/tests/integration/test_repos_repo.py +++ b/tests/integration/test_repos_repo.py @@ -409,6 +409,22 @@ def test_delete(self): assert repository is not None assert repository.delete() is True + def test_delete_key(self): + """Test the ability to delete a key from a repository.""" + self.token_login() + cassette_name = self.cassette_name('delete_key') + with self.recorder.use_cassette(cassette_name): + repository = self.gh.repository('itsmemattchung', 'github3.py') + assert repository.delete_key(15312662) is True + + def test_delete_subscription(self): + """Test the ability to delete a subscription from a repository.""" + self.token_login() + cassette_name = self.cassette_name('delete_subscription') + with self.recorder.use_cassette(cassette_name): + repository = self.gh.repository('sigmavirus24', 'github3.py') + assert repository.delete_subscription() is True + def test_deployment(self): """Test that a deployment can be retrieved by its id.""" cassette_name = self.cassette_name('deployment') @@ -441,6 +457,14 @@ def test_directory_contents(self): assert content.content is None assert content.decoded is None + def test_edit(self): + """Test the ability to edit a repository.""" + self.token_login() + cassette_name = self.cassette_name('edit') + with self.recorder.use_cassette(cassette_name): + repository = self.gh.repository('itsmemattchung', 'github3.py') + assert repository.edit('github3py') is True + def test_events(self): """Test that a user can iterate over the events from a repository.""" cassette_name = self.cassette_name('events') @@ -476,6 +500,16 @@ def test_forks(self): for fork in forks: assert isinstance(fork, github3.repos.Repository) + def test_git_commit(self): + """Test the ability to retrieve a commit from a repository.""" + cassette_name = self.cassette_name('git_commit') + with self.recorder.use_cassette(cassette_name): + repository = self.gh.repository('sigmavirus24', 'github3.py') + commit = repository.git_commit( + '9ea7482560c9e70c66019f7981aa1727caf888e0' + ) + assert isinstance(commit, github3.git.Commit) + def test_hooks(self): """Test that a user can iterate over the hooks of a repository.""" self.basic_login() @@ -500,6 +534,17 @@ def test_ignore(self): subscription = repository.ignore() assert subscription.ignored is True + def test_is_collaborator(self): + """ + Test the ability to check if a user is a collaborator on a + repository. + """ + self.token_login() + cassette_name = self.cassette_name('is_collaborator') + with self.recorder.use_cassette(cassette_name): + repository = self.gh.repository('sigmavirus24', 'github3.py') + assert repository.is_collaborator('itsmemattchung') is True + def test_issue_events(self): """Test that a user can iterate over issue events in a repo.""" cassette_name = self.cassette_name('issue_events') diff --git a/tests/test_repos.py b/tests/test_repos.py index 811d277bb..72e5bfd38 100644 --- a/tests/test_repos.py +++ b/tests/test_repos.py @@ -15,63 +15,6 @@ def setUp(self): self.repo = repos.Repository(self.repo.as_dict(), self.g) self.api = 'https://api.github.com/repos/sigmavirus24/github3.py/' - def test_delete_key(self): - self.response('', 204) - self.delete(self.api + 'keys/2') - self.conf = {} - - self.assertRaises(github3.GitHubError, self.repo.delete_key, 2) - - self.login() - assert self.repo.delete_key(-2) is False - self.not_called() - assert self.repo.delete_key(2) - self.mock_assertions() - - def test_delete_subscription(self): - self.response('', 204) - self.delete(self.api + 'subscription') - - self.assertRaises(github3.GitHubError, self.repo.delete_subscription) - self.not_called() - - self.login() - assert self.repo.delete_subscription() - self.mock_assertions() - - def test_edit(self): - self.response('repo') - self.patch(self.api[:-1]) - self.conf = {'data': {'name': 'foo'}} - - self.assertRaises(github3.GitHubError, self.repo.edit, 'Foo') - - self.login() - assert self.repo.edit(None) is False - self.not_called() - assert self.repo.edit('foo') - self.mock_assertions() - - self.conf['data']['description'] = 'bar' - assert self.repo.edit(**self.conf['data']) - self.mock_assertions() - - def test_is_collaborator(self): - self.response('', 204) - self.get(self.api + 'collaborators/user') - - assert self.repo.is_collaborator(None) is False - self.not_called() - assert self.repo.is_collaborator('user') - self.mock_assertions() - - def test_git_commit(self): - self.response('git_commit') - self.get(self.api + 'git/commits/fakesha') - - assert isinstance(self.repo.git_commit('fakesha'), github3.git.Commit) - self.mock_assertions() - def test_hook(self): self.response('hook') self.get(self.api + 'hooks/2') diff --git a/tests/unit/test_repos_repo.py b/tests/unit/test_repos_repo.py index b28ce9c54..75bbb508b 100644 --- a/tests/unit/test_repos_repo.py +++ b/tests/unit/test_repos_repo.py @@ -1,5 +1,6 @@ """Unit tests for Repositories.""" import datetime +import mock import pytest from github3 import GitHubError @@ -438,6 +439,28 @@ def test_delete(self): assert self.session.delete.called is True + def test_delete_key(self): + """Verify the request for deleting a key on the repository.""" + self.instance.delete_key(1) + + self.session.delete.assert_called_once_with( + url_for('keys/1') + ) + + def test_delete_key_required_id(self): + """Verify the request for deleting a key on the repository.""" + assert self.instance.delete_key(-1) is False + + self.session.delete.called is False + + def test_delete_subscription(self): + """Verify the request for deleting a subscription.""" + self.instance.delete_subscription() + + self.session.delete.assert_called_once_with( + url_for('subscription') + ) + def test_directory_contents(self): """Verify the request made to retrieve a directory's contents.""" self.instance.directory_contents('path/to/directory') @@ -468,6 +491,32 @@ def test_deployment_requires_positive_int(self): assert self.session.get.called is False + def test_edit(self): + """Verify the request for editing a repository.""" + data = { + 'name': 'hello-world', + 'description': 'repo description', + 'homepage': 'homepage_url', + 'private': True, + 'has_issues': True, + 'has_wiki': True, + 'has_downloads': True, + 'default_branch': 'develop' + } + + with mock.patch.object(Repository, '_update_attributes') as up_attr: + assert self.instance.edit(**data) is True + assert up_attr.called is True + self.patch_called_with( + url_for(), + data=data + ) + + def test_edit_required_name(self): + """Verify the request for editing a repository.""" + assert self.instance.edit(None) is False + assert self.session.patch.called is False + def test_file_contents(self): """Verify the request made to retrieve a dictionary's contents.""" self.instance.file_contents('path/to/file.txt', ref='some-sha') @@ -477,6 +526,36 @@ def test_file_contents(self): params={'ref': 'some-sha'} ) + def test_git_commit_required_sha(self): + """Verify the request for retrieving a git commit from a repository.""" + self.instance.git_commit('') + assert self.session.get.called is False + + def test_git_commit(self): + """Verify the request for retrieving a git commit from a repository.""" + self.instance.git_commit('fake-sha') + self.session.get.assert_called_once_with( + url_for('git/commits/fake-sha') + ) + + def test_is_collaborator_required_username(self): + """ + Verify the request for checking if a user is a collaborator on a + repository. + """ + assert self.instance.is_collaborator('') is False + assert self.session.get.called is False + + def test_is_collaborator(self): + """ + Verify the request for checking if a user is a collaborator on a + repository. + """ + self.instance.is_collaborator('octocat') + self.session.get.assert_called_once_with( + url_for('collaborators/octocat') + ) + def test_key(self): """Test the ability to fetch a deploy key.""" self.instance.key(10) @@ -999,12 +1078,41 @@ def test_create_pull_from_issue(self): ) def test_create_status(self): - """Verify the request for creating a status object on a commit.""" + """ + Show that a user must be authenticated to create a status object on a + commit. + """ with pytest.raises(GitHubError): self.instance.create_status( sha='fake-sha' ) + def test_delete_key(self): + """ + Show that a user must be authenticated to delete a key on a + repository. + """ + with pytest.raises(GitHubError): + self.instance.delete_key(1) + + def test_delete_subscription(self): + """Show that deleting a subscription requires authentication.""" + with pytest.raises(GitHubError): + self.instance.delete_subscription() + + def test_edit(self): + """Show that editing a repository requires authentication.""" + with pytest.raises(GitHubError): + self.instance.edit(name='Hello') + + def test_is_collaborator(self): + """ + Show that checking if a user is collaborator on a repository requires + authentication. + """ + with pytest.raises(GitHubError): + self.instance.is_collaborator('octocat') + def test_hooks(self): """Show that a user must be authenticated to list hooks.""" with pytest.raises(GitHubError):