class GithubConnectionTestCase(BaseTestCase):

    def setUp(self, *mocks):
        super(GithubConnectionTestCase, self).setUp()

        repo_list_file = self.test_data_folder + 'test_repo_list.json'
        self.git_repo_updater_obj = GitRepoUpdater('some_org', 'foobar_token', repo_list_file, self.mock_logger)
        self.rg.skip_repo_list = []

    @httprettified
    def test_fetch_repo_list_wrong_response_status(self):
        HTTPretty.register_uri(HTTPretty.GET, "https://api.github.com/orgs/some_org/repos",
                               body='Not found', status=404)
        self.git_repo_updater_obj.refresh_repo_list()
        self.assertTrue(self.git_repo_updater_obj.stop)

    @httprettified
    def test_fetch_repo_list_one_site_only(self):
        HTTPretty.register_uri(HTTPretty.GET, "https://api.github.com/orgs/some_org/repos",
                               body=open(self.test_data_folder + 'test_response_01.json').read(), status=200)
        self.git_repo_updater_obj.refresh_repo_list()
        self.assertEqual(len(self.git_repo_updater_obj.repo_list_cache), 2)

    @httprettified
    def test_fetch_repo_list_multiple_sites(self):
        responses = [
            HTTPretty.Response(
                body=open(self.test_data_folder + 'test_response_01.json').read(),
                status=200,
                link='<https://api.github.com/organizations/1989101/repos?page=2>;'
                     ' rel="next", '
                     '<https://api.github.com/organizations/1989101/repos?page=3>; '
                     'rel="last"'),
            HTTPretty.Response(
                body=open(self.test_data_folder + 'test_response_02.json').read(),
                status=200,
                link='<https://api.github.com/organizations/1989101/repos?page=3>; '
                     'rel="next", '
                     '<https://api.github.com/organizations/1989101/repos?page=3>;'
                     ' rel="last"'),
            HTTPretty.Response(
                body=open(self.test_data_folder + 'test_response_03.json').read(),
                status=200,
                link='<https://api.github.com/organizations/1989101/repos?page=3>; '
                     'rel="last"'),
        ]
        HTTPretty.register_uri(HTTPretty.GET, "https://api.github.com/orgs/some_org/repos", responses=responses)
        self.git_repo_updater_obj.refresh_repo_list()
        self.assertEqual(len(self.git_repo_updater_obj.repo_list_cache), 6)

    @httprettified
    def test_fetch_repo_list_reached_ratelimit(self):
        HTTPretty.register_uri(HTTPretty.GET, "https://api.github.com/orgs/some_org/repos", body='Out of X-Rate-Limit',
                               X_RateLimit_Remaining='0', X_RateLimit_Limit='5000', status=200)
        self.git_repo_updater_obj.refresh_repo_list()
        self.assertTrue(self.git_repo_updater_obj.stop)
    def setUp(self, *mocks):
        super(GithubConnectionTestCase, self).setUp()

        repo_list_file = self.test_data_folder + 'test_repo_list.json'
        self.git_repo_updater_obj = GitRepoUpdater('some_org', 'foobar_token', repo_list_file, self.mock_logger)
        self.rg.skip_repo_list = []