forms: ignore hidden evolution parts when joining statuses in history (#38621)
This commit is contained in:
parent
2b6df5d5f8
commit
e8926cd070
|
@ -41,6 +41,7 @@ from wcs.wf.jump import JumpWorkflowStatusItem
|
|||
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
|
||||
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
|
||||
from wcs.wf.resubmit import ResubmitWorkflowStatusItem
|
||||
from wcs.wf.wscall import JournalWsCallErrorPart
|
||||
from wcs.workflows import (
|
||||
ChoiceWorkflowStatusItem,
|
||||
CommentableWorkflowStatusItem,
|
||||
|
@ -5135,6 +5136,59 @@ def test_form_page_profile_verified_prefill(pub):
|
|||
assert formdatas[0].data['0'] == 'foo@localhost'
|
||||
|
||||
|
||||
def test_form_worklow_multiple_identical_status_with_wserror(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
formdef = create_formdef()
|
||||
formdef.fields = []
|
||||
formdef.store()
|
||||
|
||||
workflow = Workflow(name='test')
|
||||
st1 = workflow.add_status('Status1', 'st1')
|
||||
jump = JumpWorkflowStatusItem()
|
||||
jump.trigger = 'XXX'
|
||||
jump.status = 'st1'
|
||||
st1.items.append(jump)
|
||||
jump.parent = st1
|
||||
workflow.store()
|
||||
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
formdef.data_class().wipe()
|
||||
formdata = formdef.data_class()()
|
||||
formdata.just_created()
|
||||
formdata.store()
|
||||
assert formdef.data_class().get(formdata.id).status == 'wf-st1'
|
||||
|
||||
app = get_app(pub)
|
||||
login(app, username='foo', password='foo')
|
||||
|
||||
pub.role_class.wipe()
|
||||
role = pub.role_class(name='xxx')
|
||||
role.allows_backoffice_access = False
|
||||
role.store()
|
||||
|
||||
jump.by = [role.id]
|
||||
workflow.store()
|
||||
user.roles = [role.id]
|
||||
user.store()
|
||||
|
||||
for _i in range(3):
|
||||
resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302)
|
||||
formdata = formdef.data_class().get(formdata.id)
|
||||
formdata.evolution[-1].add_part(JournalWsCallErrorPart('bla', 'bla', {}))
|
||||
formdata.store()
|
||||
|
||||
resp = app.get(formdata.get_url())
|
||||
assert resp.text.count('<li class="msg') == 1
|
||||
|
||||
role.allows_backoffice_access = True
|
||||
role.store()
|
||||
resp = app.get(formdata.get_url(backoffice=True))
|
||||
assert resp.text.count('<li class="msg') == 3
|
||||
|
||||
|
||||
def test_form_page_verified_prefill_error_page(pub):
|
||||
user = create_user(pub)
|
||||
user.verified_fields = ['email']
|
||||
|
|
|
@ -1978,10 +1978,10 @@ def test_webservice_call(http_requests, pub):
|
|||
item.action_on_4xx = ':stop'
|
||||
with pytest.raises(AbortActionException):
|
||||
item.perform(formdata)
|
||||
rendered = formdata.evolution[-1].parts[-1].view()
|
||||
assert not rendered # empty if not in backoffice
|
||||
assert formdata.evolution[-1].parts[-1].is_hidden() # not displayed in front
|
||||
req = HTTPRequest(None, {'SERVER_NAME': 'example.net', 'SCRIPT_NAME': '/backoffice/'})
|
||||
pub._set_request(req)
|
||||
assert not formdata.evolution[-1].parts[-1].is_hidden()
|
||||
rendered = formdata.evolution[-1].parts[-1].view()
|
||||
assert 'Error during webservice call' in str(rendered)
|
||||
assert 'Error Code: 1' in str(rendered)
|
||||
|
|
|
@ -151,6 +151,8 @@ class Evolution:
|
|||
for p in self.parts:
|
||||
if not p.view:
|
||||
continue
|
||||
if p.is_hidden and p.is_hidden():
|
||||
continue
|
||||
if hasattr(p, 'to') and not self.formdata.is_for_current_user(p.to):
|
||||
continue
|
||||
text = p.view()
|
||||
|
@ -648,7 +650,7 @@ class FormData(StorableObject):
|
|||
self.status == status
|
||||
and self.evolution[-1].status == status
|
||||
and not self.evolution[-1].comment
|
||||
and not self.evolution[-1].display_parts()
|
||||
and not self.evolution[-1].parts
|
||||
):
|
||||
# if status do not change and last evolution is empty,
|
||||
# just update last jump time on last evolution, do not add one
|
||||
|
|
|
@ -62,9 +62,10 @@ class JournalWsCallErrorPart(EvolutionPart):
|
|||
if data:
|
||||
self.data = data[:10000] # beware of huge responses
|
||||
|
||||
def is_hidden(self):
|
||||
return not (get_request() and get_request().get_path().startswith('/backoffice/'))
|
||||
|
||||
def view(self):
|
||||
if not (get_request() and get_request().get_path().startswith('/backoffice/')):
|
||||
return ''
|
||||
r = TemplateIO(html=True)
|
||||
r += htmltext('<div class="ws-error">')
|
||||
r += htmltext('<h4 class="foldable folded">')
|
||||
|
|
|
@ -186,6 +186,7 @@ class AttachmentsSubstitutionProxy:
|
|||
|
||||
class EvolutionPart:
|
||||
to = None
|
||||
is_hidden = None
|
||||
view = None
|
||||
|
||||
def render_for_fts(self):
|
||||
|
|
Loading…
Reference in New Issue