Files
PyGithub/tests/GithubIntegration.py
T
TechnicalPirate 78d283b9b5 Updated setup.py to exclude tests (#1031)
# Problem #
The `.whl` available on PyPi for this repository contains its entire `tests` submodule. 

The total size of the `pygithub` module is less than `1mb` without tests and `>23mb` with. 

Previous discussions on this topic indicated the removal of tests would be accepted if someone created a pull request to do so: https://github.com/PyGithub/PyGithub/issues/672 

This is that pull request! 😄

# Solution/Implementation # 

- Moved "tests" to root of the repository ( outside the package ) 
    - Added `tests.` module path to the imports in `AllTests.py`
- Updated `setup.py`
    - Removed `package_data` from product
    - Removed "tests" from packages definition
    - Repointed `test_suite` to new location
- Updated `travis.yml`
    - Added conditional ( if not `py2.7` ) conversion of code to `py3`

_... apologies for all the failed build spam below - new to working with Travis CI / had some gotcha moments!_
2019-04-16 11:45:02 +08:00

120 lines
4.0 KiB
Python

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/app/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