wcs: fix cell rendering with anonymous users (#63220)
gitea-wip/combo/pipeline/head There was a failure building this commit Details
gitea/combo/pipeline/head Something is wrong with the build of this commit Details

This commit is contained in:
Lauréline Guérin 2022-04-01 16:27:27 +02:00
parent 6a33066ac9
commit cf980643eb
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 43 additions and 13 deletions

View File

@ -494,7 +494,7 @@ class WcsCurrentFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFiltering
def get_api_url(self, context):
url = '/api/user/forms/'
user = self.get_concerned_user(context)
if user:
if user and not user.is_anonymous:
user_name_id = user.get_name_id()
if user_name_id:
url = '/api/users/%s/forms' % user_name_id
@ -574,7 +574,7 @@ class WcsCurrentDraftsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilterin
def get_api_url(self, context):
user = self.get_concerned_user(context)
if user:
if user and not user.is_anonymous:
user_name_id = user.get_name_id()
if user_name_id:
return '/api/users/%s/drafts' % user_name_id
@ -898,7 +898,7 @@ class WcsCardsCell(CardMixin, WcsBlurpMixin, CellBase):
if len(parts) > 2:
url = '%s/%s' % (url, parts[2])
user = self.get_concerned_user(context)
if self.only_for_user and user and user.get_name_id():
if self.only_for_user and user and not user.is_anonymous and user.get_name_id():
url = '%s?filter-user-uuid=%s' % (url, user.get_name_id())
return url
@ -1030,7 +1030,7 @@ class WcsCardInfosCell(CardMixin, CellBase):
card_id,
)
user = self.get_concerned_user(context)
if user:
if user and not user.is_anonymous:
user_name_id = user.get_name_id()
if user_name_id:
api_url += '&filter-user-uuid=%s' % user_name_id

View File

@ -961,15 +961,18 @@ def test_current_forms_name_id(context):
cell.wcs_site = 'default'
cell.save()
context['request'].user = MockUserWithNameId()
# query should fail as nothing is cached
cache.clear()
with pytest.raises(NothingInCacheException):
cell.render(context)
context['synchronous'] = True # to get fresh content
# anonymous user
context['request'].user = AnonymousUser()
with mock.patch('combo.apps.wcs.models.requests.get') as requests_get:
mock_json = mock.Mock(status_code=200)
requests_get.return_value = mock_json
cell.render(context)
assert requests_get.call_args_list[0][0][0] == '/api/user/forms/?status=open&limit=100&sort=desc'
# user with name_id
context['request'].user = MockUserWithNameId()
with mock.patch('combo.apps.wcs.models.requests.get') as requests_get:
mock_json = mock.Mock(status_code=200)
requests_get.return_value = mock_json
@ -1456,6 +1459,14 @@ def test_current_drafts_cell_render_logged_in(mock_send, context):
cell.render(context)
assert requests_get.call_args_list[0][0][0] == '/api/users/xyz/drafts'
# anonymous user
context['request'].user = AnonymousUser()
with mock.patch('combo.apps.wcs.models.requests.get') as requests_get:
mock_json = mock.Mock(status_code=200)
requests_get.return_value = mock_json
cell.render(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)
def test_current_drafts_cell_check_validity(mock_send, context):
@ -1876,6 +1887,12 @@ def test_cards_cell_render_user(mock_send, context, nocache):
assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
assert 'email=&' in mock_send.call_args_list[0][0][0].url
context['request'].user = AnonymousUser()
mock_send.reset_mock()
cell.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
context['request'].user = MockUser()
mock_send.reset_mock()
cell.render(context)
@ -1895,6 +1912,12 @@ def test_cards_cell_render_user(mock_send, context, nocache):
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
context['request'].user = AnonymousUser()
mock_send.reset_mock()
cell.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
context['request'].user = MockUser()
mock_send.reset_mock()
cell.render(context)
@ -3657,11 +3680,12 @@ 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)
def test_card_cell_render_user(mock_send, context, nocache):
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)
cell.carddef_reference = 'default:card_model_1'
cell.carddef_reference = carddef_reference
cell.save()
context['card_model_1_id'] = 11
@ -3676,6 +3700,12 @@ def test_card_cell_render_user(mock_send, context, nocache):
assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
assert 'email=&' in mock_send.call_args_list[0][0][0].url
context['request'].user = AnonymousUser()
mock_send.reset_mock()
cell.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
context['request'].user = MockUser()
mock_send.reset_mock()
cell.render(context)