diff --git a/combo/apps/wcs/context_processors.py b/combo/apps/wcs/context_processors.py
deleted file mode 100644
index f99de32d..00000000
--- a/combo/apps/wcs/context_processors.py
+++ /dev/null
@@ -1,197 +0,0 @@
-# combo - content management system
-# Copyright (C) 2020 Entr'ouvert
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License as published
-# by the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-
-from django.utils.http import urlencode
-from requests.exceptions import RequestException
-
-from combo.apps.wcs.utils import get_wcs_services
-from combo.utils import requests
-
-
-def get_default_wcs_service_key():
- services = get_wcs_services()
-
- for key, service in services.items():
- if not service.get('secondary', False):
- # if secondary is not set or not set to True, return this one
- return key
-
- return None
-
-
-class LazyCardDefObjectsManager:
- def __init__(self, service_key, card_id, custom_view_id=None, filters=None, user=Ellipsis):
- self._service_key = service_key
- self._card_id = card_id
- self._custom_view_id = custom_view_id
-
- self._filters = filters or {}
- self._user = user
-
- self._cached_resultset = None
-
- def _clone(self):
- return LazyCardDefObjectsManager(
- service_key=self._service_key,
- card_id=self._card_id,
- custom_view_id=self._custom_view_id,
- filters=self._filters,
- user=self._user,
- )
-
- def order_by(self, attribute):
- qs = self._clone()
- qs._filters['order_by'] = attribute
- if not attribute:
- del qs._filters['order_by']
- return qs
-
- def with_custom_view(self, custom_view_id):
- qs = self._clone()
- qs._custom_view_id = custom_view_id
- return qs
-
- def get_full(self):
- qs = self._clone()
- qs._filters['full'] = 'on'
- return qs
-
- def access_control(self, user):
- qs = self._clone()
- qs._user = user
- return qs
-
- @property
- def count(self):
- return len(self)
-
- def filter_by(self, attribute):
- qs = self._clone()
- qs.pending_attr = attribute
- return qs
-
- def apply_filter_value(self, value):
- assert self.pending_attr
- qs = self._clone()
- if value is None:
- value = ''
- if isinstance(value, bool):
- value = str(value).lower()
- qs._filters['filter-%s' % self.pending_attr] = value
- return qs
-
- def filter_by_internal_id(self, internal_id):
- qs = self._clone()
- if internal_id:
- qs._filters['filter-internal-id'] = internal_id
- return qs
-
- def filter_by_number(self, number):
- qs = self._clone()
- if number:
- qs._filters['filter-number'] = number
- return qs
-
- def filter_by_user(self, user):
- qs = self._clone()
- if user and user.is_authenticated and user.get_name_id():
- qs._filters['filter-user-uuid'] = user.get_name_id()
- return qs
-
- def filter_by_status(self, status):
- qs = self._clone()
- if status:
- qs._filters['filter'] = status
- return qs
-
- def _get_results_from_wcs(self):
- service = get_wcs_services().get(self._service_key)
- if not service:
- return []
-
- api_url = 'api/cards/%s/list' % self._card_id
- if self._custom_view_id:
- api_url += '/%s' % self._custom_view_id
- if self._filters:
- query = urlencode(self._filters)
- api_url += '?%s' % query
- without_user = self._user is Ellipsis # not set
- try:
- response = requests.get(
- api_url,
- remote_service=service,
- user=None if without_user else self._user,
- without_user=without_user,
- log_errors=False,
- )
- response.raise_for_status()
- except RequestException:
- return []
-
- if response.json().get('err') == 1:
- return []
-
- return response.json().get('data') or []
-
- def _populate_cache(self):
- if self._cached_resultset is not None:
- return
- self._cached_resultset = self._get_results_from_wcs()
-
- def __len__(self):
- self._populate_cache()
- return len(self._cached_resultset)
-
- def __getitem__(self, key):
- try:
- if not isinstance(key, slice):
- int(key)
- except ValueError:
- raise TypeError
- self._populate_cache()
- return self._cached_resultset[key]
-
- def __iter__(self):
- self._populate_cache()
- yield from self._cached_resultset
-
- def __nonzero__(self):
- return any(self)
-
-
-class LazyCardDef:
- def __init__(self, slug):
- if ':' in slug:
- self.service_key, self.card_id = slug.split(':')[:2]
- else:
- self.card_id = slug
- self.service_key = get_default_wcs_service_key()
-
- @property
- def objects(self):
- return LazyCardDefObjectsManager(self.service_key, self.card_id)
-
-
-class Cards:
- def __getattr__(self, attr):
- try:
- return LazyCardDef(attr)
- except KeyError:
- raise AttributeError(attr)
-
-
-def cards(request):
- return {'cards': Cards()}
diff --git a/combo/apps/wcs/templatetags/wcs.py b/combo/apps/wcs/templatetags/wcs.py
index 702436d7..d06ecba0 100644
--- a/combo/apps/wcs/templatetags/wcs.py
+++ b/combo/apps/wcs/templatetags/wcs.py
@@ -29,66 +29,6 @@ from combo.utils.misc import is_url_from_known_service
register = template.Library()
-@register.filter
-def objects(cards, slug):
- return getattr(cards, slug).objects
-
-
-@register.filter
-def with_custom_view(queryset, custom_view_id):
- return queryset.with_custom_view(custom_view_id)
-
-
-@register.filter
-def get_full(queryset):
- return queryset.get_full()
-
-
-@register.filter
-def access_control(queryset, user):
- return queryset.access_control(user)
-
-
-@register.filter
-def count(queryset):
- return queryset.count
-
-
-@register.filter
-def filter_by(queryset, attribute):
- return queryset.filter_by(attribute)
-
-
-@register.filter
-def filter_value(queryset, value):
- return queryset.apply_filter_value(value)
-
-
-@register.filter
-def filter_by_internal_id(queryset, internal_id):
- return queryset.filter_by_internal_id(internal_id)
-
-
-@register.filter
-def filter_by_number(queryset, number):
- return queryset.filter_by_number(number)
-
-
-@register.filter
-def filter_by_user(queryset, user):
- return queryset.filter_by_user(user)
-
-
-@register.filter
-def filter_by_status(queryset, status):
- return queryset.filter_by_status(status)
-
-
-@register.filter
-def order_by(queryset, attribute):
- return queryset.order_by(attribute)
-
-
@register.filter
def format_text(field, value):
if field.get('pre'):
diff --git a/combo/public/templatetags/combo.py b/combo/public/templatetags/combo.py
index 4bf3167b..95708625 100644
--- a/combo/public/templatetags/combo.py
+++ b/combo/public/templatetags/combo.py
@@ -345,18 +345,6 @@ def get(obj, key):
return None
-@register.filter
-def getlist(mapping, key):
- if mapping is None:
- return []
- mapping = list(mapping)
- for value in mapping:
- try:
- yield value.get(key)
- except AttributeError:
- yield None
-
-
@register.filter
def split(string, separator=' '):
return (force_text(string) or '').split(separator)
@@ -411,11 +399,6 @@ def is_empty_placeholder(page, placeholder_name):
return len([x for x in page.get_cells() if x.placeholder == placeholder_name]) == 0
-@register.filter(name='list')
-def as_list(obj):
- return list(obj)
-
-
@register.filter(name='as_json')
def as_json(obj):
return json.dumps(obj)
diff --git a/combo/settings.py b/combo/settings.py
index d7b22a9f..8ab1d055 100644
--- a/combo/settings.py
+++ b/combo/settings.py
@@ -115,12 +115,14 @@ TEMPLATES = [
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'combo.context_processors.template_vars',
- 'combo.apps.wcs.context_processors.cards',
+ 'publik_django_templatetags.wcs.context_processors.cards',
],
'builtins': [
'combo.public.templatetags.combo',
+ 'publik_django_templatetags.publik.templatetags.publik',
'django.contrib.humanize.templatetags.humanize',
'combo.apps.wcs.templatetags.wcs',
+ 'publik_django_templatetags.wcs.templatetags.wcs',
],
},
},
diff --git a/debian/control b/debian/control
index 54bb5dbd..c4c0bae2 100644
--- a/debian/control
+++ b/debian/control
@@ -27,7 +27,8 @@ Depends: ${misc:Depends}, ${python3:Depends},
python3-pycryptodome,
python3-pywebpush,
python3-pygal,
- python3-lxml
+ python3-lxml,
+ python3-publik-django-templatetags
Recommends: python3-django-mellon
Conflicts: python-lingo
Breaks: combo (<< 2.34.post2)
diff --git a/tests/test_family.py b/tests/test_family.py
index 7c22fcbc..1f1522cb 100644
--- a/tests/test_family.py
+++ b/tests/test_family.py
@@ -3,9 +3,9 @@ from unittest import mock
import pytest
from django.test.client import RequestFactory
+from publik_django_templatetags.wcs.context_processors import Cards
from combo.apps.family.models import WeeklyAgendaCell
-from combo.apps.wcs.context_processors import Cards
from combo.data.models import Page
from .test_manager import login
@@ -92,7 +92,7 @@ def test_weeklyagenda_cell_user_external_id(context):
context['synchronous'] = True # to get fresh content
data = {'data': []}
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -101,7 +101,7 @@ def test_weeklyagenda_cell_user_external_id(context):
)
context['request'].user = MockUserWithNameId()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -111,7 +111,7 @@ def test_weeklyagenda_cell_user_external_id(context):
cell.user_external_template = 'some-key:{{ user_nameid }}' # check that templating is ok
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -128,7 +128,7 @@ def test_weeklyagenda_cell_agenda_references_template(context):
context['synchronous'] = True # to get fresh content
data = {'data': []}
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -138,7 +138,7 @@ def test_weeklyagenda_cell_agenda_references_template(context):
cell.agenda_references_template = 'some-agenda,other-agenda'
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -152,7 +152,7 @@ def test_weeklyagenda_cell_agenda_references_template(context):
',some-agenda,other-agenda,{{ user_nameid }}' # check that templating is ok
)
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[1][0][0] == (
@@ -171,7 +171,7 @@ def test_weeklyagenda_cell_agenda_subscribed(context):
context['synchronous'] = True # to get fresh content
data = {'data': []}
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -194,7 +194,7 @@ def test_weeklyagenda_cell_agenda_agenda_categories(context):
context['synchronous'] = True # to get fresh content
data = {'data': []}
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -205,7 +205,7 @@ def test_weeklyagenda_cell_agenda_agenda_categories(context):
context['request'].user = MockUserWithNameId()
cell.agenda_categories = 'foo,bar,foobar,{{ user_nameid }}' # check that templating is ok
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -225,7 +225,7 @@ def test_weeklyagenda_cell_filter_dates(context, agenda_type, agenda_param):
context['synchronous'] = True # to get fresh content
data = {'data': []}
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -236,7 +236,7 @@ def test_weeklyagenda_cell_filter_dates(context, agenda_type, agenda_param):
cell.start_date_filter = '2021-09-01'
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -247,7 +247,7 @@ def test_weeklyagenda_cell_filter_dates(context, agenda_type, agenda_param):
cell.end_date_filter = '2022-08-31'
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -260,7 +260,7 @@ def test_weeklyagenda_cell_filter_dates(context, agenda_type, agenda_param):
cell.start_date_filter = ''
cell.end_date_filter = '{{ user_nameid }}' # check that templating is ok
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
cell.render(context)
assert requests_get.call_args_list[0][0][0] == (
@@ -282,14 +282,14 @@ def test_weeklyagenda_cell_booking_form_url(context):
context['synchronous'] = True # to get fresh content
context['request'].user = MockUserWithNameId()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
result = cell.render(context)
assert 'booking-btn' not in result
cell.booking_form_url = 'http://example.com/foobar/'
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
result = cell.render(context)
assert 'booking-btn' in result
@@ -297,7 +297,7 @@ def test_weeklyagenda_cell_booking_form_url(context):
cell.booking_form_url = 'http://example.com/foobar/?user={{ user_nameid }}'
cell.save()
- with mock.patch('combo.utils.requests.get') as requests_get:
+ with mock.patch('requests.Session.get') as requests_get:
requests_get.return_value = MockedRequestResponse(content=json.dumps(data))
result = cell.render(context)
assert 'booking-btn' in result
diff --git a/tests/test_wcs.py b/tests/test_wcs.py
index 7c70f220..f221d75d 100644
--- a/tests/test_wcs.py
+++ b/tests/test_wcs.py
@@ -462,7 +462,7 @@ def context():
return ctx
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_form_cell_setup(mock_send):
cell = WcsFormCell()
form_class = cell.get_default_form_class()
@@ -480,7 +480,7 @@ def test_form_cell_setup(mock_send):
assert 'extra_css_class' not in form.fields
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_form_cell_save_cache(mock_send):
page = Page(title='xxx', slug='test_form_cell_save_cache', template_name='standard')
page.save()
@@ -508,7 +508,7 @@ def test_form_cell_save_cache(mock_send):
assert WcsFormCell.objects.get(id=cell.id).cached_title == 'form title'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_form_cell_validity(mock_send):
page = Page.objects.create(title='xxx', slug='test_form_cell_save_cache', template_name='standard')
cell = WcsFormCell.objects.create(page=page, placeholder='content', order=0)
@@ -547,7 +547,7 @@ def test_form_cell_validity(mock_send):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_form_cell_load(mock_send):
page = Page(title='xxx', slug='test_form_cell_save_cache', template_name='standard')
page.save()
@@ -565,7 +565,7 @@ def test_form_cell_load(mock_send):
assert cell.cached_title == 'form title'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_category_cell_save_cache(mock_send):
page = Page(title='xxx', slug='test_category_cell_save_cache', template_name='standard')
page.save()
@@ -577,7 +577,7 @@ def test_category_cell_save_cache(mock_send):
assert cell.get_additional_label() == 'Test 3'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_category_cell_validity(mock_send):
page = Page.objects.create(title='xxx', slug='test_category_cell_save_cache', template_name='standard')
cell = WcsCategoryCell.objects.create(page=page, placeholder='content', order=0)
@@ -616,7 +616,7 @@ def test_category_cell_validity(mock_send):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_categories_cell_check_validity(mock_send):
page = Page.objects.create(title='xxx', slug='test', template_name='standard')
cell = CategoriesCell.objects.create(page=page, placeholder='content', order=0)
@@ -636,7 +636,7 @@ def test_categories_cell_check_validity(mock_send):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_form_cell_render(mock_send):
page = Page(title='xxx', slug='test_form_cell_render', template_name='standard')
page.save()
@@ -648,7 +648,7 @@ def test_form_cell_render(mock_send):
assert 'form title' in result
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_forms_cell_setup(mock_send):
cell = WcsCurrentFormsCell()
form_class = cell.get_default_form_class()
@@ -673,7 +673,7 @@ def test_current_forms_cell_setup(mock_send):
assert cell.get_additional_label() == 'All Sites - Done Forms'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_forms_cell_render(mock_send, context):
page = Page(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
page.save()
@@ -843,7 +843,7 @@ def test_current_forms_cell_render(mock_send, context):
assert '
Foo bar
' in result
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_forms_cell_validity(mock_send, context):
page = Page.objects.create(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
cell = WcsCurrentFormsCell.objects.create(page=page, placeholder='content', order=0)
@@ -873,7 +873,7 @@ def test_current_forms_cell_validity(mock_send, context):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_forms_cell_check_validity(mock_send, context):
page = Page.objects.create(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
cell = WcsCurrentFormsCell.objects.create(page=page, placeholder='content', order=0)
@@ -932,7 +932,7 @@ def test_current_forms_cell_check_validity(mock_send, context):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_forms_cell_render_single_site(mock_send, context):
page = Page(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
page.save()
@@ -994,7 +994,7 @@ def test_care_forms_cell_setup():
assert cell.get_additional_label() == 'test'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_care_forms_cell_render(mock_send, context):
page = Page(title='xxx', slug='test_care_forms_cell_render', template_name='standard')
page.save()
@@ -1125,7 +1125,7 @@ def test_care_forms_cell_validity(context):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_care_forms_cell_check_validity(mock_send, context):
page = Page.objects.create(title='xxx', slug='test_care_forms_cell_render', template_name='standard')
cell = WcsCareFormsCell.objects.create(page=page, placeholder='content', order=0)
@@ -1184,7 +1184,7 @@ def test_care_forms_cell_check_validity(mock_send, context):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_care_forms_cell_render_single_site(mock_send, context):
page = Page(title='xxx', slug='test_care_forms_cell_render', template_name='standard')
page.save()
@@ -1212,7 +1212,7 @@ def test_care_forms_cell_render_single_site(mock_send, context):
assert 'other' not in data
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_forms_of_category_cell_setup(mock_send):
cell = WcsFormsOfCategoryCell()
form_class = cell.get_default_form_class()
@@ -1225,7 +1225,7 @@ def test_forms_of_category_cell_setup(mock_send):
]
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_forms_of_category_cell_render(mock_send, context):
page = Page(title='xxx', slug='test_forms_of_category_cell_render', template_name='standard')
page.save()
@@ -1288,7 +1288,7 @@ def test_forms_of_category_cell_render(mock_send, context):
context.pop('combo_display_even_empty_categories')
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_forms_of_category_cancelurl(mock_send, app):
page = Page(title='xxx', slug='test_forms_of_category_cell_render', template_name='standard')
page.save()
@@ -1306,7 +1306,7 @@ def test_forms_of_category_cancelurl(mock_send, app):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_forms_of_category_cell_validity(mock_send, context):
page = Page.objects.create(
title='xxx', slug='test_forms_of_category_cell_render', template_name='standard'
@@ -1354,7 +1354,7 @@ def test_forms_of_category_cell_validity(mock_send, context):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_forms_of_category_cell_check_validity(mock_send, context):
page = Page.objects.create(
title='xxx', slug='test_forms_of_category_cell_render', template_name='standard'
@@ -1390,7 +1390,7 @@ def test_current_drafts_cell_render_unlogged(context):
assert 'http://127.0.0.1:8999/third-form-title' not in result # no form
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_drafts_cell_render_logged_in(mock_send, context):
page = Page(title='xxx', slug='test_current_drafts_cell_render', template_name='standard')
page.save()
@@ -1468,7 +1468,7 @@ def test_current_drafts_cell_render_logged_in(mock_send, context):
assert requests_get.call_args_list[0][0][0] == '/api/user/drafts'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_current_drafts_cell_check_validity(mock_send, context):
page = Page.objects.create(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
cell = WcsCurrentDraftsCell.objects.create(page=page, placeholder='content', order=0)
@@ -1527,7 +1527,7 @@ def test_current_drafts_cell_check_validity(mock_send, context):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_forms_of_category_cell(mock_send, app, admin_user):
page = Page(title='One', slug='one', template_name='standard')
page.save()
@@ -1554,7 +1554,7 @@ def test_manager_forms_of_category_cell(mock_send, app, admin_user):
assert cells[0].manual_order == {'data': ['default::a-second-form-title', 'default::third-form-title']}
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_current_forms(mock_send, settings, app, admin_user):
page = Page(title='One', slug='one', template_name='standard')
page.save()
@@ -1594,7 +1594,7 @@ def test_manager_current_forms(mock_send, settings, app, admin_user):
assert resp.form['c%s-wcs_site' % cells[0].get_reference()].attrs['type'] == 'hidden'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_forms_in_your_care_cell(mock_send, app, admin_user):
page = Page(title='One', slug='one', template_name='standard')
page.save()
@@ -1618,7 +1618,7 @@ def test_manager_forms_in_your_care_cell(mock_send, app, admin_user):
assert cells[0].cache_duration == 10
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_cards_cell(mock_send, app, admin_user):
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard')
cell = WcsCardsCell.objects.create(page=page, placeholder='content', order=0)
@@ -1635,7 +1635,7 @@ def test_manager_cards_cell(mock_send, app, admin_user):
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_setup(mock_send):
cell = WcsCardsCell()
form_class = cell.get_default_form_class()
@@ -1662,7 +1662,7 @@ def test_cards_cell_setup(mock_send):
]
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_save_cache(mock_send):
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard')
cell = WcsCardsCell(page=page, placeholder='content', order=0)
@@ -1691,7 +1691,7 @@ def test_cards_cell_save_cache(mock_send):
assert WcsCardsCell.objects.get(pk=cell.pk).cached_title == 'Card Model 1 - bar'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_validity(mock_send):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardsCell.objects.create(page=page, placeholder='content', order=0)
@@ -1740,7 +1740,7 @@ def test_cards_cell_validity(mock_send):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_load(mock_send):
page = Page.objects.create(title='xxx', slug='test_cards', template_name='standard')
cell = WcsCardsCell(page=page, placeholder='content', order=0)
@@ -1769,7 +1769,7 @@ def test_cards_cell_load(mock_send):
assert cell.cached_title == 'Card Model 1 - bar'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_render(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardsCell(page=page, placeholder='content', order=0)
@@ -1838,7 +1838,7 @@ def test_cards_cell_render(mock_send, context):
assert 'Foo bar
' in result
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_only_for_user(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardsCell(page=page, placeholder='content', order=0)
@@ -1872,7 +1872,7 @@ def test_cards_cell_only_for_user(mock_send, context):
assert 'filter-user-uuid=xyz' in mock_send.call_args_list[0][0][0].url
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cards_cell_render_user(mock_send, context, nocache):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardsCell(page=page, placeholder='content', order=0)
@@ -1931,7 +1931,7 @@ def test_cards_cell_render_user(mock_send, context, nocache):
assert 'email' not in mock_send.call_args_list[0][0][0].url
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_setup(mock_send, app, admin_user):
page = Page.objects.create(
title='xxx', slug='test_card_cell_save_cache', template_name='standard', sub_slug='foobar'
@@ -2140,7 +2140,7 @@ def test_card_cell_custom_schema_migration():
}
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_save_cache(mock_send):
page = Page.objects.create(title='xxx', slug='test_card_cell_save_cache', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2164,7 +2164,7 @@ def test_card_cell_save_cache(mock_send):
assert WcsCardInfosCell.objects.get(pk=cell.pk).cached_json != {}
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_validity(mock_send):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0)
@@ -2208,7 +2208,7 @@ def test_card_cell_validity(mock_send):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_check_validity(mock_send):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -2249,7 +2249,7 @@ def test_card_cell_check_validity(mock_send):
assert validity_info.invalid_since is not None
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_card_cell(mock_send, app, admin_user):
page = Page.objects.create(title='xxx', slug='test_cards', template_name='standard', sub_slug='foobar')
cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0)
@@ -2456,7 +2456,7 @@ def test_manager_card_cell(mock_send, app, admin_user):
]
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_load(mock_send):
page = Page.objects.create(title='xxx', slug='test_cards', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2473,7 +2473,7 @@ def test_card_cell_load(mock_send):
assert cell.cached_title == 'Card Model 1'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render(mock_send, context, app):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2606,7 +2606,7 @@ def test_card_cell_render(mock_send, context, app):
assert not result.strip()
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_text_field(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2638,7 +2638,7 @@ def test_card_cell_render_text_field(mock_send, context):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_email_field(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2660,7 +2660,7 @@ def test_card_cell_render_email_field(mock_send, context):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_string_with_url_field(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -2684,7 +2684,7 @@ def test_card_cell_render_string_with_url_field(mock_send, context):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_custom_schema_card_field(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -2834,7 +2834,7 @@ def test_card_cell_render_custom_schema_card_field(mock_send, context):
assert PyQuery(result).find('.value a').attr['href'] == 'https://www.example.net/'
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_custom_schema_card_empty_field(mock_send, context):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -2929,7 +2929,7 @@ def test_card_cell_render_custom_schema_card_empty_field(mock_send, context):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_custom_schema_custom_entry(mock_send, context, app):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -3046,7 +3046,7 @@ def test_card_cell_render_custom_schema_custom_entry(mock_send, context, app):
assert PyQuery(result).find('div.cell--body') == []
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_custom_schema_link_entry(mock_send, context, app):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -3104,7 +3104,7 @@ def test_card_cell_render_custom_schema_link_entry(mock_send, context, app):
)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_identifier(mock_send, nocache, app):
page = Page.objects.create(
title='xxx', slug='foo', template_name='standard', sub_slug='(?P[a-z0-9]+)'
@@ -3240,7 +3240,7 @@ def test_card_cell_render_identifier(mock_send, nocache, app):
assert cell_resp.text.replace('\n', '') == '' # empty-cell
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_identifier_from_related(mock_send, nocache, app):
page = Page.objects.create(title='xxx', slug='foo', template_name='standard')
cell = WcsCardInfosCell.objects.create(
@@ -3681,7 +3681,7 @@ def test_card_cell_render_identifier_from_related(mock_send, nocache, app):
@pytest.mark.parametrize('carddef_reference', ['default:card_model_1', 'default:card_model_1:foo'])
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_cell_render_user(mock_send, context, nocache, carddef_reference):
page = Page.objects.create(title='xxx', template_name='standard')
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
@@ -3862,7 +3862,7 @@ def test_tracking_code_cell(app, nocache):
resp = app.post(reverse('wcs-tracking-code'), params={'cell': cell.id}, status=400)
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_tracking_code_cell_check_validity(mock_send):
page = Page.objects.create(title='xxx', slug='test', template_name='standard')
cell = TrackingCodeInputCell.objects.create(page=page, placeholder='content', order=0)
@@ -3882,7 +3882,7 @@ def test_tracking_code_cell_check_validity(mock_send):
assert ValidityInfo.objects.exists() is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_cell_assets(mock_send, settings, app, admin_user):
page = Page.objects.create(title='xxx', slug='test_cell_assets', template_name='standard')
cell1 = WcsFormCell.objects.create(
@@ -4082,7 +4082,7 @@ def test_backoffice_submission_cell_render(context):
assert len(requests_get.call_args_list) == 2
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_backoffice_submission_cell_check_validity(mock_send, context):
page = Page.objects.create(title='xxx', slug='test_current_forms_cell_render', template_name='standard')
cell = BackofficeSubmissionCell.objects.create(page=page, placeholder='content', order=0)
@@ -4165,7 +4165,7 @@ def test_manager_link_list_cell_duplicate():
assert new_item.cached_json == item.cached_json
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_manager_add_edit_delete_list_link_item(mock_send, app, admin_user):
page = Page.objects.create(title='One', slug='one', template_name='standard')
cell = LinkListCell.objects.create(order=0, placeholder='content', page=page)
@@ -4301,7 +4301,7 @@ def test_hourly():
assert hasattr(klass, 'check_validity') is False
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_search_external_forms_links(mock_send, context):
page = Page(title='xxx', slug='test_forms_of_category_cell_search', template_name='standard')
page.save()
@@ -4332,7 +4332,7 @@ def test_search_external_forms_links(mock_send, context):
assert len(hits) == 2
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_card_file_redirection(mock_send, app):
page = Page(title='One', slug='one', template_name='standard')
page.save()
diff --git a/tests/test_wcs_templatetags.py b/tests/test_wcs_templatetags.py
index 7b729e5f..16bf2127 100644
--- a/tests/test_wcs_templatetags.py
+++ b/tests/test_wcs_templatetags.py
@@ -1,14 +1,10 @@
-import copy
import json
from unittest import mock
import pytest
from django.template import Context, Template
from django.test.client import RequestFactory
-from requests.exceptions import ConnectionError
-from requests.models import Response
-
-from combo.apps.wcs.context_processors import Cards
+from publik_django_templatetags.wcs.context_processors import Cards
@pytest.fixture
@@ -23,29 +19,6 @@ def context():
return ctx
-class MockAnonymousUser:
- is_authenticated = False
- is_anonymous = True
-
-
-class MockUser:
- email = 'foo@example.net'
- is_authenticated = True
- is_anonymous = False
-
- def get_name_id(self):
- return None
-
-
-class MockUserWithNameId:
- email = 'foo@example.net'
- is_authenticated = True
- is_anonymous = False
-
- def get_name_id(self):
- return 'xyz'
-
-
class MockedRequestResponse(mock.Mock):
status_code = 200
@@ -58,352 +31,13 @@ def mocked_requests_send(request, **kwargs):
return MockedRequestResponse(content=json.dumps({'data': data}))
-def test_context(context):
- assert 'cards' in context
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_objects(mock_send, settings, context, nocache):
- # lazy filters
- t = Template('{{ cards|objects:"foo" }}')
- assert t.render(context).startswith(
- '<combo.apps.wcs.context_processors.LazyCardDefObjectsManager object at'
- )
- assert mock_send.call_args_list == [] # lazy
- t = Template('{{ cards|objects:"default:foo" }}')
- assert t.render(context).startswith(
- '<combo.apps.wcs.context_processors.LazyCardDefObjectsManager object at'
- )
- assert mock_send.call_args_list == [] # lazy
-
- # test filters evaluation
- t = Template('{% for card in cards|objects:"foo" %}{{ card.id }} {% endfor %}')
- assert t.render(context) == "1 2 "
- assert mock_send.call_args_list[0][0][0].url.startswith(
- 'http://127.0.0.1:8999/api/cards/foo/list?'
- ) # primary service
- t = Template('{{ cards|objects:"default:foo"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.1:8999/api/cards/foo/list?')
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"other:foo"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.2:8999/api/cards/foo/list?')
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"unknown:foo"|list }}')
- t.render(context)
- assert mock_send.call_args_list == [] # unknown, not evaluated
-
- # test card_id with variable
- context['foobar'] = 'some-slug'
- mock_send.reset_mock()
- t = Template('{{ cards|objects:foobar|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.1:8999/api/cards/some-slug/list?')
-
- # test with no secondary param
- KNOWN_SERVICES = copy.deepcopy(settings.KNOWN_SERVICES)
- KNOWN_SERVICES['wcs'] = {'default': {'url': 'http://127.0.0.3:8999/'}}
- settings.KNOWN_SERVICES = KNOWN_SERVICES
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"bar"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith('http://127.0.0.3:8999/api/cards/bar/list?')
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_with_custom_view(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|with_custom_view:"foobar"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith(
- 'http://127.0.0.1:8999/api/cards/foo/list/foobar?'
- ) # primary service
- t = Template('{{ cards|objects:"default:foo"|with_custom_view:"foobar"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith(
- 'http://127.0.0.1:8999/api/cards/foo/list/foobar?'
- )
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"other:foo"|with_custom_view:"foobar"|list }}')
- t.render(context)
- assert mock_send.call_args_list[0][0][0].url.startswith(
- 'http://127.0.0.2:8999/api/cards/foo/list/foobar?'
- )
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"unknown:foo"|with_custom_view:"foobar"|list }}')
- t.render(context)
- assert mock_send.call_args_list == [] # unknown, not evaluated
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_full(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'full=on&' not in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|get_full|list }}')
- t.render(context)
- assert 'full=on&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
-def test_errors(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|list }}')
-
- with mock.patch('combo.apps.wcs.utils.requests.get') as requests_get:
- mock_resp = Response()
- mock_resp.status_code = 500
- requests_get.return_value = mock_resp
- assert t.render(context) == "[]"
-
- with mock.patch('combo.apps.wcs.utils.requests.get') as requests_get:
- requests_get.side_effect = ConnectionError()
- requests_get.return_value = mock_resp
- assert t.render(context) == "[]"
-
- with mock.patch('combo.apps.wcs.utils.requests.get') as requests_get:
- mock_resp = Response()
- mock_resp.status_code = 404
- requests_get.return_value = mock_resp
- assert t.render(context) == "[]"
-
- mock_send.side_effect = lambda *a, **k: MockedRequestResponse(content=json.dumps({'err': 1}))
- assert t.render(context) == "[]"
-
- mock_send.side_effect = lambda *a, **k: MockedRequestResponse(content=json.dumps({}))
- assert t.render(context) == "[]"
-
- mock_send.side_effect = lambda *a, **k: MockedRequestResponse(content=json.dumps({'data': None}))
- assert t.render(context) == "[]"
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_access_control(mock_send, context, nocache):
- # no user in context
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'NameID' not in mock_send.call_args_list[0][0][0].url
- assert 'email' not in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|access_control:request.user|list }}')
- t.render(context)
- assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
- assert 'email=&' in mock_send.call_args_list[0][0][0].url
-
- # current user in anonymous
- context['request'].user = MockAnonymousUser()
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'NameID' not in mock_send.call_args_list[0][0][0].url
- assert 'email' not in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|access_control:request.user|list }}')
- t.render(context)
- assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
- assert 'email=&' in mock_send.call_args_list[0][0][0].url
-
- # current user with uuid
- context['request'].user = MockUserWithNameId()
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'NameID' not in mock_send.call_args_list[0][0][0].url
- assert 'email' not in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|access_control:request.user|list }}')
- t.render(context)
- assert 'NameID=xyz&' in mock_send.call_args_list[0][0][0].url
- assert 'email' not in mock_send.call_args_list[0][0][0].url
-
- # current user without uuid
- context['request'].user = MockUser()
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'NameID' not in mock_send.call_args_list[0][0][0].url
- assert 'email' not in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|access_control:request.user|list }}')
- t.render(context)
- assert 'NameID' not in mock_send.call_args_list[0][0][0].url
- assert 'email=foo%40example.net&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_count(mock_send, context, nocache):
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
+def test_publik_django_templatetags_integration(mock_send, context, nocache):
t = Template('{{ cards|objects:"foo"|count }}')
assert t.render(context) == "2"
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_filter(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|filter_by:"foo"|filter_value:"bar"|list }}')
- t.render(context)
- assert 'filter-foo=bar&' in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template(
- '{{ cards|objects:"foo"|filter_by:"foo"|filter_value:"bar"|filter_by:"foo2"|filter_value:"bar2"|list }}'
- )
- t.render(context)
- assert 'filter-foo=bar&' in mock_send.call_args_list[0][0][0].url
- assert 'filter-foo2=bar2&' in mock_send.call_args_list[0][0][0].url
-
- # check boolean
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by:"foo"|filter_value:True|list }}')
- t.render(context)
- assert 'filter-foo=true&' in mock_send.call_args_list[0][0][0].url
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by:"foo"|filter_value:False|list }}')
- t.render(context)
- assert 'filter-foo=false&' in mock_send.call_args_list[0][0][0].url
-
- # check None
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by:"foo"|filter_value:None|list }}')
- t.render(context)
- assert 'filter-foo=&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_filter_by_internal_id(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'filter-internal-id' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_internal_id:None|list }}')
- t.render(context)
- assert 'filter-internal-id' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_internal_id:""|list }}')
- t.render(context)
- assert 'filter-internal-id' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_internal_id:"42"|list }}')
- t.render(context)
- assert 'filter-internal-id=42&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_filter_by_number(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'filter-number' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_number:None|list }}')
- t.render(context)
- assert 'filter-number' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_number:""|list }}')
- t.render(context)
- assert 'filter-number' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_number:"42-35"|list }}')
- t.render(context)
- assert 'filter-number=42-35&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_filter_by_user(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|filter_by_user:request.user|list }}')
- t.render(context)
- assert 'filter-user-uuid' not in mock_send.call_args_list[0][0][0].url
-
- context['request'].user = MockAnonymousUser()
- mock_send.reset_mock()
- t.render(context)
- assert 'filter-user-uuid' not in mock_send.call_args_list[0][0][0].url
-
- context['request'].user = MockUser()
- mock_send.reset_mock()
- t.render(context)
- assert 'filter-user-uuid' not in mock_send.call_args_list[0][0][0].url
-
- context['request'].user = MockUserWithNameId()
- mock_send.reset_mock()
- t.render(context)
- assert 'filter-user-uuid=xyz&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_filter_by_status(mock_send, context, nocache):
- t = Template('{{ cards|objects:"foo"|list }}')
- t.render(context)
- assert 'filter=&' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_status:None|list }}')
- t.render(context)
- assert 'filter=&' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_status:""|list }}')
- t.render(context)
- assert 'filter=&' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{{ cards|objects:"foo"|filter_by_status:"foobar"|list }}')
- t.render(context)
- assert 'filter=foobar&' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_getlist(mock_send, context, nocache):
- t = Template('{% for v in cards|objects:"foo"|getlist:"id" %}{{ v }},{% endfor %}')
- t.render(context)
- assert t.render(context) == "1,2,"
- t = Template('{% for v in cards|objects:"foo"|getlist:"fields" %}{{ v }},{% endfor %}')
- t.render(context)
- assert t.render(context) == "{'foo': 'bar'},{'foo': 'baz'},"
- t = Template('{% for v in cards|objects:"foo"|getlist:"fields"|getlist:"foo" %}{{ v }},{% endfor %}')
- t.render(context)
- assert t.render(context) == "bar,baz,"
- t = Template('{% for v in cards|objects:"foo"|getlist:"fields"|getlist:"unknown" %}{{ v }},{% endfor %}')
- t.render(context)
- assert t.render(context) == "None,None,"
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
-def test_order_by(mock_send, context, nocache):
- t = Template('{% for v in cards|objects:"foo" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{% for v in cards|objects:"foo"|order_by:"bar" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by=bar' in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{% for v in cards|objects:"foo"|order_by:"-bar" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by=-bar' in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{% for v in cards|objects:"foo"|order_by:"" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{% for v in cards|objects:"foo"|order_by:"bar"|order_by:"" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by' not in mock_send.call_args_list[0][0][0].url
-
- mock_send.reset_mock()
- t = Template('{% for v in cards|objects:"foo"|order_by:""|order_by:"bar" %}{{ v }},{% endfor %}')
- t.render(context)
- assert 'order_by=bar' in mock_send.call_args_list[0][0][0].url
-
-
-@mock.patch('combo.apps.wcs.models.requests.send', side_effect=mocked_requests_send)
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_with_explicit_load_wcs(mock_send, context, nocache):
t = Template('{% load wcs %}{{ cards|objects:"foo"|count }}')
assert t.render(context) == "2"
diff --git a/tox.ini b/tox.ini
index f501bb3f..93719398 100644
--- a/tox.ini
+++ b/tox.ini
@@ -32,6 +32,7 @@ deps =
vobject
django-ratelimit<3
git+https://git.entrouvert.org/debian/django-ckeditor.git
+ git+https://git.entrouvert.org/publik-django-templatetags.git
pre-commit
uwsgidecorators
commands =
@@ -61,6 +62,7 @@ deps =
pyquery
psycopg2-binary<2.9
git+https://git.entrouvert.org/debian/django-ckeditor.git
+ git+https://git.entrouvert.org/publik-django-templatetags.git
uwsgidecorators
commands =
./getlasso3.sh