Files
django-deploy/src/django_deploy/tests/test_api.py

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')