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