212 lines
7.3 KiB
Python
212 lines
7.3 KiB
Python
import errno
|
|
import os
|
|
|
|
from ..api import DjangoProjectHooksConfig, DjangoProject
|
|
from ..exceptions import DjangoDeployError
|
|
|
|
from .base import DjangoDeployTestCase
|
|
|
|
|
|
class DjangoProjectHooksConfigTestCase(DjangoDeployTestCase):
|
|
def test_init(self):
|
|
with self.assertRaises(AssertionError):
|
|
DjangoProjectHooksConfig()
|
|
with self.assertRaises(AssertionError):
|
|
DjangoProjectHooksConfig(project_dir='.', settings_dir='.')
|
|
|
|
|
|
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):
|
|
# 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_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)
|
|
self.assert_urlpatterns(project_dir, [])
|
|
|
|
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)
|
|
|
|
installed_apps = [
|
|
'django_deploy.tests.fake_app1',
|
|
'django_deploy.tests.fake_app2',
|
|
]
|
|
self.assert_installed_apps(project_dir, installed_apps)
|
|
|
|
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')
|