From e9d2e6c349fdfd37d363cb3ef008d3dbb8880716 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laur=C3=A9line=20Gu=C3=A9rin?= <zebuline@entrouvert.com>
Date: Thu, 30 Jun 2022 16:11:57 +0200
Subject: [PATCH] wcs: custom title for forms in your care cell (#61589)

---
 .../wcs/migrations/0047_careforms_title.py    | 16 ++++++
 combo/apps/wcs/models.py                      |  1 +
 .../wcs/templates/combo/wcs/care_forms.html   |  2 +-
 tests/test_wcs.py                             | 57 +++++++++++--------
 4 files changed, 51 insertions(+), 25 deletions(-)
 create mode 100644 combo/apps/wcs/migrations/0047_careforms_title.py

diff --git a/combo/apps/wcs/migrations/0047_careforms_title.py b/combo/apps/wcs/migrations/0047_careforms_title.py
new file mode 100644
index 00000000..47d9904b
--- /dev/null
+++ b/combo/apps/wcs/migrations/0047_careforms_title.py
@@ -0,0 +1,16 @@
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('wcs', '0046_display_condition'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='wcscareformscell',
+            name='custom_title',
+            field=models.CharField(blank=True, max_length=150, verbose_name='Custom Title'),
+        ),
+    ]
diff --git a/combo/apps/wcs/models.py b/combo/apps/wcs/models.py
index 4aa19527..7fa1a4bd 100644
--- a/combo/apps/wcs/models.py
+++ b/combo/apps/wcs/models.py
@@ -723,6 +723,7 @@ class WcsFormsOfCategoryCell(WcsCommonCategoryCell, WcsBlurpMixin):
 @register_cell_class
 class WcsCareFormsCell(CategoriesAndWcsSiteValidityMixin, CategoriesFilteringMixin, WcsDataBaseCell):
     categories = JSONField(_('Categories'), blank=True, default=dict)
+    custom_title = models.CharField(_('Custom Title'), max_length=150, blank=True)
 
     api_url = '/api/forms/?limit=10'
     variable_name = 'care_forms'
diff --git a/combo/apps/wcs/templates/combo/wcs/care_forms.html b/combo/apps/wcs/templates/combo/wcs/care_forms.html
index 00150214..55fa3ed6 100644
--- a/combo/apps/wcs/templates/combo/wcs/care_forms.html
+++ b/combo/apps/wcs/templates/combo/wcs/care_forms.html
@@ -1,7 +1,7 @@
 {% load i18n combo %}
 {% block cell-content %}
 {% for slug, forms in care_forms.items %}
-  <h2>{% trans "Forms to process" %} - {{ forms.title }}</h2>
+  <h2>{% if cell.custom_title %}{{ cell.custom_title }}{% else %}{% trans "Forms to process" %} - {{ forms.title }}{% endif %}</h2>
   {% if forms.data %}
   <table id="listing" class="main clickable-rows">
     <thead>
diff --git a/tests/test_wcs.py b/tests/test_wcs.py
index 2e57cbcf..d4757977 100644
--- a/tests/test_wcs.py
+++ b/tests/test_wcs.py
@@ -1009,6 +1009,32 @@ def test_care_forms_cell_setup():
     assert cell.get_additional_label() == 'test'
 
 
+@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
+def test_manager_care_forms_cell(mock_send, app, admin_user):
+    page = Page(title='One', slug='one', template_name='standard')
+    page.save()
+    app = login(app)
+    resp = app.get('/manage/pages/%s/' % page.id)
+    resp = app.get(
+        resp.html.find('option', **{'data-add-url': re.compile('wcscareformscell')})['data-add-url']
+    )
+
+    cells = Page.objects.get(id=page.id).get_cells()
+    assert len(cells) == 1
+    assert isinstance(cells[0], WcsCareFormsCell)
+
+    resp = app.get('/manage/pages/%s/' % page.id)
+    assert not resp.pyquery('[data-tab-slug="general"] input[name$="custom_title"]')
+    assert resp.pyquery('[data-tab-slug="appearance"] input[name$="custom_title"]')
+    assert (
+        resp.pyquery.find('div.cell [data-tab-slug="advanced"] input[name$="cache_duration"]').val() == '120'
+    )
+    resp.forms[0]['c%s-cache_duration' % cells[0].get_reference()] = '10'
+    manager_submit_cell(resp.forms[0])
+    cells[0].refresh_from_db()
+    assert cells[0].cache_duration == 10
+
+
 @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')
@@ -1029,19 +1055,26 @@ def test_care_forms_cell_render(mock_send, context):
         is_portal_agent.return_value = True
         result = cell.render(context)
 
+    assert 'Forms to process - test' in result
     assert 'http://127.0.0.1:8999/backoffice/management/foobar/1' in result
     assert 'http://127.0.0.1:8999/backoffice/management/foobar/2' in result
     assert '"http://127.0.0.1:8999/backoffice/management/listing"' in result
+    assert 'Forms to process - test2' in result
     assert 'http://127.0.0.2:8999/backoffice/management/foobar/1' in result
     assert 'http://127.0.0.2:8999/backoffice/management/foobar/2' in result
     assert '"http://127.0.0.2:8999/backoffice/management/listing"' in result
 
+    cell.custom_title = 'Foo Bar'
     with mock.patch('combo.apps.wcs.models.is_portal_agent') as is_portal_agent:
         is_portal_agent.return_value = False
         result = cell.render(context)
 
+    assert 'Forms to process - test' not in result
+    assert 'Foo Bar' in result
     assert 'http://127.0.0.1:8999/foobar/1' in result
     assert 'http://127.0.0.1:8999/foobar/2' in result
+    assert 'Forms to process - test2' not in result
+    assert 'Foo Bar' in result
     assert 'http://127.0.0.2:8999/foobar/1' in result
     assert 'http://127.0.0.2:8999/foobar/2' in result
     assert '/listing' not in result
@@ -1621,30 +1654,6 @@ def test_manager_current_forms_tabs(app, admin_user):
     assert resp.pyquery('[data-tab-slug="appearance"] input[name$="custom_title"]')
 
 
-@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()
-    app = login(app)
-    resp = app.get('/manage/pages/%s/' % page.id)
-    resp = app.get(
-        resp.html.find('option', **{'data-add-url': re.compile('wcscareformscell')})['data-add-url']
-    )
-
-    cells = Page.objects.get(id=page.id).get_cells()
-    assert len(cells) == 1
-    assert isinstance(cells[0], WcsCareFormsCell)
-
-    resp = app.get('/manage/pages/%s/' % page.id)
-    assert (
-        resp.pyquery.find('div.cell [data-tab-slug="advanced"] input[name$="cache_duration"]').val() == '120'
-    )
-    resp.forms[0]['c%s-cache_duration' % cells[0].get_reference()] = '10'
-    manager_submit_cell(resp.forms[0])
-    cells[0].refresh_from_db()
-    assert cells[0].cache_duration == 10
-
-
 @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')
-- 
2.35.1

