def _test_deploy_key(self, orgname, get_method, post_method):
        with NamedTemporaryFile(delete=False) as tmpfile:
            tmpfile.write("ssh-rsa")

        args = '--github-token ghtoken '
        args += 'github deploy-key -n reponame '
        args += '--keyfile %s ' % tmpfile.name
        if orgname:
            args += '-o orgname '
            expected_owner = "orgname"
        else:
            expected_owner = "username"

        parsed_args = self.parser.parse_args(args.split())

        get_method.return_value.json.return_value = {'login': '******'}

        expected_url = "https://api.github.com/repos/%s/reponame/keys" \
            % expected_owner
        expected_data = {"read_only": False, "title": "%s ssh key" %
                         expected_owner, "key": "ssh-rsa"}
        sfmanager.github_action(parsed_args, "", {})

        call_args, call_kwargs = post_method.call_args
        self.assertEqual(call_args[0], expected_url)
        self.assertEqual(call_kwargs.get('headers'), self.expected_gh_headers)
        self.assertEqual(json.loads(call_kwargs.get('data')), expected_data)

        # Remove tmpfile
        try:
            os.remove(tmpfile.name)
        except IOError:
            pass
    def test_delete_org_repo(self, get_method, delete_method):
        args = '--github-token ghtoken '
        args += 'github delete-repo -n reponame -o orgname'
        parsed_args = self.parser.parse_args(args.split())

        expected_url = "https://api.github.com/repos/orgname/reponame"
        kwargs = {'headers': self.expected_gh_headers}
        sfmanager.github_action(parsed_args, "", {})
        delete_method.assert_called_with(expected_url, **kwargs)
    def test_delete_repo(self, get_method, delete_method):
        args = '--github-token ghtoken github delete-repo -n reponame'.split()
        parsed_args = self.parser.parse_args(args)

        get_method.return_value.json.return_value = {'login': '******'}
        expected_url = "https://api.github.com/repos/username/reponame"
        kwargs = {'headers': self.expected_gh_headers}
        sfmanager.github_action(parsed_args, "", {})
        delete_method.assert_called_with(expected_url, **kwargs)
    def test_fork_repo(self):
        args = '--github-token ghtoken github fork-repo '
        args += '--fork https://github.com/openstack/swift '
        args += '--name swift'
        parsed_args = self.parser.parse_args(args.split())

        expected_url = "https://api.github.com/repos/openstack/swift/forks"

        with patch('requests.post') as method:
            with patch('requests.patch'):
                sfmanager.github_action(parsed_args, "", {})

                call_args, call_kwargs = method.call_args
                self.assertEqual(call_args[0], expected_url)
                self.assertEqual(call_kwargs.get('headers'),
                                 self.expected_gh_headers)
    def test_create_repo(self):
        args = '--github-token ghtoken github create-repo -n reponame'.split()
        parsed_args = self.parser.parse_args(args)

        expected_url = "https://api.github.com/user/repos"
        expected_data = {"name": "reponame", "private": False}

        with patch('requests.post') as method:
            sfmanager.github_action(parsed_args, "", {})

            call_args, call_kwargs = method.call_args
            self.assertEqual(call_args[0], expected_url)
            self.assertEqual(call_kwargs.get('headers'),
                             self.expected_gh_headers)
            self.assertEqual(json.loads(call_kwargs.get('data')),
                             expected_data)