Projet

Général

Profil

0001-forms-ignore-hidden-evolution-parts-when-joining-sta.patch

Frédéric Péters, 18 décembre 2019 15:14

Télécharger (5,36 ko)

Voir les différences:

Subject: [PATCH] forms: ignore hidden evolution parts when joining statuses in
 history (#38621)

 tests/test_form_pages.py | 54 ++++++++++++++++++++++++++++++++++++++++
 tests/test_workflows.py  |  4 +--
 wcs/formdata.py          |  4 ++-
 wcs/wf/wscall.py         |  5 ++--
 4 files changed, 62 insertions(+), 5 deletions(-)
tests/test_form_pages.py
42 42
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
43 43
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
44 44
from wcs.wf.resubmit import ResubmitWorkflowStatusItem
45
from wcs.wf.wscall import JournalWsCallErrorPart
45 46
from wcs.categories import Category
46 47
from wcs.roles import Role, logged_users_role
47 48
from wcs.tracking_code import TrackingCode
......
4718 4719
    assert resp.text.count('new-evolution-1') == 1
4719 4720
    assert resp.text.count('new-evolution-2') == 1
4720 4721

  
4722
def test_form_worklow_multiple_identical_status_with_wserror(pub):
4723
    user = create_user(pub)
4724

  
4725
    formdef = create_formdef()
4726
    formdef.fields = []
4727
    formdef.store()
4728

  
4729
    workflow = Workflow(name='test')
4730
    st1 = workflow.add_status('Status1', 'st1')
4731
    jump = JumpWorkflowStatusItem()
4732
    jump.trigger = 'XXX'
4733
    jump.status = 'st1'
4734
    st1.items.append(jump)
4735
    jump.parent = st1
4736
    workflow.store()
4737

  
4738
    formdef.workflow_id = workflow.id
4739
    formdef.store()
4740

  
4741
    formdef.data_class().wipe()
4742
    formdata = formdef.data_class()()
4743
    formdata.just_created()
4744
    formdata.store()
4745
    assert formdef.data_class().get(formdata.id).status == 'wf-st1'
4746

  
4747
    app = get_app(pub)
4748
    login(app, username='foo', password='foo')
4749

  
4750
    Role.wipe()
4751
    role = Role(name='xxx')
4752
    role.allows_backoffice_access = False
4753
    role.store()
4754

  
4755
    jump.by = [role.id]
4756
    workflow.store()
4757
    user.roles = [role.id]
4758
    user.store()
4759

  
4760
    for i in range(3):
4761
        resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302)
4762
        formdata = formdef.data_class().get(formdata.id)
4763
        formdata.evolution[-1].add_part(JournalWsCallErrorPart('bla', 'bla', {}))
4764
        formdata.store()
4765

  
4766
    resp = app.get(formdata.get_url())
4767
    assert resp.text.count('<li class="msg') == 1
4768

  
4769
    role.allows_backoffice_access = True
4770
    role.store()
4771
    resp = app.get(formdata.get_url(backoffice=True))
4772
    assert resp.text.count('<li class="msg') == 3
4773

  
4774

  
4721 4775
def test_form_worklow_comments_on_same_status(pub):
4722 4776
    pub.session_manager.session_class.wipe()
4723 4777
    user = create_user(pub)
tests/test_workflows.py
1633 1633
    item.action_on_4xx = ':stop'
1634 1634
    with pytest.raises(AbortActionException):
1635 1635
        item.perform(formdata)
1636
    rendered = formdata.evolution[-1].parts[-1].view()
1637
    assert not rendered # empty if not in backoffice
1636
    assert formdata.evolution[-1].parts[-1].is_hidden()  # not displayed in front
1638 1637
    req = HTTPRequest(None, {'SERVER_NAME': 'example.net', 'SCRIPT_NAME': '/backoffice/'})
1639 1638
    pub._set_request(req)
1639
    assert not formdata.evolution[-1].parts[-1].is_hidden()
1640 1640
    rendered = formdata.evolution[-1].parts[-1].view()
1641 1641
    assert 'Error during webservice call' in str(rendered)
1642 1642
    assert 'Error Code: 1' in str(rendered)
wcs/formdata.py
176 176
        for p in self.parts:
177 177
            if not hasattr(p, 'view'):
178 178
                continue
179
            if hasattr(p, 'is_hidden') and p.is_hidden():
180
                continue
179 181
            l.append(p.view())
180 182
        self._display_parts = l
181 183
        return self._display_parts
......
599 601
        elif (self.status == status
600 602
              and self.evolution[-1].status == status
601 603
              and not self.evolution[-1].comment
602
              and not self.evolution[-1].display_parts()):
604
              and not self.evolution[-1].parts):
603 605
            # if status do not change and last evolution is empty,
604 606
            # just update last jump time on last evolution, do not add one
605 607
            self.evolution[-1].last_jump_datetime = datetime.datetime.now()
wcs/wf/wscall.py
47 47
        if data:
48 48
            self.data = data[:10000] # beware of huge responses
49 49

  
50
    def is_hidden(self):
51
        return not (get_request() and get_request().get_path().startswith('/backoffice/'))
52

  
50 53
    def view(self):
51
        if not (get_request() and get_request().get_path().startswith('/backoffice/')):
52
            return ''
53 54
        r = TemplateIO(html=True)
54 55
        r += htmltext('<div class="ws-error">')
55 56
        r += htmltext('<h4 class="foldable folded">')
56
-