mirror of
https://github.com/status-im/PyGithub.git
synced 2026-09-02 03:41:08 +00:00
@@ -0,0 +1,119 @@
|
||||
import jwt
|
||||
import json
|
||||
import time
|
||||
import sys
|
||||
import unittest
|
||||
import requests
|
||||
import datetime
|
||||
from github.GithubObject import GithubObject
|
||||
|
||||
|
||||
private_key = """
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIICXAIBAAKBgQC+5ePolLv6VcWLp2f17g6r6vHl+eoLuodOOfUl8JK+MVmvXbPa
|
||||
xDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQp411o+kiOhzLxfakp/kewf4U
|
||||
HJnu4M/A2nHmxXVe2lzYnZvZHX5BM4SJo5PGdr0Ue2JtSXoAtYr6qE9maQIDAQAB
|
||||
AoGAFhOJ7sy8jG+837Clcihso+8QuHLVYTPaD+7d7dxLbBlS8NfaQ9Nr3cGUqm/N
|
||||
xV9NCjiGa7d/y4w/vrPwGh6UUsA+CvndwDgBd0S3WgIdWvAvHM8wKgNh/GBLLzhT
|
||||
Bg9BouRUzcT1MjAnkGkWqqCAgN7WrCSUMLt57TNleNWfX90CQQDjvVKTT3pOiavD
|
||||
3YcLxwkyeGd0VMvKiS4nV0XXJ97cGXs2GpOGXldstDTnF5AnB6PbukdFLHpsx4sW
|
||||
Hft3LRWnAkEA1pY15ke08wX6DZVXy7zuQ2izTrWSGySn7B41pn55dlKpttjHeutA
|
||||
3BEQKTFvMhBCphr8qST7Wf1SR9FgO0tFbwJAEhHji2yy96hUyKW7IWQZhrem/cP8
|
||||
p4Va9CQolnnDZRNgg1p4eiDiLu3dhLiJ547joXuWTBbLX/Y1Qvv+B+a74QJBAMCW
|
||||
O3WbMZlS6eK6//rIa4ZwN00SxDg8I8FUM45jwBsjgVGrKQz2ilV3sutlhIiH82kk
|
||||
m1Iq8LMJGYl/LkDJA10CQBV1C+Xu3ukknr7C4A/4lDCa6Xb27cr1HanY7i89A+Ab
|
||||
eatdM6f/XVqWp8uPT9RggUV9TjppJobYGT2WrWJMkYw=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
"""
|
||||
|
||||
public_key = """
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+5ePolLv6VcWLp2f17g6r6vHl
|
||||
+eoLuodOOfUl8JK+MVmvXbPaxDy0SS0pQhwTOMtB0VdSt++elklDCadeokhEoGDQ
|
||||
p411o+kiOhzLxfakp/kewf4UHJnu4M/A2nHmxXVe2lzYnZvZHX5BM4SJo5PGdr0U
|
||||
e2JtSXoAtYr6qE9maQIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
"""
|
||||
|
||||
|
||||
class GithubIntegration(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
# This flag ask requester to do some checking,
|
||||
# for debug and test purpose. But
|
||||
# `InstallationAuthorization.InstallationAuthorization` is a
|
||||
# `NonCompletableGithubObject`, it does not have requester.
|
||||
# So the check is not needed.
|
||||
# see `GithubIntegration.get_access_token`
|
||||
self.origin_check_after_init_flag = GithubObject.CHECK_AFTER_INIT_FLAG
|
||||
GithubObject.setCheckAfterInitFlag(False)
|
||||
|
||||
self.origin_time = sys.modules['time'].time
|
||||
sys.modules['time'].time = lambda: 1550055331.7435968
|
||||
|
||||
class Mock(object):
|
||||
def __init__(self):
|
||||
self.args = tuple()
|
||||
self.kwargs = dict()
|
||||
|
||||
@property
|
||||
def status_code(self):
|
||||
return 201
|
||||
|
||||
def json(self):
|
||||
return json.loads(self.text)
|
||||
|
||||
@property
|
||||
def text(self):
|
||||
return (
|
||||
u'{"token": "v1.ce63424bc55028318325caac4f4c3a5378ca0038",'
|
||||
u'"expires_at": "2019-02-13T11:10:38Z"}'
|
||||
)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
self.args = args
|
||||
self.kwargs = kwargs
|
||||
return self
|
||||
|
||||
self.origin_request_post = sys.modules['requests'].post
|
||||
self.mock = Mock()
|
||||
sys.modules['requests'].post = self.mock
|
||||
|
||||
def testCreateJWT(self):
|
||||
from github import GithubIntegration
|
||||
integration = GithubIntegration(25216, private_key)
|
||||
token = integration.create_jwt()
|
||||
payload = jwt.decode(
|
||||
token,
|
||||
key=public_key,
|
||||
algorithm="RS256",
|
||||
options={'verify_exp': False},
|
||||
)
|
||||
self.assertDictEqual(
|
||||
payload,
|
||||
{
|
||||
'iat': 1550055331,
|
||||
'exp': 1550055391,
|
||||
'iss': 25216
|
||||
}
|
||||
)
|
||||
|
||||
def testGetAccessToken(self):
|
||||
from github import GithubIntegration
|
||||
integration = GithubIntegration(25216, private_key)
|
||||
auth_obj = integration.get_access_token(664281)
|
||||
self.assertEqual(
|
||||
self.mock.args[0],
|
||||
"https://api.github.com/installations/664281/access_tokens"
|
||||
)
|
||||
self.assertEqual(
|
||||
auth_obj.token, "v1.ce63424bc55028318325caac4f4c3a5378ca0038"
|
||||
)
|
||||
self.assertEqual(
|
||||
auth_obj.expires_at, datetime.datetime(2019, 2, 13, 11, 10, 38)
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
GithubObject.setCheckAfterInitFlag(self.origin_check_after_init_flag)
|
||||
sys.modules['time'].time = self.origin_time
|
||||
sys.modules['requests'].post = self.origin_request_post
|
||||
Reference in New Issue
Block a user