Projet

Général

Profil

0001-formdata-do-not-consider-empty-evolution-in-last_upd.patch

Thomas Noël, 01 avril 2021 16:53

Télécharger (5,41 ko)

Voir les différences:

Subject: [PATCH] formdata: do not consider empty evolution in last_update_time
 (#52629)

 tests/backoffice_pages/test_all.py | 56 ++++++++++++++++++++++++++++++
 wcs/formdata.py                    | 13 +++----
 wcs/sql.py                         |  5 +--
 3 files changed, 66 insertions(+), 8 deletions(-)
tests/backoffice_pages/test_all.py
2547 2547
    resp = resp.form.submit('submit')
2548 2548
    resp = resp.follow()
2549 2549
    assert form_class().get(number31.id).data['2'] == 'bar'
2550

  
2551

  
2552
    # status and last_update_time tests
2553
    epoch = time.localtime(0)  # 1970-01-01 00:00
2554
    number31.evolution[-1].time = epoch
2550 2555
    number31.store()
2551 2556

  
2557
    # verify edit cancel doesn't change last_uptime_time
2558
    assert number31.last_update_time.tm_year == 1970
2559
    resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
2560
    resp = resp.form.submit('button_wfedit')
2561
    resp = resp.follow()
2562
    resp.form['f2'].value = 'foo'
2563
    resp = resp.form.submit('cancel')
2564
    resp = resp.follow()
2565
    number31 = form_class().get(number31.id)
2566
    assert number31.data['2'] == 'baz'
2567
    assert number31.status == 'wf-%s' % st1.id
2568
    assert number31.last_update_time.tm_year == 1970
2569
    # edited (without status change) do not update last_update_time
2570
    resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
2571
    resp = resp.form.submit('button_wfedit')
2572
    resp = resp.follow()
2573
    resp.form['f2'].value = 'foo'
2574
    resp = resp.form.submit('submit')
2575
    resp = resp.follow()
2576
    number31 = form_class().get(number31.id)
2577
    assert number31.data['2'] == 'foo'
2578
    assert number31.status == 'wf-%s' % st1.id
2579
    assert number31.last_update_time.tm_year == 1970
2580

  
2581
    # change status after edition
2582
    st2 = workflow.add_status('Edited')
2583
    wfedit.status = st2
2584
    workflow.store()
2585
    # cancel do not change last_uptime_time
2586
    resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
2587
    resp = resp.form.submit('button_wfedit')
2588
    resp = resp.follow()
2589
    resp.form['f2'].value = 'bar'
2590
    resp = resp.form.submit('cancel')
2591
    resp = resp.follow()
2592
    number31 = form_class().get(number31.id)
2593
    assert number31.data['2'] == 'foo'
2594
    assert number31.status == 'wf-%s' % st1.id
2595
    assert number31.last_update_time.tm_year == 1970
2596
    # edited: change status and last_update_time
2597
    resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
2598
    resp = resp.form.submit('button_wfedit')
2599
    resp = resp.follow()
2600
    resp.form['f2'].value = 'bar'
2601
    resp = resp.form.submit('submit')
2602
    resp = resp.follow()
2603
    number31 = form_class().get(number31.id)
2604
    assert number31.data['2'] == 'bar'
2605
    assert number31.status == 'wf-%s' % st2.id
2606
    assert number31.last_update_time.tm_year > 1970
2607

  
2552 2608

  
2553 2609
def test_backoffice_wfedit_disabled(pub):
2554 2610
    user = create_user(pub)
wcs/formdata.py
1054 1054
    def get_last_update_time(self):
1055 1055
        if hasattr(self, '_last_update_time'):
1056 1056
            return self._last_update_time
1057
        if self.evolution and self.evolution[-1].last_jump_datetime:
1058
            return self.evolution[-1].last_jump_datetime.timetuple()
1059
        elif self.evolution and self.evolution[-1].time:
1060
            return self.evolution[-1].time
1061
        else:
1062
            return self.receipt_time
1057
        for evolution in reversed(self.evolution or []):
1058
            if evolution.status:
1059
                if evolution.last_jump_datetime:
1060
                    return evolution.last_jump_datetime.timetuple()
1061
                if evolution.time:
1062
                    return evolution.time
1063
        return self.receipt_time
1063 1064

  
1064 1065
    def set_last_update_time(self, value):
1065 1066
        self._last_update_time = value
wcs/sql.py
3301 3301
# latest migration, number + description (description is not used
3302 3302
# programmaticaly but will make sure git conflicts if two migrations are
3303 3303
# separately added with the same number)
3304
SQL_LEVEL = (50, 'switch role uuid column to varchar')
3304
SQL_LEVEL = (51, 'reindex formdata for last_update_time')
3305 3305

  
3306 3306

  
3307 3307
def migrate_global_views(conn, cur):
......
3426 3426
        # 21: (second part), store ascii_name of users
3427 3427
        # 23: (first part), use misc.simplify() over full text queries
3428 3428
        set_reindex('user', 'needed', conn=conn, cur=cur)
3429
    if sql_level < 41:
3429
    if sql_level < 51:
3430 3430
        # 17: store last_update_time in tables
3431 3431
        # 18: add user name to full-text search index
3432 3432
        # 21: (third part), add user ascii_names to full-text index
......
3436 3436
        # 31: add user_label to formdata
3437 3437
        # 38: extract submission_agent_id to its own column
3438 3438
        # 41: update full text normalization
3439
        # 51: new last_update_time calculation
3439 3440
        set_reindex('formdata', 'needed', conn=conn, cur=cur)
3440 3441
    if sql_level < 46:
3441 3442
        from wcs.carddef import CardDef
3442
-