Skip to content

Commit 4d5886f

Browse files
committed
Fully cover the possible paths for yielding the wrapper object in a template tag.
1 parent c204ed3 commit 4d5886f

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

stagesetting/templatetags/stagesetting.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
from __future__ import unicode_literals
55
from __future__ import division
66
from django.template import Library
7-
from stagesetting.models import RuntimeSettingWrapper
8-
7+
from stagesetting.models import RuntimeSettingWrapper, RuntimeSetting
98

109
register = Library()
1110

@@ -16,6 +15,8 @@ def stagesetting(context):
1615
wrapper = context['STAGESETTING']
1716
elif 'request' in context and hasattr(context['request'], 'stagesetting'):
1817
wrapper = context['request'].stagesetting
18+
elif hasattr(context, 'request') and hasattr(context.request, 'stagesetting'):
19+
wrapper = context.request.stagesetting
1920
else:
20-
wrapper = RuntimeSettingWrapper()
21+
wrapper = RuntimeSettingWrapper(model=RuntimeSetting)
2122
return wrapper

tests/test_templatetags.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
# -*- coding: utf-8 -*-
22
from __future__ import absolute_import
33
from __future__ import unicode_literals
4-
from django.template import Template, Context
4+
from django.template import Template, Context, RequestContext
55
import pytest
66

7+
from stagesetting.context_processors import runtime_settings
8+
from stagesetting.middleware import ApplyRuntimeSettings
9+
10+
11+
@pytest.fixture
12+
def stagesetting_mw():
13+
return ApplyRuntimeSettings().process_view
14+
715

816
def test_loading():
917
assert Template("{% load stagesetting %}").render(Context()) == ''
@@ -12,3 +20,27 @@ def test_loading():
1220
@pytest.mark.django_db
1321
def test_works():
1422
assert Template("{% load stagesetting %}{% stagesetting as LOL %}{{ LOL|length }}").render(Context()) == '2'
23+
24+
25+
@pytest.mark.django_db
26+
def test_reuses_existing_context_variable_if_set_via_context_processor(rf):
27+
request = rf.get('/')
28+
context = Context()
29+
context.update(runtime_settings(request=request))
30+
assert Template("{% load stagesetting %}{% stagesetting as LOL %}{{ LOL|length }}").render(context) == '2'
31+
32+
33+
@pytest.mark.django_db
34+
def test_reuses_existing_context_variable_if_set_via_middleware_and_request_in_context(rf, stagesetting_mw):
35+
request = rf.get('/')
36+
stagesetting_mw(request=request, view_func=None, view_args=None, view_kwargs=None)
37+
context = Context({'request': request})
38+
assert Template("{% load stagesetting %}{% stagesetting as LOL %}{{ LOL|length }}").render(context) == '2'
39+
40+
41+
@pytest.mark.django_db
42+
def test_reuses_existing_context_variable_if_set_via_middleware_is_requestcontext(rf, stagesetting_mw):
43+
request = rf.get('/')
44+
stagesetting_mw(request=request, view_func=None, view_args=None, view_kwargs=None)
45+
context = RequestContext(request, {})
46+
assert Template("{% load stagesetting %}{% stagesetting as LOL %}{{ LOL|length }}").render(context) == '2'

0 commit comments

Comments
 (0)