123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- import os
- import sys
- import tempfile
- from os.path import exists, join
-
- import pytest
- from django.conf import settings
- from django.test import TestCase, override_settings
-
- from oscar.core import customisation
-
- VALID_FOLDER_PATH = 'tests/_site/apps'
-
-
- class TestUtilities(TestCase):
-
- def test_subfolder_extraction(self):
- folders = list(customisation.subfolders('/var/www/eggs'))
- self.assertEqual(folders, ['/var', '/var/www', '/var/www/eggs'])
-
-
- def test_raises_exception_for_nonexistant_app_label():
- with pytest.raises(ValueError):
- customisation.fork_app('sillytown', 'somefolder', 'sillytown')
-
-
- def test_raises_exception_if_app_has_already_been_forked():
- # We piggyback on another test which means a custom app is already in
- # the apps directory we use for the test suite. We just check that's still
- # the case here.
- assert exists(join(VALID_FOLDER_PATH, 'partner'))
- with pytest.raises(ValueError):
- customisation.fork_app('partner', VALID_FOLDER_PATH, 'partner')
-
-
- def test_creates_new_folder(tmpdir):
- path = tmpdir.mkdir('fork')
- customisation.fork_app('order', str(path), 'order')
- path.join('order').ensure_dir()
-
-
- def test_creates_init_file(tmpdir):
- path = tmpdir.mkdir('fork')
- customisation.fork_app('order', str(path), 'order')
-
- path.join('order').join('__init__.py').ensure()
-
-
- def test_handles_dashboard_app(tmpdir):
- # Dashboard apps are fiddly as they aren't identified by a single app
- # label.
- path = tmpdir.mkdir('fork')
- customisation.fork_app('catalogue_dashboard', str(path), 'dashboard.catalogue')
- # Check __init__.py created (and supporting folders)
-
- path.join('dashboard').join('catalogue').join('__init__.py').ensure()
-
-
- def test_creates_models_and_admin_file(tmpdir):
- path = tmpdir.mkdir('fork')
- customisation.fork_app('order', str(path), 'order')
- for module, expected_string in [
- ('models', 'from oscar.apps.order.models import *'),
- ('admin', 'from oscar.apps.order.admin import *'),
- ('apps', 'OrderConfig')
- ]:
- filepath = path.join('order').join('%s.py' % module)
- filepath.ensure()
- contents = filepath.read()
- assert expected_string in contents
-
-
- def test_copies_in_migrations_when_needed(tmpdir):
- path = tmpdir.mkdir('fork')
- for app, has_models in [('order', True), ('search', False)]:
- customisation.fork_app(app, str(path), app)
-
- native_migration_path = path.join(app).join('migrations')
- assert has_models == native_migration_path.check()
-
-
- def test_dashboard_app_config(tmpdir, monkeypatch):
- path = tmpdir.mkdir('fork')
- customisation.fork_app('dashboard', str(path), 'dashboard')
-
- path.join('__init__.py').write('')
- monkeypatch.syspath_prepend(str(tmpdir))
-
- config_module = __import__(
- '%s.dashboard.apps' % path.basename, fromlist=['DashboardConfig']
- )
-
- assert hasattr(config_module, 'DashboardConfig')
-
-
- class TestForkApp(TestCase):
-
- def setUp(self):
- self.original_paths = sys.path[:]
- sys.path.append('./tests/_site/')
-
- def tearDown(self):
- sys.path = self.original_paths
-
- def test_fork_third_party(self):
- tmpdir = tempfile.mkdtemp()
- installed_apps = list(settings.INSTALLED_APPS)
- installed_apps.append('thirdparty_package.apps.myapp')
- with override_settings(INSTALLED_APPS=installed_apps):
- customisation.fork_app('myapp', tmpdir, 'custom_myapp')
- forked_app_dir = join(tmpdir, 'custom_myapp')
- assert exists(forked_app_dir)
- assert exists(join(forked_app_dir, 'apps.py'))
- sys.path.append(tmpdir)
-
- config_module = __import__('custom_myapp.apps', fromlist=['CustomMyAppConfig'])
- assert hasattr(config_module, 'MyAppConfig')
- assert config_module.MyAppConfig.name.endswith('.custom_myapp')
-
- def test_absolute_target_path(self):
- tmpdir = tempfile.mkdtemp()
- customisation.fork_app('order', tmpdir, 'order')
- sys.path.append(tmpdir)
- config_module = __import__('order.apps', fromlist=['OrderConfig'])
- assert hasattr(config_module, 'OrderConfig')
- config_app_name = config_module.OrderConfig.name
- assert not config_app_name.startswith('.')
-
- def test_local_folder(self):
- tmpdir = tempfile.mkdtemp()
- os.chdir(tmpdir)
- customisation.fork_app('basket', '.', 'basket')
- sys.path.append(tmpdir)
- config_module = __import__('basket.apps', fromlist=['BasketConfig'])
- assert hasattr(config_module, 'BasketConfig')
- assert config_module.BasketConfig.name == 'basket'
|