From cffd586c1845b77dec15aaa931723448f8497509 Mon Sep 17 00:00:00 2001 From: Thomas NOEL Date: Tue, 1 May 2018 12:22:19 +0200 Subject: [PATCH] do not add an evolution on static jump (#22236) --- tests/test_form_pages.py | 33 ++++++++++++++++++++++++++++++--- tests/test_sql.py | 2 ++ wcs/formdata.py | 15 +++++++++++++-- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/tests/test_form_pages.py b/tests/test_form_pages.py index bf264600..9c6777b8 100644 --- a/tests/test_form_pages.py +++ b/tests/test_form_pages.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +import datetime import json import pytest import hashlib @@ -3766,17 +3767,43 @@ def test_form_worklow_multiple_identical_status(pub): user.roles = [role.id] user.store() + assert len(formdef.data_class().get(formdata.id).evolution) == 1 + formdata.evolution[0].time = datetime.datetime(1980, 1, 1, 0, 0, 0).timetuple() + formdata.store() + assert formdef.data_class().get(formdata.id).evolution[0].time.tm_year == 1980 + login(app, username='foo', password='foo') resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302) + formdata = formdef.data_class().get(formdata.id) + # status is not changed, no new evolution, update last time + assert len(formdata.evolution) == 1 + assert formdata.status == 'wf-st1' + assert formdata.evolution[0].time.tm_year != 1980 + + # add a comment to last evolution, force create a new one + formdata.evolution[-1].comment = "new-evolution-1" + formdata.store() + resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302) + formdata = formdef.data_class().get(formdata.id) + assert len(formdata.evolution) == 2 + assert formdata.status == 'wf-st1' + + # again + formdata.evolution[-1].comment = "new-evolution-2" + formdata.store() resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302) + + # last evolution is empty, this last trigger does not create a new one resp = app.post(formdata.get_url() + 'jump/trigger/XXX', status=302) - assert len(formdef.data_class().get(formdata.id).evolution) == 4 + assert len(formdef.data_class().get(formdata.id).evolution) == 3 assert formdef.data_class().get(formdata.id).status == 'wf-st1' resp = app.get(formdata.get_url()) - assert resp.body.count('Status1') == 2 # once in summary and once in journal - assert resp.body.count('CSS-STATUS1') == 1 + assert resp.body.count('Status1') == 3 # once in summary and two in journal + assert resp.body.count('CSS-STATUS1') == 2 + assert resp.body.count('new-evolution-1') == 1 + assert resp.body.count('new-evolution-2') == 1 def test_display_message(pub): user = create_user(pub) diff --git a/tests/test_sql.py b/tests/test_sql.py index 2ec226cb..892b9bad 100644 --- a/tests/test_sql.py +++ b/tests/test_sql.py @@ -1456,6 +1456,7 @@ def test_last_update_time(): formdata1 = data_class() formdata1.status = 'wf-st1' formdata1.just_created() + formdata1.evolution[0].comment = 'comment' formdata1.jump_status('st1') # will add another evolution entry formdata1.evolution[0].time = datetime.datetime(2015, 1, 1, 0, 0, 0).timetuple() formdata1.evolution[1].time = datetime.datetime(2015, 1, 2, 0, 0, 0).timetuple() @@ -1464,6 +1465,7 @@ def test_last_update_time(): formdata2 = data_class() formdata2.status = 'wf-st1' formdata2.just_created() + formdata2.evolution[0].comment = 'comment' formdata2.jump_status('st1') # will add another evolution entry formdata2.evolution[0].time = datetime.datetime(2015, 1, 3, 0, 0, 0).timetuple() formdata2.evolution[1].time = datetime.datetime(2015, 1, 4, 0, 0, 0).timetuple() diff --git a/wcs/formdata.py b/wcs/formdata.py index 5d84da9c..4076ce30 100644 --- a/wcs/formdata.py +++ b/wcs/formdata.py @@ -536,13 +536,24 @@ class FormData(StorableObject): previous_status = self.pop_previous_marked_status() assert previous_status, 'failed to compute previous status' status_id = previous_status.id + status = 'wf-%s' % status_id + if not self.evolution: + self.evolution = [] + elif (self.status == status and self.evolution[-1].status == status + and not self.evolution[-1].comment + and not self.evolution[-1].display_parts()): + # if the status do not change and the last evolution is empty, + # just update the last evolution time, do not add one + self.evolution[-1].time = time.localtime() + self.store() + return evo = Evolution(self) evo.time = time.localtime() - evo.status = 'wf-%s' % status_id + evo.status = status if not self.evolution: self.evolution = [] self.evolution.append(evo) - self.status = evo.status + self.status = status self.store() def get_url(self, backoffice = False): -- 2.17.0