applications: lingo cells dependencies to card models (#86520)

This commit is contained in:
Lauréline Guérin 2024-02-06 10:08:38 +01:00
parent 995e3773cf
commit c1b431922f
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 115 additions and 0 deletions

View File

@ -49,6 +49,7 @@ from django.utils.translation import pgettext_lazy
from requests import RequestException
from combo.apps.notifications.models import Notification
from combo.apps.wcs.utils import get_wcs_dependencies_from_template
from combo.data.fields import RichTextField
from combo.data.library import register_cell_class
from combo.data.models import CellBase
@ -1576,6 +1577,10 @@ class InvoicesCell(RegieElementsMixin, CellBase):
raise NothingInCacheException()
return super().render(context)
def get_dependencies(self):
yield from super().get_dependencies()
yield from get_wcs_dependencies_from_template(self.payer_external_id_template)
class LingoElementsMixin:
@classmethod
@ -1616,6 +1621,10 @@ class LingoElementsMixin:
)
return ctx
def get_dependencies(self):
yield from super().get_dependencies()
yield from get_wcs_dependencies_from_template(self.payer_external_id_template)
@register_cell_class
class PaymentsCell(RegieElementsMixin, LingoElementsMixin, CellBase):

View File

@ -16,6 +16,7 @@ from django.core.files.storage import default_storage
from combo.apps.export_import.models import Application, ApplicationAsyncJob, ApplicationElement
from combo.apps.family.models import WeeklyAgendaCell
from combo.apps.lingo.models import CreditsCell, InvoicesCell, PaymentBackend, PaymentsCell, Regie
from combo.apps.search.models import SearchCell
from combo.apps.wcs.models import WcsCardCell, WcsCategoryCell, WcsFormCell
from combo.data.models import LinkCell, LinkListCell, Page, PageSnapshot, TextCell
@ -840,6 +841,111 @@ def test_page_dependencies_weekly_agenda_cell(mock_send):
assert card_dep not in page.get_dependencies()
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_page_dependencies_invoices_cell(mock_send):
payment_backend = PaymentBackend.objects.create(
label='test1', slug='test1', service='dummy', service_options={'siret': '1234'}
)
Regie.objects.create(
label='Remote',
slug='remote',
payment_backend=payment_backend,
webservice_url='http://example.org/regie', # is_remote
)
page = Page.objects.create(title='xxx', slug='invoices', template_name='standard')
cell = InvoicesCell.objects.create(
regie='remote',
page=page,
placeholder='content',
order=0,
payer_external_id_template='{{ cards|objects:"card_model_1" }}',
)
card_dep = {
'type': 'cards',
'id': 'card_model_1',
'text': 'Card Model 1',
'urls': {
'export': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/',
'dependencies': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/dependencies/',
'redirect': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/redirect/',
},
}
assert card_dep in page.get_dependencies()
cell.mark_as_invalid(reason_code='foobar')
assert card_dep not in page.get_dependencies()
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_page_dependencies_payments_cell(mock_send):
payment_backend = PaymentBackend.objects.create(
label='test1', slug='test1', service='dummy', service_options={'siret': '1234'}
)
Regie.objects.create(
label='Remote',
slug='remote',
payment_backend=payment_backend,
webservice_url='http://example.org/regie', # is_remote
)
page = Page.objects.create(title='xxx', slug='payments', template_name='standard')
cell = PaymentsCell.objects.create(
regie='remote',
page=page,
placeholder='content',
order=0,
payer_external_id_template='{{ cards|objects:"card_model_1" }}',
)
card_dep = {
'type': 'cards',
'id': 'card_model_1',
'text': 'Card Model 1',
'urls': {
'export': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/',
'dependencies': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/dependencies/',
'redirect': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/redirect/',
},
}
assert card_dep in page.get_dependencies()
cell.mark_as_invalid(reason_code='foobar')
assert card_dep not in page.get_dependencies()
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
def test_page_dependencies_credits_cell(mock_send):
payment_backend = PaymentBackend.objects.create(
label='test1', slug='test1', service='dummy', service_options={'siret': '1234'}
)
Regie.objects.create(
label='Remote',
slug='remote',
payment_backend=payment_backend,
webservice_url='http://example.org/regie', # is_remote
)
page = Page.objects.create(title='xxx', slug='credits', template_name='standard')
cell = CreditsCell.objects.create(
regie='remote',
page=page,
placeholder='content',
order=0,
payer_external_id_template='{{ cards|objects:"card_model_1" }}',
)
card_dep = {
'type': 'cards',
'id': 'card_model_1',
'text': 'Card Model 1',
'urls': {
'export': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/',
'dependencies': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/dependencies/',
'redirect': 'http://127.0.0.1:8999/api/export-import/cards/card_model_1/redirect/',
},
}
assert card_dep in page.get_dependencies()
cell.mark_as_invalid(reason_code='foobar')
assert card_dep not in page.get_dependencies()
def test_hourly(freezer):
job = ApplicationAsyncJob.objects.create(action='foo', bundle=File(io.BytesIO(b'test'), 'test.tar'))
ApplicationAsyncJob.objects.create(