Skip to content

Commit

Permalink
(api) Make testcase filtering aware of the duration fields
Browse files Browse the repository at this point in the history
  • Loading branch information
mfonism committed Oct 11, 2021
1 parent 8106477 commit 97ea6cd
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 2 deletions.
16 changes: 14 additions & 2 deletions tcms/rpc/api/testcase.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# -*- coding: utf-8 -*-

from datetime import timedelta

from django.db.models.functions import Coalesce
from django.forms import EmailField, ValidationError
from django.forms.models import model_to_dict
from modernrpc.core import REQUEST_KEY, rpc_method
Expand Down Expand Up @@ -279,8 +282,12 @@ def filter(query=None): # pylint: disable=redefined-builtin
if query is None:
query = {}

return list(
TestCase.objects.filter(**query)
qs = (
TestCase.objects.annotate(
expected_duration=Coalesce("setup_duration", timedelta(0))
+ Coalesce("testing_duration", timedelta(0))
)
.filter(**query)
.values(
"id",
"create_date",
Expand All @@ -304,10 +311,15 @@ def filter(query=None): # pylint: disable=redefined-builtin
"default_tester__username",
"reviewer",
"reviewer__username",
"setup_duration",
"testing_duration",
"expected_duration",
)
.distinct()
)

return list(qs)


@permissions_required("testcases.view_testcase")
@rpc_method(name="TestCase.history")
Expand Down
44 changes: 44 additions & 0 deletions tcms/rpc/tests/test_testcase.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from attachments.models import Attachment
from django.contrib.auth.models import Permission
from django.core.exceptions import ValidationError
from parameterized import parameterized
from tcms_api import xmlrpc

from tcms.core.helpers import comments
Expand Down Expand Up @@ -173,12 +174,55 @@ def test_filter_query_none(self):
self.assertIn("author", result[0])
self.assertIn("default_tester", result[0])
self.assertIn("reviewer", result[0])
self.assertIn("setup_duration", result[0])
self.assertIn("testing_duration", result[0])
self.assertIn("expected_duration", result[0])

def test_filter_by_product_id(self):
cases = self.rpc_client.TestCase.filter({"category__product": self.product.pk})
self.assertIsNotNone(cases)
self.assertEqual(len(cases), self.cases_count)

@parameterized.expand(
[
("both_values_are_not_set", {}, None, None, 0),
(
"setup_duration_is_not_set",
{"testing_duration": timedelta(minutes=5)},
None,
300,
300,
),
(
"testing_duration_is_not_set",
{"setup_duration": timedelta(seconds=45)},
45,
None,
45,
),
(
"both_values_are_set",
{
"setup_duration": timedelta(seconds=45),
"testing_duration": timedelta(minutes=5),
},
45,
300,
345,
),
]
)
def test_duration_properties_in_result(
self, _name, init_dict, setup_duration, testing_duration, expected_duration
):
testcase = TestCaseFactory(**init_dict)
result = self.rpc_client.TestCase.filter({"pk": testcase.pk})

self.assertIsNotNone(result)
self.assertEqual(result[0]["setup_duration"], setup_duration)
self.assertEqual(result[0]["testing_duration"], testing_duration)
self.assertEqual(result[0]["expected_duration"], expected_duration)


class TestUpdate(APITestCase):
non_existing_username = "FakeUsername"
Expand Down

0 comments on commit 97ea6cd

Please sign in to comment.