def test_show_with_user(self, capfd):
        """Test show method with user."""
        data = [('caffeine-reloaded', [('caffeine-reloaded_0.0.3_all.deb', 2),
                                       ('caffeine-reloaded_0.0.2_all.deb', 1),
                                       ('caffeine-reloaded_0.0.1_all.deb', 0)
                                       ]),
                ('debtool', [('debtool_0.2.5_all.deb', 62),
                             ('debtool_0.2.4_all.deb', 5),
                             ('debtool_0.2.1_all.deb', 0),
                             ('debtool_0.2.2_all.deb', 0),
                             ('debtool_0.2.3_all.deb', 2)])]
        text_wanted = ('\x1b[1mcaffeine-reloaded\x1b[0m\n'
                       '2    caffeine-reloaded_0.0.3_all.deb\n'
                       '1    caffeine-reloaded_0.0.2_all.deb\n'
                       '0    caffeine-reloaded_0.0.1_all.deb\n'
                       '\n'
                       '\x1b[1mdebtool\x1b[0m\n'
                       '62   debtool_0.2.5_all.deb\n'
                       '5    debtool_0.2.4_all.deb\n'
                       '0    debtool_0.2.1_all.deb\n'
                       '0    debtool_0.2.2_all.deb\n'
                       '2    debtool_0.2.3_all.deb\n'
                       '\n')

        github = gdc.Github()
        with patch.object(github, 'get_releases_by_user') as mocked_function:
            mocked_function.return_value = data
            github.get_releases_by_user = mocked_function
            github.show('brbsix')

        mocked_function.assert_called_once_with('brbsix')
        assert capfd.readouterr()[0] == text_wanted
    def test_get_releases_by_repo_for_repo_without_releases(self):
        """Test get_releases_by_repo method for a repo without any releases."""
        with requests_mock.Mocker() as mock:
            mock.get('https://api.github.com/repos/brbsix/craigslist/releases',
                     text='[]')
            releases = list(gdc.Github().get_releases_by_repo(
                'brbsix', 'craigslist'))

        assert releases == []
    def test_get_releases_by_tag(self):
        """Test get_releases_by_tag method."""
        releases_wanted = [('debtool_0.2.5_all.deb', 62)]

        with requests_mock.Mocker() as mock:
            mock.get(
                'https://api.github.com/repos/brbsix/debtool/releases/tags/v0.2.5',
                text=read('tag'))
            releases = list(gdc.Github().get_releases_by_tag(
                'brbsix', 'debtool', 'v0.2.5'))

        assert releases == releases_wanted
    def test_get_releases_by_tag_for_repo_without_assets(self):
        """
        Test get_releases_by_tag method for a repo without any downloadable
        binary assets.
        """
        with requests_mock.Mocker() as mock:
            mock.get(
                'https://api.github.com/repos/fopina/pyspeedtest/releases/tags/v1.2.4',
                text=read('tag_empty'))
            releases = list(gdc.Github().get_releases_by_tag(
                'fopina', 'pyspeedtest', 'v1.2.4'))

        assert releases == []
    def test_show_with_tag_summarized(self, capfd):
        """Test show method with tag (summarized)."""
        data = [('debtool_0.2.5_all.deb', 62)]
        text_wanted = '62\n'

        github = gdc.Github()
        with patch.object(github, 'get_releases_by_tag') as mocked_function:
            mocked_function.return_value = data
            github.get_releases_by_tag = mocked_function
            github.show('brbsix', 'debtool', 'v0.2.5', summarize=True)

        mocked_function.assert_called_once_with('brbsix', 'debtool', 'v0.2.5')
        assert capfd.readouterr()[0] == text_wanted
    def test_get_releases_by_repo(self):
        """Test get_releases_by_repo method."""
        releases_wanted = [('debtool_0.2.5_all.deb', 62),
                           ('debtool_0.2.4_all.deb', 5),
                           ('debtool_0.2.1_all.deb', 0),
                           ('debtool_0.2.2_all.deb', 0),
                           ('debtool_0.2.3_all.deb', 2)]

        with requests_mock.Mocker() as mock:
            mock.get('https://api.github.com/repos/brbsix/debtool/releases',
                     text=read('debtool_releases'))
            releases = list(gdc.Github().get_releases_by_repo(
                'brbsix', 'debtool'))

        assert releases == releases_wanted
    def test_request_with_no_token(self, capfd):
        """Test _request method with no authentication token."""
        api = '/user'
        url = 'https://api.github.com' + api
        text = ('{"message":"Requires authentication"'
                ',"documentation_url":"https://developer.github.com/v3"}')

        with requests_mock.Mocker() as mock:
            mock.get(url, text=text)

            with pytest.raises(SystemExit) as exception:
                # perform request
                gdc.Github()._request(api)

        # ensure stderr and exit status are as expected
        assert capfd.readouterr()[1] == 'ERROR: Requires authentication\n' \
            and exception.value.code is 1
    def test_request_with_invalid_response(self, capfd):
        """Test _request method with an invalid response."""
        api = '/badrequest'
        url = 'https://api.github.com' + api
        text = ('{"message":"Not Found"'
                ',"documentation_url":"https://developer.github.com/v3"}')

        with requests_mock.Mocker() as mock:
            mock.get(url, text=text)

            with pytest.raises(SystemExit) as exception:
                # perform request
                gdc.Github()._request(api)

        # ensure stderr and exit status are as expected
        assert capfd.readouterr()[1] == 'ERROR: Not Found\n' and \
            exception.value.code is 1
    def test_request_with_invalid_token(self, capfd, token_invalid):
        """Test _request method with an invalid authentication token."""
        api = '/user'
        url = 'https://api.github.com' + api
        text = ('{"message":"Bad credentials"'
                ',"documentation_url":"https://developer.github.com/v3"}')
        request_headers = {'Authorization': 'token %s' % token_invalid}

        with requests_mock.Mocker() as mock:
            mock.get(url, request_headers=request_headers, text=text)

            with pytest.raises(SystemExit) as exception:
                # perform request
                gdc.Github()._request(api)

        # ensure stderr and exit status are as expected
        assert capfd.readouterr()[1] == 'ERROR: Bad credentials\n' \
            and exception.value.code is 1
Пример #10
0
    def test_get_repos_by_user(self):
        """Test get_repos_by_user method."""
        repos_wanted = [
            'android_frameworks_base', 'aria2-webui-launcher', 'bart',
            'bash-config', 'brackets', 'brackets-shell', 'brbsix.github.io',
            'broadway-scripts', 'caffeine-reloaded', 'cookiecutter-pylibrary',
            'craigslist-rental-market', 'debtool', 'deepdiff', 'devscripts',
            'dlocate', 'dockerize', 'dpkg-repack', 'DuckieTV-installer',
            'encfs-tool', 'github-download-count', 'icon-library', 'imgur.sh',
            'installdist', 'minidb', 'net-utils', 'notify-ssh', 'periscope',
            'ping-indicator', 'piptool', 'ppa-tools'
        ]

        with requests_mock.Mocker() as mock:
            mock.get('https://api.github.com/users/brbsix/repos',
                     text=read('repos'))
            repos = list(gdc.Github().get_repos_by_user('brbsix'))

        assert repos == repos_wanted
Пример #11
0
    def test_get_releases_by_user(self):
        """Test get_releases_by_user method."""
        # repos used to create mocks
        repos = [
            'android_frameworks_base', 'aria2-webui-launcher', 'bart',
            'bash-config', 'brackets', 'brackets-shell', 'brbsix.github.io',
            'broadway-scripts', 'cookiecutter-pylibrary',
            'craigslist-rental-market', 'deepdiff', 'devscripts', 'dlocate',
            'dockerize', 'dpkg-repack', 'DuckieTV-installer', 'encfs-tool',
            'github-download-count', 'icon-library', 'imgur.sh', 'installdist',
            'minidb', 'net-utils', 'notify-ssh', 'periscope', 'ping-indicator',
            'piptool', 'ppa-tools'
        ]
        mocks = [
            ('https://api.github.com/users/brbsix/repos', read('repos')),
            ('https://api.github.com/repos/brbsix/caffeine-reloaded/releases',
             read('caffeine_releases')),
            ('https://api.github.com/repos/brbsix/debtool/releases',
             read('debtool_releases'))
        ]
        for repo in repos:
            mocks.append(
                ('https://api.github.com/repos/brbsix/%s/releases' % repo,
                 '[]'))

        releases_wanted = [('caffeine-reloaded',
                            [('caffeine-reloaded_0.0.3_all.deb', 2),
                             ('caffeine-reloaded_0.0.2_all.deb', 1),
                             ('caffeine-reloaded_0.0.1_all.deb', 0)]),
                           ('debtool', [('debtool_0.2.5_all.deb', 62),
                                        ('debtool_0.2.4_all.deb', 5),
                                        ('debtool_0.2.1_all.deb', 0),
                                        ('debtool_0.2.2_all.deb', 0),
                                        ('debtool_0.2.3_all.deb', 2)])]

        with requests_mock.Mocker() as mock:
            # set up mocks
            for url, text in mocks:
                mock.get(url, text=text)
            releases = list(gdc.Github().get_releases_by_user('brbsix'))

        assert releases == releases_wanted
Пример #12
0
    def test_show_with_repo(self, capfd):
        """Test show method with repo."""
        data = [('debtool_0.2.5_all.deb', 62), ('debtool_0.2.4_all.deb', 5),
                ('debtool_0.2.1_all.deb', 0), ('debtool_0.2.2_all.deb', 0),
                ('debtool_0.2.3_all.deb', 2)]
        text_wanted = dedent('''\
            62   debtool_0.2.5_all.deb
            5    debtool_0.2.4_all.deb
            0    debtool_0.2.1_all.deb
            0    debtool_0.2.2_all.deb
            2    debtool_0.2.3_all.deb
            ''')

        github = gdc.Github()
        with patch.object(github, 'get_releases_by_repo') as mocked_function:
            mocked_function.return_value = data
            github.get_releases_by_repo = mocked_function
            github.show('brbsix', 'debtool')

        mocked_function.assert_called_once_with('brbsix', 'debtool')
        assert capfd.readouterr()[0] == text_wanted
Пример #13
0
    def test_get(self):
        """Test _get method."""
        api = '/users/brbsix'
        url = 'https://api.github.com' + api
        text = (
            '{"login":"******"'
            ',"id":6672131'
            ',"avatar_url":"https://avatars.githubusercontent.com/u/6672131?v=3"'
            ',"gravatar_id":"","url":"https://api.github.com/users/brbsix"'
            ',"html_url":"https://github.com/brbsix"'
            ',"followers_url":"https://api.github.com/users/brbsix/followers"'
            ',"following_url":"https://api.github.com/users/brbsix/following{/other_user}"'
            ',"gists_url":"https://api.github.com/users/brbsix/gists{/gist_id}"'
            ',"starred_url":"https://api.github.com/users/brbsix/starred{/owner}{/repo}"'
            ',"subscriptions_url":"https://api.github.com/users/brbsix/subscriptions"'
            ',"organizations_url":"https://api.github.com/users/brbsix/orgs"'
            ',"repos_url":"https://api.github.com/users/brbsix/repos"'
            ',"events_url":"https://api.github.com/users/brbsix/events{/privacy}"'
            ',"received_events_url":"https://api.github.com/users/brbsix/received_events"'
            ',"type":"User"'
            ',"site_admin":false'
            ',"name":"Six"'
            ',"company":null'
            ',"blog":"https://brbsix.github.com"'
            ',"location":"SF Bay Area"'
            ',"email":null'
            ',"hireable":true'
            ',"bio":null'
            ',"public_repos":51'
            ',"public_gists":7'
            ',"followers":14'
            ',"following":85'
            ',"created_at":"2014-02-13T12:50:01Z"'
            ',"updated_at":"2016-04-10T04:55:45Z"}')

        with requests_mock.Mocker() as mock:
            mock.get(url, text=text)

            assert gdc.Github()._get(api) == json.loads(text)
Пример #14
0
    def test_show_with_user_summarized(self, capfd):
        """Test show method with user (summarized)."""
        data = [('caffeine-reloaded', [('caffeine-reloaded_0.0.3_all.deb', 2),
                                       ('caffeine-reloaded_0.0.2_all.deb', 1),
                                       ('caffeine-reloaded_0.0.1_all.deb', 0)
                                       ]),
                ('debtool', [('debtool_0.2.5_all.deb', 62),
                             ('debtool_0.2.4_all.deb', 5),
                             ('debtool_0.2.1_all.deb', 0),
                             ('debtool_0.2.2_all.deb', 0),
                             ('debtool_0.2.3_all.deb', 2)])]
        text_wanted = dedent('''\
            3    caffeine-reloaded
            69   debtool
            ''')

        github = gdc.Github()
        with patch.object(github, 'get_releases_by_user') as mocked_function:
            mocked_function.return_value = data
            github.get_releases_by_user = mocked_function
            github.show('brbsix', summarize=True)

        mocked_function.assert_called_once_with('brbsix')
        assert capfd.readouterr()[0] == text_wanted
Пример #15
0
 def test_init_no_token(self):
     """Test for no authorization token (GITHUB_TOKEN unset)."""
     assert gdc.Github().headers == {}
Пример #16
0
 def test_init_empty_token(self, token_empty):
     """Test for empty authorization token (GITHUB_TOKEN set empty)."""
     assert gdc.Github().headers == {}
Пример #17
0
 def test_init_with_token(self, token_valid):
     """Test for authorization token (GITHUB_TOKEN set)."""
     assert gdc.Github().headers == {
         'Authorization': 'token %s' % token_valid
     }