Skip to content

Commit

Permalink
API TestExecution.update() will adjust close_date. Fixes #1820
Browse files Browse the repository at this point in the history
When changing status the close_date field will be updated according
to status.weight
  • Loading branch information
atodorov committed Oct 29, 2020
1 parent 5ebeb26 commit 064f641
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
1 change: 1 addition & 0 deletions tcms/rpc/api/forms/testrun.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,4 @@ class Meta:

assignee = UserField()
tested_by = UserField()
close_date = DateTimeField()
9 changes: 9 additions & 0 deletions tcms/rpc/api/testexecution.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from django.conf import settings
from django.forms.models import model_to_dict
from django.utils import timezone
from modernrpc.core import REQUEST_KEY, rpc_method

from tcms.core.contrib.linkreference.models import LinkReference
Expand Down Expand Up @@ -125,6 +126,14 @@ def update(execution_id, values):
else:
raise ValueError(form_errors_to_list(form))

# if this call updated TE.status then adjust timestamps
if values.get('status'):
if test_execution.status.weight != 0:
test_execution.close_date = timezone.now()
else:
test_execution.close_date = None
test_execution.save()

return test_execution.serialize()


Expand Down
30 changes: 30 additions & 0 deletions tcms/rpc/tests/test_testexecution.py
Original file line number Diff line number Diff line change
Expand Up @@ -393,3 +393,33 @@ def test_update_with_no_perm(self):
with self.assertRaisesRegex(ProtocolError, '403 Forbidden'):
self.rpc_client.TestExecution.update(self.execution_1.pk,
{"close_date": timezone.now()})

def test_update_non_zero_status_changes_close_date(self):
"""
Non-zero weight statuses will set close_date
"""
few_secs_ago = timezone.now()
self.execution_1.close_date = None
self.execution_1.save()

self.rpc_client.TestExecution.update(self.execution_1.pk, {
'status': self.status_positive.pk,
})

self.execution_1.refresh_from_db()
self.assertGreater(self.execution_1.close_date, few_secs_ago)

def test_update_zero_status_changes_close_date(self):
"""
Zero weight statuses will set close_date to None,
e.g. re-test the TE!
"""
self.execution_1.close_date = timezone.now()
self.execution_1.save()

self.rpc_client.TestExecution.update(self.execution_1.pk, {
'status': TestExecutionStatus.objects.filter(weight=0).first().pk,
})

self.execution_1.refresh_from_db()
self.assertIsNone(self.execution_1.close_date)

0 comments on commit 064f641

Please sign in to comment.