Projet

Général

Profil

0001-wcs-add-fields-to-customize-Card-display-54259.patch

Lauréline Guérin, 17 juin 2021 09:29

Télécharger (7,33 ko)

Voir les différences:

Subject: [PATCH] wcs: add fields to customize Card display (#54259)

 combo/apps/wcs/forms.py                       | 13 +++-
 .../wcs/migrations/0029_card_custom_schema.py | 19 ++++++
 combo/apps/wcs/models.py                      |  1 +
 tests/test_wcs.py                             | 61 +++++++++++++------
 4 files changed, 74 insertions(+), 20 deletions(-)
 create mode 100644 combo/apps/wcs/migrations/0029_card_custom_schema.py
combo/apps/wcs/forms.py
70 70

  
71 71
class WcsCardInfoCellForm(forms.ModelForm):
72 72
    with_user = forms.BooleanField(label=_('Restrict to cards accessible to the user'), required=False)
73
    customize_display = forms.BooleanField(label=_('Customize display'), required=False)
73 74

  
74 75
    class Meta:
75 76
        model = WcsCardInfosCell
76
        fields = ('carddef_reference', 'card_id')
77
        fields = ('carddef_reference', 'card_id', 'custom_schema')
78
        widgets = {
79
            'custom_schema': forms.HiddenInput(),
80
        }
77 81

  
78 82
    def __init__(self, *args, **kwargs):
79 83
        instance = kwargs['instance']
......
82 86
        super().__init__(initial=initial, *args, **kwargs)
83 87
        card_models = get_wcs_options('/api/cards/@list')
84 88
        self.fields['carddef_reference'].widget = forms.Select(choices=card_models)
89
        if self.instance.custom_schema:
90
            self.initial['customize_display'] = True
91
        if not self.instance.cached_json:
92
            del self.fields['customize_display']
93
            del self.fields['custom_schema']
85 94

  
86 95
    def save(self, *args, **kwargs):
87 96
        super().save(*args, **kwargs)
97
        if not self.cleaned_data.get('customize_display'):
98
            self.instance.custom_schema = {}
88 99
        self.instance.without_user = not self.cleaned_data['with_user']
89 100
        self.instance.save()
90 101
        return self.instance
combo/apps/wcs/migrations/0029_card_custom_schema.py
1
from __future__ import unicode_literals
2

  
3
from django.contrib.postgres.fields.jsonb import JSONField
4
from django.db import migrations
5

  
6

  
7
class Migration(migrations.Migration):
8

  
9
    dependencies = [
10
        ('wcs', '0028_wcscardscell_without_user'),
11
    ]
12

  
13
    operations = [
14
        migrations.AddField(
15
            model_name='wcscardinfoscell',
16
            name='custom_schema',
17
            field=JSONField(blank=True, default=dict),
18
        ),
19
    ]
combo/apps/wcs/models.py
890 890
    carddef_reference = models.CharField(_('Card Model'), max_length=150)
891 891
    card_id = models.CharField(_('Card Identifier'), max_length=150, blank=True)
892 892
    without_user = models.BooleanField(_('Ignore the logged-in user'), default=False)
893
    custom_schema = JSONField(blank=True, default=dict)
893 894

  
894 895
    cached_title = models.CharField(_('Title'), max_length=150)
895 896
    cached_json = JSONField(blank=True, default=dict)
tests/test_wcs.py
1523 1523

  
1524 1524

  
1525 1525
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
1526
def test_manager_card_cell(mock_send, app, admin_user):
1527
    page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard')
1528
    cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0)
1529
    app = login(app)
1530

  
1531
    resp = app.get('/manage/pages/%s/' % page.pk)
1532
    assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text
1533
    assert cell.without_user is False
1534
    assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on'
1535
    resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False
1536
    resp.forms[0].submit().follow()
1537
    cell.refresh_from_db()
1538
    assert cell.without_user is True
1539
    assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
1540

  
1541

  
1542
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
1543
def test_card_cell_setup(mock_send):
1544
    cell = WcsCardInfosCell()
1526
def test_card_cell_setup(mock_send, app, admin_user):
1527
    page = Page.objects.create(title='xxx', slug='test_card_cell_save_cache', template_name='standard')
1528
    cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
1545 1529
    form_class = cell.get_default_form_class()
1546 1530
    form = form_class(instance=cell)
1547 1531
    assert form.fields['carddef_reference'].widget.choices == [
......
1552 1536
        ('other:card_model_2', 'test2 : Card Model 2'),
1553 1537
        ('other:card_model_3', 'test2 : Card Model 3'),
1554 1538
    ]
1539
    assert 'customize_display' not in form.fields
1540
    assert 'custom_schema' not in form.fields
1541

  
1542
    cell.save()
1543
    assert 'customize_display' not in form.fields
1544
    assert 'custom_schema' not in form.fields
1545

  
1546
    cell.carddef_reference = 'default:card_model_1'
1547
    cell.save()
1548
    form = form_class(instance=cell)
1549
    assert 'customize_display' in form.fields
1550
    assert 'custom_schema' in form.fields
1551
    assert 'customize_display' not in form.initial
1552
    assert form.initial['custom_schema'] == {}
1553

  
1554
    cell.custom_schema = {'foo': 'bar'}
1555
    cell.save()
1556
    form = form_class(instance=cell)
1557
    assert 'customize_display' in form.fields
1558
    assert 'custom_schema' in form.fields
1559
    assert form.initial['customize_display'] is True
1560
    assert form.initial['custom_schema'] == {'foo': 'bar'}
1561

  
1562
    app = login(app)
1563
    resp = app.get('/manage/pages/%s/' % page.pk)
1564
    assert resp.forms[0]['c%s-customize_display' % cell.get_reference()].value == 'on'
1565
    resp.forms[0]['c%s-customize_display' % cell.get_reference()].value = False
1566
    resp.forms[0].submit().follow()
1567
    cell.refresh_from_db()
1568
    assert cell.custom_schema == {}
1555 1569

  
1556 1570

  
1557 1571
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
......
1636 1650
    resp = app.get('/manage/pages/%s/' % page.pk)
1637 1651
    assert '<script id="cell-%s-card-schema-default:card_model_1" type="application/json">' % cell.pk in resp
1638 1652

  
1653
    assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text
1654
    assert cell.without_user is False
1655
    assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on'
1656
    resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False
1657
    resp = resp.forms[0].submit().follow()
1658
    cell.refresh_from_db()
1659
    assert cell.without_user is True
1660
    assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
1661

  
1639 1662

  
1640 1663
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
1641 1664
def test_card_cell_load(mock_send):
1642
-