| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- import unittest
- from unittest import mock
- from mkdocs.tests.base import load_config
- from mkdocs.commands import gh_deploy
- from mkdocs import __version__
- class TestGitHubDeploy(unittest.TestCase):
- def assert_mock_called_once(self, mock):
- """assert that the mock was called only once.
- The `mock.assert_called_once()` method was added in PY36.
- TODO: Remove this when PY35 support is dropped.
- """
- try:
- mock.assert_called_once()
- except AttributeError:
- if not mock.call_count == 1:
- msg = ("Expected '%s' to have been called once. Called %s times." %
- (mock._mock_name or 'mock', self.call_count))
- raise AssertionError(msg)
- @mock.patch('subprocess.Popen')
- def test_is_cwd_git_repo(self, mock_popeno):
- mock_popeno().wait.return_value = 0
- self.assertTrue(gh_deploy._is_cwd_git_repo())
- @mock.patch('subprocess.Popen')
- def test_is_cwd_not_git_repo(self, mock_popeno):
- mock_popeno().wait.return_value = 1
- self.assertFalse(gh_deploy._is_cwd_git_repo())
- @mock.patch('subprocess.Popen')
- def test_get_current_sha(self, mock_popeno):
- mock_popeno().communicate.return_value = (b'6d98394\n', b'')
- self.assertEqual(gh_deploy._get_current_sha('.'), '6d98394')
- @mock.patch('subprocess.Popen')
- def test_get_remote_url_ssh(self, mock_popeno):
- mock_popeno().communicate.return_value = (
- b'git@github.com:mkdocs/mkdocs.git\n',
- b''
- )
- expected = ('git@', 'mkdocs/mkdocs.git')
- self.assertEqual(expected, gh_deploy._get_remote_url('origin'))
- @mock.patch('subprocess.Popen')
- def test_get_remote_url_http(self, mock_popeno):
- mock_popeno().communicate.return_value = (
- b'https://github.com/mkdocs/mkdocs.git\n',
- b''
- )
- expected = ('https://', 'mkdocs/mkdocs.git')
- self.assertEqual(expected, gh_deploy._get_remote_url('origin'))
- @mock.patch('subprocess.Popen')
- def test_get_remote_url_enterprise(self, mock_popeno):
- mock_popeno().communicate.return_value = (
- b'https://notgh.com/mkdocs/mkdocs.git\n',
- b''
- )
- expected = (None, None)
- self.assertEqual(expected, gh_deploy._get_remote_url('origin'))
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None))
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.commands.gh_deploy.ghp_import.ghp_import', return_value=(True, ''))
- def test_deploy(self, mock_import, check_version, get_remote, get_sha, is_repo):
- config = load_config(
- remote_branch='test',
- )
- gh_deploy.gh_deploy(config)
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None))
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.commands.gh_deploy.ghp_import.ghp_import', return_value=(True, ''))
- @mock.patch('os.path.isfile', return_value=False)
- def test_deploy_no_cname(self, mock_isfile, mock_import, check_version, get_remote,
- get_sha, is_repo):
- config = load_config(
- remote_branch='test',
- )
- gh_deploy.gh_deploy(config)
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(
- 'git@', 'mkdocs/mkdocs.git'))
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.commands.gh_deploy.ghp_import.ghp_import', return_value=(True, ''))
- def test_deploy_hostname(self, mock_import, check_version, get_remote, get_sha, is_repo):
- config = load_config(
- remote_branch='test',
- )
- gh_deploy.gh_deploy(config)
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None))
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.commands.gh_deploy.ghp_import.ghp_import', return_value=(True, ''))
- def test_deploy_ignore_version_default(self, mock_import, check_version, get_remote, get_sha, is_repo):
- config = load_config(
- remote_branch='test',
- )
- gh_deploy.gh_deploy(config)
- self.assert_mock_called_once(check_version)
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._get_remote_url', return_value=(None, None))
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.commands.gh_deploy.ghp_import.ghp_import', return_value=(True, ''))
- def test_deploy_ignore_version(self, mock_import, check_version, get_remote, get_sha, is_repo):
- config = load_config(
- remote_branch='test',
- )
- gh_deploy.gh_deploy(config, ignore_version=True)
- check_version.assert_not_called()
- @mock.patch('mkdocs.commands.gh_deploy._is_cwd_git_repo', return_value=True)
- @mock.patch('mkdocs.commands.gh_deploy._get_current_sha', return_value='shashas')
- @mock.patch('mkdocs.commands.gh_deploy._check_version')
- @mock.patch('mkdocs.utils.ghp_import.ghp_import')
- @mock.patch('mkdocs.commands.gh_deploy.log')
- def test_deploy_error(self, mock_log, mock_import, check_version, get_sha, is_repo):
- error_string = 'TestError123'
- mock_import.return_value = (False, error_string)
- config = load_config(
- remote_branch='test',
- )
- self.assertRaises(SystemExit, gh_deploy.gh_deploy, config)
- mock_log.error.assert_called_once_with('Failed to deploy to GitHub with error: \n%s',
- error_string)
- class TestGitHubDeployLogs(unittest.TestCase):
- @mock.patch('subprocess.Popen')
- def test_mkdocs_newer(self, mock_popeno):
- mock_popeno().communicate.return_value = (b'Deployed 12345678 with MkDocs version: 0.1.2\n', b'')
- with self.assertLogs('mkdocs', level='INFO') as cm:
- gh_deploy._check_version('gh-pages')
- self.assertEqual(
- cm.output, ['INFO:mkdocs.commands.gh_deploy:Previous deployment was done with MkDocs '
- 'version 0.1.2; you are deploying with a newer version ({})'.format(__version__)]
- )
- @mock.patch('subprocess.Popen')
- def test_mkdocs_older(self, mock_popeno):
- mock_popeno().communicate.return_value = (b'Deployed 12345678 with MkDocs version: 10.1.2\n', b'')
- with self.assertLogs('mkdocs', level='ERROR') as cm:
- self.assertRaises(SystemExit, gh_deploy._check_version, 'gh-pages')
- self.assertEqual(
- cm.output, ['ERROR:mkdocs.commands.gh_deploy:Deployment terminated: Previous deployment was made with '
- 'MkDocs version 10.1.2; you are attempting to deploy with an older version ({}). Use '
- '--ignore-version to deploy anyway.'.format(__version__)]
- )
- @mock.patch('subprocess.Popen')
- def test_version_unknown(self, mock_popeno):
- mock_popeno().communicate.return_value = (b'No version specified\n', b'')
- with self.assertLogs('mkdocs', level='WARNING') as cm:
- gh_deploy._check_version('gh-pages')
- self.assertEqual(
- cm.output,
- ['WARNING:mkdocs.commands.gh_deploy:Version check skipped: No version specified in previous deployment.']
- )
|