Projet

Général

Profil

0001-workflows-consider-latest-change-for-latest-arrival-.patch

Frédéric Péters, 20 janvier 2020 10:23

Télécharger (3,93 ko)

Voir les différences:

Subject: [PATCH] workflows: consider latest change for latest arrival global
 triggers (#39100)

 tests/test_workflows.py | 51 +++++++++++++++++++++++++++++++++++++++++
 wcs/workflows.py        |  7 ++++++
 2 files changed, 58 insertions(+)
tests/test_workflows.py
23 23
from wcs import sessions
24 24
from wcs.fields import (StringField, DateField, MapField, FileField, ItemField,
25 25
        ItemsField, CommentField)
26
from wcs.formdata import Evolution
26 27
from wcs.logged_errors import LoggedError
27 28
from wcs.roles import Role
28 29
from wcs.workflows import (Workflow, WorkflowStatusItem,
......
3347 3348
    formdata1.store()
3348 3349

  
3349 3350

  
3351
def test_global_timeouts_latest_arrival(two_pubs):
3352
    pub = two_pubs
3353
    FormDef.wipe()
3354
    Workflow.wipe()
3355

  
3356
    workflow = Workflow(name='global-timeouts')
3357
    workflow.possible_status = Workflow.get_default_workflow().possible_status[:]
3358
    workflow.criticality_levels = [
3359
        WorkflowCriticalityLevel(name='green'),
3360
        WorkflowCriticalityLevel(name='yellow'),
3361
        WorkflowCriticalityLevel(name='red'),
3362
    ]
3363
    action = workflow.add_global_action('Timeout Test')
3364
    item = action.append_item('modify_criticality')
3365
    trigger = action.append_trigger('timeout')
3366
    trigger.anchor = 'latest-arrival'
3367
    trigger.anchor_status_latest = 'wf-new'
3368
    trigger.timeout = '2'
3369
    workflow.store()
3370

  
3371
    formdef = FormDef()
3372
    formdef.name = 'baz'
3373
    formdef.fields = []
3374
    formdef.workflow_id = workflow.id
3375
    formdef.store()
3376
    formdef.data_class().wipe()
3377

  
3378
    formdata1 = formdef.data_class()()
3379
    formdata1.just_created()
3380
    formdata1.store()
3381

  
3382
    formdata1.jump_status('new')
3383
    # enter in status 8 days ago
3384
    formdata1.evolution[-1].time = time.localtime(time.time()-8*86400)
3385
    # but get a new comment 1 day ago
3386
    formdata1.evolution.append(Evolution())
3387
    formdata1.evolution[-1].time = time.localtime(time.time()-1*86400)
3388
    formdata1.evolution[-1].comment = 'plop'
3389
    formdata1.store()
3390
    pub.apply_global_action_timeouts()
3391
    # no change
3392
    assert formdef.data_class().get(formdata1.id).get_criticality_level_object().name == 'green'
3393

  
3394
    formdata1.evolution[-1].time = time.localtime(time.time()-5*86400)
3395
    formdata1.store()
3396
    pub.apply_global_action_timeouts()
3397
    # change
3398
    assert formdef.data_class().get(formdata1.id).get_criticality_level_object().name == 'yellow'
3399

  
3400

  
3350 3401
def test_profile(two_pubs):
3351 3402
    User = two_pubs.user_class
3352 3403
    user = User()
wcs/workflows.py
1141 1141
                    break
1142 1142
        elif self.anchor == 'latest-arrival':
1143 1143
            anchor_status = self.anchor_status_latest or formdata.status
1144
            latest_no_status_evolution = None
1144 1145
            for evolution in reversed(formdata.evolution):
1145 1146
                if evolution.status == anchor_status:
1147
                    if latest_no_status_evolution:
1148
                        evolution = latest_no_status_evolution
1146 1149
                    anchor_date = evolution.last_jump_datetime or evolution.time
1147 1150
                    break
1151
                elif evolution.status:
1152
                    latest_no_status_evolution = None
1153
                elif latest_no_status_evolution is None:
1154
                    latest_no_status_evolution = evolution
1148 1155
        elif self.anchor == 'finalized':
1149 1156
            if formdata.status in endpoint_status_ids:
1150 1157
                for evolution in reversed(formdata.evolution):
1151
-