Skip to content
This repository was archived by the owner on Jun 13, 2025. It is now read-only.

Commit 80c19b1

Browse files
committed
fix: parameter filtering takes branch into account
1 parent f8ac094 commit 80c19b1

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

graphql_api/tests/test_test_analytics.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,12 +153,14 @@ def test_flaky_filter_on_test_results(self) -> None:
153153
created_at=datetime.datetime.now(),
154154
repoid=repo.repoid,
155155
branch="main",
156+
flaky_fail_count=0,
156157
)
157158
_ = DailyTestRollupFactory(
158159
test=test2,
159160
created_at=datetime.datetime.now(),
160161
repoid=repo.repoid,
161162
branch="feature",
163+
flaky_fail_count=1000,
162164
)
163165
res = self.fetch_test_analytics(
164166
repo.name,

utils/test_results.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
Avg,
1010
F,
1111
Q,
12+
QuerySet,
1213
Sum,
1314
Value,
1415
)
@@ -298,6 +299,17 @@ def compare(row: TestResultsRow) -> int:
298299
return rows[left:]
299300

300301

302+
def get_relevant_totals(
303+
repoid: int, branch: str | None, since: dt.datetime
304+
) -> QuerySet:
305+
if branch:
306+
return DailyTestRollup.objects.filter(
307+
repoid=repoid, date__gt=since, branch=branch
308+
)
309+
else:
310+
return DailyTestRollup.objects.filter(repoid=repoid, date__gt=since)
311+
312+
301313
def generate_test_results(
302314
ordering: str,
303315
ordering_direction: str,
@@ -341,7 +353,7 @@ def generate_test_results(
341353
test_ids: set[str] | None = None
342354

343355
if term is not None:
344-
totals = DailyTestRollup.objects.filter(repoid=repoid, date__gt=since)
356+
totals = get_relevant_totals(repoid, branch, since)
345357

346358
totals = totals.filter(test__name__icontains=term).values("test_id")
347359

@@ -359,16 +371,21 @@ def generate_test_results(
359371
if parameter is not None:
360372
match parameter:
361373
case GENERATE_TEST_RESULT_PARAM.FLAKY:
362-
flakes = Flake.objects.filter(
363-
Q(repository_id=repoid)
364-
& (Q(end_date__date__isnull=True) | Q(end_date__date__gt=since))
365-
)
374+
totals = get_relevant_totals(repoid, branch, since)
366375

367-
flaky_test_ids = set([flake.test_id for flake in flakes])
376+
flaky_test_ids = (
377+
totals.values("test")
378+
.annotate(flaky_fail_count_sum=Sum("flaky_fail_count"))
379+
.filter(flaky_fail_count_sum__gt=0)
380+
.values("test_id")
381+
)
382+
flaky_test_id_set = {test["test_id"] for test in flaky_test_ids}
368383

369-
test_ids = test_ids & flaky_test_ids if test_ids else flaky_test_ids
384+
test_ids = (
385+
test_ids & flaky_test_id_set if test_ids else flaky_test_id_set
386+
)
370387
case GENERATE_TEST_RESULT_PARAM.FAILED:
371-
totals = DailyTestRollup.objects.filter(repoid=repoid, date__gt=since)
388+
totals = get_relevant_totals(repoid, branch, since)
372389

373390
failed_test_ids = (
374391
totals.values("test")
@@ -382,7 +399,7 @@ def generate_test_results(
382399
test_ids & failed_test_id_set if test_ids else failed_test_id_set
383400
)
384401
case GENERATE_TEST_RESULT_PARAM.SKIPPED:
385-
totals = DailyTestRollup.objects.filter(repoid=repoid, date__gt=since)
402+
totals = get_relevant_totals(repoid, branch, since)
386403

387404
skipped_test_ids = (
388405
totals.values("test")
@@ -400,7 +417,7 @@ def generate_test_results(
400417
test_ids & skipped_test_id_set if test_ids else skipped_test_id_set
401418
)
402419
case GENERATE_TEST_RESULT_PARAM.SLOWEST:
403-
totals = DailyTestRollup.objects.filter(repoid=repoid, date__gt=since)
420+
totals = get_relevant_totals(repoid, branch, since)
404421

405422
num_tests = totals.distinct("test_id").count()
406423

0 commit comments

Comments
 (0)