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