vendredi 6 février 2015

Django's override_settings decorator doesn't work

I'm working on open source cms based on django and I have a problem with the unit-tests. Here's a function I want to test:



from appname.conf import settings

def can_read(article, user):
if callable(settings.CAN_READ):
do_something


where appname.conf.settings is:



from django.conf import settings as django_settings

CAN_READ = getattr(django_settings, 'APPNAME_CAN_READ', None)


For the tests I need to change the settings for the can_read,



@override_settings(APPNAME_CAN_READ=lambda *args: False)
def test_user_dont_have_permission(self):

m = Model.objects.create()
u = User.objects.create(username='Noman', password='pass')

output = can_read(m, u)
self.assertFalse(output)


but somehow built-in override_settings decorator does not work. But if to import django.conf.settings in the same module where is can_read pleced, it has correct values. App also using runtests.py wich has settings config as:



settings.configure(
DEBUG=True,
AUTH_USER_MODEL='testdata.CustomUser',
DATABASES={
'default': {
'ENGINE': 'django.db.backends.sqlite3',
}
},
SITE_ID=1,
ROOT_URLCONF='app.tests.testdata.urls',
INSTALLED_APPS=[
'appname.tests.testdata',
'django.contrib.auth',
'django.contrib.sites',
'appname',
etc...
] + (['south'] if django.VERSION < (1, 7) else []),
MIDDLEWARE_CLASSES=[
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
],
TEMPLATE_CONTEXT_PROCESSORS=(
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.request",
"django.core.context_processors.static",
"django.core.context_processors.tz",
),
USE_TZ=True,
SOUTH_TESTS_MIGRATE=True,
SECRET_KEY = 'somekey',
)

Aucun commentaire:

Enregistrer un commentaire