applications: lingo cells dependencies to card models (#86520)
This commit is contained in:
parent
995e3773cf
commit
c1b431922f
|
@ -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):
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue