Skip to content

Commit 20bd14f

Browse files
authored
python(fix): Properly cast enums for query filtering. (#374)
1 parent cce4f12 commit 20bd14f

3 files changed

Lines changed: 68 additions & 15 deletions

File tree

python/lib/sift_client/_tests/resources/test_test_results.py

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
import uuid
34
from datetime import datetime, timedelta, timezone
45
from pathlib import Path
56
from typing import ClassVar
@@ -22,6 +23,7 @@
2223
TestStepCreate,
2324
TestStepType,
2425
)
26+
from sift_client.util import cel_utils as cel
2527

2628
pytestmark = pytest.mark.integration
2729

@@ -47,6 +49,8 @@ def test_create_test_report(self, sift_client, nostromo_run):
4749
"name": "Test Report with Steps and Measurements",
4850
"test_system_name": "Test System",
4951
"test_case": "Test Case",
52+
"serial_number": str(uuid.uuid4()),
53+
"part_number": "1234567890",
5054
"start_time": simulated_time,
5155
"end_time": simulated_time,
5256
"run_id": nostromo_run.id_,
@@ -309,6 +313,53 @@ def test_update_test_report(self, sift_client):
309313

310314
self.test_reports["basic_test_report"] = updated_report
311315

316+
def test_list_test_reports(self, sift_client):
317+
reports = sift_client.test_results.list_(
318+
filter_query=cel.not_(cel.equals("serial_number", ""))
319+
and cel.not_(cel.equals("part_number", "")),
320+
)
321+
existing_report = reports[0]
322+
assert len(reports)
323+
existing_report = reports[0]
324+
reports = sift_client.test_results.list_(
325+
status=existing_report.status,
326+
test_system_name=existing_report.test_system_name,
327+
test_case=existing_report.test_case,
328+
serial_numbers=[existing_report.serial_number],
329+
part_numbers=[existing_report.part_number],
330+
system_operator=existing_report.system_operator,
331+
)
332+
assert existing_report in reports
333+
334+
def test_list_test_steps(self, sift_client):
335+
steps = sift_client.test_results.list_steps()
336+
existing_step = None
337+
for step in steps:
338+
if step.parent_step_id is not None:
339+
existing_step = step
340+
break
341+
assert len(steps)
342+
steps = sift_client.test_results.list_steps(
343+
test_reports=[existing_step.test_report_id],
344+
parent_steps=[existing_step.parent_step_id],
345+
name=existing_step.name,
346+
step_type=existing_step.step_type,
347+
status=existing_step.status,
348+
)
349+
assert existing_step in steps
350+
351+
def test_list_test_measurements(self, sift_client):
352+
measurements = sift_client.test_results.list_measurements()
353+
assert len(measurements)
354+
existing_measurement = measurements[0]
355+
measurements = sift_client.test_results.list_measurements(
356+
test_steps=[existing_measurement.test_step_id],
357+
name=existing_measurement.name,
358+
measurement_type=existing_measurement.measurement_type,
359+
passed=existing_measurement.passed,
360+
)
361+
assert existing_measurement in measurements
362+
312363
def test_archive_and_delete_test_report(self, sift_client):
313364
test_report = self.test_reports.get("basic_test_report")
314365
if not test_report:

python/lib/sift_client/resources/sync_stubs/__init__.pyi

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,8 +1283,8 @@ class TestResultsAPI:
12831283
status: TestStatus | None = None,
12841284
test_system_name: str | None = None,
12851285
test_case: str | None = None,
1286-
serial_number: str | None = None,
1287-
part_number: str | None = None,
1286+
serial_numbers: list[str] | None = None,
1287+
part_numbers: list[str] | None = None,
12881288
system_operator: str | None = None,
12891289
created_by: str | None = None,
12901290
modified_by: str | None = None,
@@ -1309,8 +1309,8 @@ class TestResultsAPI:
13091309
status: Status to filter by (TestStatus enum).
13101310
test_system_name: Test system name to filter by.
13111311
test_case: Test case to filter by.
1312-
serial_number: Serial number to filter by.
1313-
part_number: Part number to filter by.
1312+
serial_numbers: Serial numbers to filter by.
1313+
part_numbers: Part numbers to filter by.
13141314
system_operator: System operator to filter by.
13151315
created_by: User ID who created the test report.
13161316
modified_by: User ID who last modified the test report.

python/lib/sift_client/resources/test_results.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ async def list_(
105105
status: TestStatus | None = None,
106106
test_system_name: str | None = None,
107107
test_case: str | None = None,
108-
serial_number: str | None = None,
109-
part_number: str | None = None,
108+
serial_numbers: list[str] | None = None,
109+
part_numbers: list[str] | None = None,
110110
system_operator: str | None = None,
111111
created_by: str | None = None,
112112
modified_by: str | None = None,
@@ -131,8 +131,8 @@ async def list_(
131131
status: Status to filter by (TestStatus enum).
132132
test_system_name: Test system name to filter by.
133133
test_case: Test case to filter by.
134-
serial_number: Serial number to filter by.
135-
part_number: Part number to filter by.
134+
serial_numbers: Serial numbers to filter by.
135+
part_numbers: Part numbers to filter by.
136136
system_operator: System operator to filter by.
137137
created_by: User ID who created the test report.
138138
modified_by: User ID who last modified the test report.
@@ -173,6 +173,8 @@ async def list_(
173173
filter_parts.append(in_("test_report_id", test_report_ids))
174174

175175
if status is not None:
176+
if isinstance(status, TestStatus):
177+
status = status.name.lower() # type: ignore
176178
filter_parts.append(equals("status", status))
177179

178180
if test_system_name:
@@ -181,11 +183,11 @@ async def list_(
181183
if test_case:
182184
filter_parts.append(equals("test_case", test_case))
183185

184-
if serial_number:
185-
filter_parts.append(equals("serial_number", serial_number))
186+
if serial_numbers:
187+
filter_parts.append(in_("serial_number", serial_numbers))
186188

187-
if part_number:
188-
filter_parts.append(equals("part_number", part_number))
189+
if part_numbers:
190+
filter_parts.append(in_("part_number", part_numbers))
189191

190192
if system_operator:
191193
filter_parts.append(equals("system_operator", system_operator))
@@ -351,10 +353,10 @@ async def list_steps(
351353
filter_parts.append(in_("parent_step_id", parent_step_ids))
352354

353355
if status is not None:
354-
filter_parts.append(equals("status", status))
356+
filter_parts.append(equals("status", status.name.lower()))
355357

356358
if step_type is not None:
357-
filter_parts.append(equals("step_type", step_type))
359+
filter_parts.append(equals("step_type", step_type.name.lower()))
358360

359361
query_filter = and_(*filter_parts)
360362

@@ -517,7 +519,7 @@ async def list_measurements(
517519
filter_parts.append(in_("test_report_id", test_report_ids))
518520

519521
if measurement_type is not None:
520-
filter_parts.append(equals("measurement_type", measurement_type))
522+
filter_parts.append(equals("measurement_type", measurement_type.name.lower()))
521523

522524
if passed is not None:
523525
filter_parts.append(equals("passed", passed))

0 commit comments

Comments
 (0)