Projet

Général

Profil

0003-custom-view-possibility-to-set-a-digest-45633.patch

Lauréline Guérin, 25 juin 2021 10:48

Télécharger (5,72 ko)

Voir les différences:

Subject: [PATCH 3/4] custom view: possibility to set a digest (#45633)

 tests/backoffice_pages/test_custom_view.py | 54 ++++++++++++++++++++++
 wcs/backoffice/management.py               | 30 ++++++++++++
 2 files changed, 84 insertions(+)
tests/backoffice_pages/test_custom_view.py
782 782
    assert pub.custom_view_class.get(1).is_default is False  # not for datasource
783 783

  
784 784

  
785
def test_carddata_custom_view_digest_template(pub):
786
    user = create_superuser(pub)
787
    pub.role_class.wipe()
788
    role = pub.role_class(name='foobar')
789
    role.store()
790
    user.roles = [role.id]
791
    user.store()
792

  
793
    CardDef.wipe()
794
    pub.custom_view_class.wipe()
795
    carddef = CardDef()
796
    carddef.name = 'foo'
797
    carddef.fields = [
798
        fields.StringField(id='1', label='Test', type='string', varname='foo'),
799
    ]
800
    carddef.backoffice_submission_roles = user.roles
801
    carddef.store()
802

  
803
    app = login(get_app(pub))
804
    resp = app.get('/backoffice/data/foo/')
805
    resp = resp.forms['listing-settings'].submit()
806
    assert resp.forms['save-custom-view']['digest_template'].value == ''
807
    resp.forms['save-custom-view']['title'] = 'some view'
808
    resp.forms['save-custom-view']['visibility'] = 'any'
809
    resp.forms['save-custom-view']['digest_template'] = 'FOO {{ form_var_foo }} bar'
810
    resp = resp.forms['save-custom-view'].submit()
811
    assert CardDef.get(1).digest_templates == {'custom-view:some-view': 'FOO {{ form_var_foo }} bar'}
812
    assert resp.location.endswith('/some-view/')
813

  
814
    resp = resp.follow()
815
    resp = resp.forms['listing-settings'].submit()
816
    assert resp.forms['save-custom-view']['digest_template'].value == 'FOO {{ form_var_foo }} bar'
817
    assert resp.forms['save-custom-view']['update'].checked is True
818
    resp.forms['save-custom-view']['digest_template'] = 'FOO {{ form_var_foo }}'
819
    resp = resp.forms['save-custom-view'].submit()
820
    assert CardDef.get(1).digest_templates == {'custom-view:some-view': 'FOO {{ form_var_foo }}'}
821

  
822
    carddef = CardDef.get(1)
823
    carddef.digest_templates['default'] = 'plop'
824
    carddef.store()
825
    resp = app.get('/backoffice/data/foo/')
826
    resp = resp.forms['listing-settings'].submit()
827
    assert resp.forms['save-custom-view']['digest_template'].value == 'plop'
828
    resp.forms['save-custom-view']['title'] = 'another view'
829
    resp.forms['save-custom-view']['visibility'] = 'any'
830
    resp.forms['save-custom-view']['digest_template'] = '{{ form_var_foo }}'
831
    resp = resp.forms['save-custom-view'].submit()
832
    assert CardDef.get(1).digest_templates == {
833
        'default': 'plop',
834
        'custom-view:some-view': 'FOO {{ form_var_foo }}',
835
        'custom-view:another-view': '{{ form_var_foo }}',
836
    }
837

  
838

  
785 839
def test_backoffice_custom_view_keep_filters(pub):
786 840
    user = create_superuser(pub)
787 841

  
wcs/backoffice/management.py
31 31
from quixote.html import TemplateIO, htmlescape, htmltext
32 32
from quixote.http_request import parse_query
33 33

  
34
from wcs.admin.forms import UpdateDigestAfterJob
34 35
from wcs.admin.settings import UserFieldsFormDef
35 36
from wcs.api_utils import get_user_from_api_query_string
36 37
from wcs.carddef import CardDef
......
1681 1682
                    'data-dynamic-display-value-in': 'owner|any',
1682 1683
                },
1683 1684
            )
1685
            if isinstance(self.formdef, CardDef):
1686
                digest_template = None
1687
                if self.view:
1688
                    templates = self.formdef.digest_templates or {}
1689
                    digest_template = templates.get('custom-view:%s' % self.view.get_url_slug())
1690
                form.add(
1691
                    StringWidget,
1692
                    'digest_template',
1693
                    title=_('Digest'),
1694
                    value=digest_template or self.formdef.default_digest_template,
1695
                    size=50,
1696
                    attrs={
1697
                        'data-dynamic-display-child-of': 'visibility',
1698
                        'data-dynamic-display-value-in': 'datasource|any',
1699
                    },
1700
                )
1684 1701
        else:
1685 1702
            form.add(
1686 1703
                CheckboxWidget,
......
1721 1738
                custom_view.is_default = False
1722 1739
        custom_view.store()
1723 1740

  
1741
        if form.get_widget('digest_template'):
1742
            if not self.formdef.digest_templates:
1743
                self.formdef.digest_templates = {}
1744
            old_value = self.formdef.digest_templates.get('custom-view:%s' % custom_view.get_url_slug())
1745
            new_value = form.get_widget('digest_template').parse()
1746
            if old_value != new_value:
1747
                self.formdef.digest_templates[
1748
                    'custom-view:%s' % custom_view.get_url_slug()
1749
                ] = form.get_widget('digest_template').parse()
1750
                self.formdef.store()
1751
                if self.formdef.data_class().count():
1752
                    get_response().add_after_job(UpdateDigestAfterJob(formdef=self.formdef))
1753

  
1724 1754
        if custom_view.is_default and custom_view.visibility != 'datasource':
1725 1755
            # need to clean other views to have only one default per owner/any visibility
1726 1756
            for view in self.get_custom_views():
1727
-