wcs: mark cell as invalid if wcs_site is unknown (#56200)
This commit is contained in:
parent
be732f5c9c
commit
d77af71764
|
@ -43,6 +43,7 @@ invalid_reason_codes = {
|
|||
'wcs_card_not_found': _('Invalid card model'),
|
||||
'wcs_category_not_defined': _('No category set'),
|
||||
'wcs_category_not_found': _('Invalid category'),
|
||||
'wcs_site_not_found': _('Invalid site'),
|
||||
'wcs_data_failure': _('Failed to get data'),
|
||||
}
|
||||
|
||||
|
@ -131,7 +132,7 @@ class WcsFormCell(CellBase):
|
|||
context['description'] = mark_safe(self.cached_json.get('description', ''))
|
||||
context['css_classes'] = get_formdef_css_classes(self.cached_json)
|
||||
for attribute in self.cached_json:
|
||||
if not attribute in context:
|
||||
if attribute not in context:
|
||||
context[attribute] = self.cached_json.get(attribute)
|
||||
return context
|
||||
|
||||
|
@ -408,8 +409,12 @@ class WcsUserDataBaseCell(WcsDataBaseCell):
|
|||
return super().is_visible(**kwargs)
|
||||
|
||||
|
||||
class CategoriesValidityMixin:
|
||||
class CategoriesAndWcsSiteValidityMixin:
|
||||
def check_validity(self):
|
||||
if self.wcs_site and self.wcs_site not in get_wcs_services():
|
||||
self.mark_as_invalid('wcs_site_not_found')
|
||||
return
|
||||
|
||||
categories = self.categories.get('data', [])
|
||||
|
||||
if not categories:
|
||||
|
@ -452,7 +457,7 @@ class CategoriesFilteringMixin:
|
|||
|
||||
|
||||
@register_cell_class
|
||||
class WcsCurrentFormsCell(CategoriesValidityMixin, CategoriesFilteringMixin, WcsUserDataBaseCell):
|
||||
class WcsCurrentFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilteringMixin, WcsUserDataBaseCell):
|
||||
variable_name = 'user_forms'
|
||||
loading_message = _('Loading forms...')
|
||||
|
||||
|
@ -537,7 +542,7 @@ class WcsCurrentFormsCell(CategoriesValidityMixin, CategoriesFilteringMixin, Wcs
|
|||
|
||||
|
||||
@register_cell_class
|
||||
class WcsCurrentDraftsCell(CategoriesValidityMixin, CategoriesFilteringMixin, WcsUserDataBaseCell):
|
||||
class WcsCurrentDraftsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilteringMixin, WcsUserDataBaseCell):
|
||||
variable_name = 'current_drafts'
|
||||
default_template_name = 'combo/wcs/current_drafts.html'
|
||||
loading_message = _('Loading drafts...')
|
||||
|
@ -652,7 +657,7 @@ class WcsFormsOfCategoryCell(WcsCommonCategoryCell, WcsBlurpMixin):
|
|||
extra_context['description'] = self.cached_description
|
||||
try:
|
||||
extra_context['forms'] = list(extra_context['forms'][self.wcs_site]['data'])
|
||||
except (KeyError, TypeError) as e:
|
||||
except (KeyError, TypeError):
|
||||
# an error occured when getting the data
|
||||
extra_context['forms'] = []
|
||||
|
||||
|
@ -700,7 +705,7 @@ class WcsFormsOfCategoryCell(WcsCommonCategoryCell, WcsBlurpMixin):
|
|||
|
||||
|
||||
@register_cell_class
|
||||
class WcsCareFormsCell(CategoriesValidityMixin, CategoriesFilteringMixin, WcsDataBaseCell):
|
||||
class WcsCareFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilteringMixin, WcsDataBaseCell):
|
||||
categories = JSONField(_('Categories'), blank=True, default=dict)
|
||||
|
||||
api_url = '/api/forms/?limit=10'
|
||||
|
@ -743,6 +748,13 @@ class CategoriesCell(WcsDataBaseCell):
|
|||
class Meta:
|
||||
verbose_name = _('Form Categories')
|
||||
|
||||
def check_validity(self):
|
||||
if self.wcs_site and self.wcs_site not in get_wcs_services():
|
||||
self.mark_as_invalid('wcs_site_not_found')
|
||||
return
|
||||
|
||||
self.mark_as_valid()
|
||||
|
||||
|
||||
class CardMixin:
|
||||
invalid_reason_codes = invalid_reason_codes
|
||||
|
@ -1007,6 +1019,13 @@ class TrackingCodeInputCell(CellBase):
|
|||
class Meta:
|
||||
verbose_name = _('Tracking Code Input')
|
||||
|
||||
def check_validity(self):
|
||||
if self.wcs_site and self.wcs_site not in get_wcs_services():
|
||||
self.mark_as_invalid('wcs_site_not_found')
|
||||
return
|
||||
|
||||
self.mark_as_valid()
|
||||
|
||||
def get_default_form_class(self):
|
||||
if len(get_wcs_services()) == 1:
|
||||
return None
|
||||
|
@ -1026,7 +1045,7 @@ class TrackingCodeInputCell(CellBase):
|
|||
|
||||
|
||||
@register_cell_class
|
||||
class BackofficeSubmissionCell(CategoriesValidityMixin, CategoriesFilteringMixin, WcsDataBaseCell):
|
||||
class BackofficeSubmissionCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilteringMixin, WcsDataBaseCell):
|
||||
api_url = '/api/formdefs/?backoffice-submission=on'
|
||||
variable_name = 'all_formdefs'
|
||||
default_template_name = 'combo/wcs/backoffice_submission.html'
|
||||
|
|
|
@ -23,6 +23,7 @@ from combo.apps.search.utils import index_site, search_site
|
|||
from combo.apps.wcs.context_processors import Cards
|
||||
from combo.apps.wcs.models import (
|
||||
BackofficeSubmissionCell,
|
||||
CategoriesCell,
|
||||
TrackingCodeInputCell,
|
||||
WcsCardInfosCell,
|
||||
WcsCardsCell,
|
||||
|
@ -431,6 +432,26 @@ 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)
|
||||
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)
|
||||
|
||||
# invalid wcs_site
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.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')
|
||||
|
@ -698,6 +719,21 @@ def test_current_forms_cell_check_validity(mock_send, context):
|
|||
assert validity_info.invalid_reason_code == 'wcs_category_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# invalid wcs_site
|
||||
cell.categories = {'data': ['default:test-3', 'default:test-9']}
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_current_forms_cell_render_single_site(mock_send, context):
|
||||
|
@ -929,6 +965,21 @@ def test_care_forms_cell_check_validity(mock_send, context):
|
|||
assert validity_info.invalid_reason_code == 'wcs_category_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# invalid wcs_site
|
||||
cell.categories = {'data': ['default:test-3', 'default:test-9']}
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_care_forms_cell_render_single_site(mock_send, context):
|
||||
|
@ -1229,6 +1280,21 @@ def test_current_drafts_cell_check_validity(mock_send, context):
|
|||
assert validity_info.invalid_reason_code == 'wcs_category_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# invalid wcs_site
|
||||
cell.categories = {'data': ['default:test-3', 'default:test-9']}
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_manager_forms_of_category_cell(mock_send, app, admin_user):
|
||||
|
@ -2009,6 +2075,26 @@ 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)
|
||||
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)
|
||||
|
||||
# invalid wcs_site
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.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')
|
||||
|
@ -2252,6 +2338,21 @@ def test_backoffice_submission_cell_check_validity(mock_send, context):
|
|||
assert validity_info.invalid_reason_code == 'wcs_category_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# invalid wcs_site
|
||||
cell.categories = {'data': ['default:test-3', 'default:test-9']}
|
||||
cell.wcs_site = 'invalid'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
validity_info = ValidityInfo.objects.latest('pk')
|
||||
assert validity_info.invalid_reason_code == 'wcs_site_not_found'
|
||||
assert validity_info.invalid_since is not None
|
||||
|
||||
# valid wcs_site
|
||||
cell.wcs_site = 'default'
|
||||
cell.save()
|
||||
cell.check_validity()
|
||||
assert ValidityInfo.objects.exists() is False
|
||||
|
||||
|
||||
def test_manager_link_list_cell_duplicate():
|
||||
page = Page.objects.create(title='xxx', slug='new', template_name='standard')
|
||||
|
@ -2386,6 +2487,8 @@ def test_hourly():
|
|||
WcsCurrentDraftsCell,
|
||||
WcsFormsOfCategoryCell,
|
||||
BackofficeSubmissionCell,
|
||||
CategoriesCell,
|
||||
TrackingCodeInputCell,
|
||||
]:
|
||||
with mock.patch('combo.apps.wcs.models.%s.check_validity' % klass.__name__) as check_validity:
|
||||
appconfig.hourly()
|
||||
|
|
Loading…
Reference in New Issue