@@ -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')
|
||||
|
||||
Reference in New Issue
Block a user