It is nice now.
All checks were successful
buildbot/tox Build done.

This commit is contained in:
2019-11-16 18:50:53 +01:00
parent 18613d3600
commit f1f0c585b9
21 changed files with 750 additions and 408 deletions

View File

@@ -1,27 +1,204 @@
import errno
import os
import unittest
import pytest
from ..api import DjangoProject
from ..config import DJANGO_SETTINGS_DIR
from ..api import DjangoProjectHooksConfig, DjangoProject
from ..exceptions import DjangoDeployError
from .base import DjangoDeployTestCase
class DjangoProjectTestCase(unittest.TestCase):
@pytest.fixture(autouse=True)
def tmpdir(self, tmpdir): # pylint: disable=method-hidden
self.tmpdir = tmpdir
class DjangoProjectHooksConfigTestCase(DjangoDeployTestCase):
def test_init(self):
with self.assertRaises(AssertionError):
DjangoProjectHooksConfig()
with self.assertRaises(AssertionError):
DjangoProjectHooksConfig(project_dir='.', settings_dir='.')
def _assert_django_project(self, project_dir):
self.assertTrue(os.path.isdir(project_dir), 'no directory: {}'.format(project_dir))
settings_dir = os.path.join(project_dir, DJANGO_SETTINGS_DIR)
self.assertTrue(os.path.isdir(settings_dir), 'no directory: {}'.format(settings_dir))
settings_file = os.path.join(settings_dir, 'settings.py')
self.assertTrue(os.path.isfile(settings_file), 'no file: {}'.format(settings_file))
manage_script = os.path.join(project_dir, 'manage.py')
self.assertTrue(os.path.isfile(manage_script), 'no file: {}'.format(manage_script))
class DjangoProjectTestCase(DjangoDeployTestCase):
def setUp(self):
self._tmp_dir = str(self.tmpdir)
def test_init(self):
with self.assertRaises(TypeError):
DjangoProject() # pylint: disable=no-value-for-parameter
# existing project dir
DjangoProject(self._tmp_dir)
# not existing project dir
project_dir = os.path.join(self._tmp_dir, 'new')
DjangoProject(project_dir)
# project dir is an existing file
os.mknod(project_dir)
DjangoProject(project_dir)
def test_create(self):
project_dir = os.path.join(str(self.tmpdir), 'django')
# the parent of the to-be-created project dir shall also not exist.
project_dir = os.path.join(self._tmp_dir, 'new', 'sub', 'sub')
project = DjangoProject(project_dir)
project.create()
self._assert_django_project(project_dir)
self.assert_django_project(project_dir)
self.assert_django_deploy_hooks(project_dir)
def test_create_in_empty_dir(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
self.assert_django_project(project_dir)
self.assert_django_deploy_hooks(project_dir)
def test_create_in_project_dir(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
project = DjangoProject(project_dir)
try:
project.create()
except DjangoDeployError as e:
self.assertEqual(errno.EEXIST, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_create_without_installing_hooks(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create(install_hooks=False)
self.assert_django_project(project_dir)
self.assert_no_django_deploy_hooks(project_dir)
try:
project.create(install_hooks=False)
except DjangoDeployError as e:
self.assertEqual(errno.EEXIST, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
try:
project.create()
except DjangoDeployError as e:
self.assertEqual(errno.EEXIST, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_install_hooks(self):
project_dir = os.path.join(self._tmp_dir, 'new')
project = DjangoProject(project_dir)
try:
project.install_hooks()
except DjangoDeployError as e:
self.assertEqual(errno.ENOENT, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_install_hooks_in_empty_dir(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
try:
project.install_hooks()
except DjangoDeployError as e:
self.assertEqual(errno.EISDIR, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_install_hooks_in_project_dir(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create(install_hooks=False)
self.assert_django_project(project_dir)
project.install_hooks()
self.assert_django_deploy_hooks(project_dir)
def test_install_hooks_after_create(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
try:
project.install_hooks()
except DjangoDeployError as e:
self.assertEqual(errno.EEXIST, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_install_app(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
project.install_app('django_deploy.tests.fake_app1')
installed_apps = [
'django_deploy.tests.fake_app1',
]
self.assert_installed_apps(project_dir, installed_apps)
def test_install_apps(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
project.install_app('django_deploy.tests.fake_app1')
project.install_app('django_deploy.tests.fake_app1')
project.install_app('django_deploy.tests.fake_app2')
installed_apps = [
'django_deploy.tests.fake_app1',
'django_deploy.tests.fake_app2',
]
self.assert_installed_apps(project_dir, installed_apps)
def test_install_nonexisting_app(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
try:
project.install_app('django_deploy.tests.fake_app0')
except DjangoDeployError as e:
self.assertEqual(errno.ENOPKG, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_install_nonconforming_app(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
try:
project.install_app('django_deploy.tests.fake_app1', hooks_config_name='non_existing_submodule')
except DjangoDeployError as e:
self.assertEqual(errno.ENOENT, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')
def test_mount_app(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
project.mount_app('django_deploy.tests.fake_app1', '')
expected_urlpatterns = [
('URLResolver', '^/', 'django_deploy.tests.fake_app1.urls'),
]
self.assert_urlpatterns(project_dir, expected_urlpatterns)
def test_mount_apps(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
project.mount_app('django_deploy.tests.fake_app1', 'app1')
project.mount_app('django_deploy.tests.fake_app1', 'app1')
project.mount_app('django_deploy.tests.fake_app2', 'app2')
expected_urlpatterns = [
('URLResolver', '^app1/', 'django_deploy.tests.fake_app1.urls'),
('URLResolver', '^app2/', 'django_deploy.tests.fake_app2.urls'),
]
self.assert_urlpatterns(project_dir, expected_urlpatterns)
def test_mount_unmountable_app(self):
project_dir = self._tmp_dir
project = DjangoProject(project_dir)
project.create()
try:
project.mount_app('django_deploy', '/')
except DjangoDeployError as e:
self.assertEqual(errno.ENOLINK, e.code)
else: # pragma: no cover
self.fail('DjangoDeployError not raised')