admin: view workflow traces in test result inspect (#87244)
gitea/wcs/pipeline/head This commit looks good
Details
gitea/wcs/pipeline/head This commit looks good
Details
This commit is contained in:
parent
7e6f15155f
commit
cac1018c21
|
@ -1003,6 +1003,11 @@ def test_tests_result_error_field(pub):
|
|||
def test_tests_result_inspect(pub):
|
||||
user = create_superuser(pub)
|
||||
|
||||
role = pub.role_class(name='test role')
|
||||
role.store()
|
||||
user.roles = [role.id]
|
||||
user.store()
|
||||
|
||||
workflow = Workflow(name='Workflow One')
|
||||
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
||||
workflow.backoffice_fields_formdef.fields = [
|
||||
|
@ -1013,6 +1018,11 @@ def test_tests_result_inspect(pub):
|
|||
set_backoffice_fields = new_status.add_action('set-backoffice-fields')
|
||||
set_backoffice_fields.fields = [{'field_id': '1', 'value': 'goodbye'}]
|
||||
|
||||
jump = new_status.add_action('choice')
|
||||
jump.label = 'Loop on status'
|
||||
jump.status = new_status.id
|
||||
jump.by = [role.id]
|
||||
|
||||
workflow.store()
|
||||
|
||||
formdef = FormDef()
|
||||
|
@ -1030,6 +1040,9 @@ def test_tests_result_inspect(pub):
|
|||
testdef = TestDef.create_from_formdata(formdef, formdata)
|
||||
testdef.name = 'First test'
|
||||
testdef.agent_id = user.id
|
||||
testdef.workflow_tests.actions = [
|
||||
workflow_tests.ButtonClick(id='1', button_name='Loop on status'),
|
||||
]
|
||||
testdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
@ -1041,6 +1054,13 @@ def test_tests_result_inspect(pub):
|
|||
assert 'form_var_text' in resp.text
|
||||
assert 'form_var_text_bo' in resp.text
|
||||
|
||||
assert [x.text_content() for x in resp.pyquery('div#inspect-timeline a')] == [
|
||||
'New status',
|
||||
'Backoffice Data',
|
||||
'Action button - Manual Jump Loop on status',
|
||||
'Backoffice Data',
|
||||
]
|
||||
|
||||
resp.form['django-condition'] = 'form_var_text == "hello"'
|
||||
resp = resp.form.submit()
|
||||
assert 'Condition result' in resp.text
|
||||
|
|
|
@ -44,6 +44,7 @@ from wcs.qommon.form import (
|
|||
from wcs.sql_criterias import Equal, Null, StrictNotEqual
|
||||
from wcs.testdef import TestDef, TestError, TestResult, WebserviceResponse
|
||||
from wcs.workflow_tests import WorkflowTestError
|
||||
from wcs.workflow_traces import WorkflowTrace
|
||||
|
||||
|
||||
class TestEditPage(FormBackofficeEditPage):
|
||||
|
@ -548,6 +549,15 @@ class TestResultDetailPage(Directory):
|
|||
# set status
|
||||
formdata.status = formdata_json['workflow']['real_status']['id']
|
||||
|
||||
formdata.workflow_traces = [
|
||||
WorkflowTrace.import_from_json_dict(x) for x in formdata_json['workflow_traces']
|
||||
]
|
||||
|
||||
def get_workflow_traces():
|
||||
return formdata.workflow_traces
|
||||
|
||||
formdata.get_workflow_traces = get_workflow_traces
|
||||
|
||||
return formdata
|
||||
|
||||
|
||||
|
@ -671,6 +681,7 @@ class TestsAfterJob(AfterJob):
|
|||
formdata_json = test.formdata.get_json_export_dict()
|
||||
formdata_json['criticality_level'] = test.formdata.criticality_level
|
||||
formdata_json['anonymised'] = test.formdata.anonymised
|
||||
formdata_json['workflow_traces'] = [x.get_json_export_dict() for x in test.formdata.workflow_traces]
|
||||
|
||||
test_result = TestResult()
|
||||
test_result.object_type = objectdef.get_table_name()
|
||||
|
|
|
@ -217,6 +217,8 @@ class TestDef(sql.TestDef):
|
|||
formdata = objectdef.data_class()()
|
||||
formdata.just_created()
|
||||
|
||||
formdata.workflow_traces = []
|
||||
|
||||
if self.data['user']:
|
||||
formdata.set_user_from_json(self.data['user'])
|
||||
|
||||
|
|
|
@ -59,10 +59,7 @@ class WorkflowTests(XmlStorableObject):
|
|||
self.actions = []
|
||||
|
||||
def run(self, formdata, agent_user):
|
||||
# mock methods so nothing is stored
|
||||
formdata.record_workflow_event = lambda *args, **kwargs: None
|
||||
formdata.record_workflow_action = lambda *args, **kwargs: None
|
||||
formdata.store = lambda *args, **kwargs: None
|
||||
self.mock_formdata_methods(formdata)
|
||||
|
||||
# mark formdata as running workflow tests
|
||||
formdata.workflow_test = True
|
||||
|
@ -81,6 +78,20 @@ class WorkflowTests(XmlStorableObject):
|
|||
e.details.append(_('Form status when error occured: %s') % status.name)
|
||||
raise e
|
||||
|
||||
def mock_formdata_methods(self, formdata):
|
||||
from wcs.workflow_traces import WorkflowTrace
|
||||
|
||||
def record_workflow_event(event, **kwargs):
|
||||
formdata.workflow_traces.append(WorkflowTrace(formdata=formdata, event=event, event_args=kwargs))
|
||||
|
||||
def record_workflow_action(action):
|
||||
formdata.workflow_traces.append(WorkflowTrace(formdata=formdata, action=action))
|
||||
|
||||
formdata.record_workflow_event = record_workflow_event
|
||||
formdata.record_workflow_action = record_workflow_action
|
||||
|
||||
formdata.store = lambda *args, **kwargs: None
|
||||
|
||||
def get_new_action_id(self):
|
||||
if not self.actions:
|
||||
return '1'
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
from quixote.html import TemplateIO, htmltext
|
||||
|
||||
from wcs import sql
|
||||
from wcs.qommon import _
|
||||
from wcs.qommon import _, misc
|
||||
|
||||
|
||||
class WorkflowTrace(sql.WorkflowTrace):
|
||||
|
@ -284,3 +284,19 @@ class WorkflowTrace(sql.WorkflowTrace):
|
|||
status_admin_base_url,
|
||||
status_label,
|
||||
)
|
||||
|
||||
def get_json_export_dict(self):
|
||||
return {field: getattr(self, field) for field, _ in self._table_static_fields}
|
||||
|
||||
@classmethod
|
||||
def import_from_json_dict(cls, data):
|
||||
workflow_trace = cls.__new__(cls)
|
||||
|
||||
for field, kind in cls._table_static_fields:
|
||||
value = data.get(field)
|
||||
if value and kind == 'timestamptz':
|
||||
value = misc.get_as_datetime(value)
|
||||
|
||||
setattr(workflow_trace, field, value)
|
||||
|
||||
return workflow_trace
|
||||
|
|
Loading…
Reference in New Issue