Skip to content

Commit f843faf

Browse files
NDH-679 Add checks to make sure that filter parameters match the returned data (#378)
Signed-off-by: Isaac Milarsky <imilarsky@gmail.com> Co-authored-by: Sarah Popelka <sarah.popelka1@cms.hhs.gov>
1 parent 6ab7379 commit f843faf

File tree

1 file changed

+52
-2
lines changed

1 file changed

+52
-2
lines changed

backend/npdfhir/tests/test_practitioner_role.py

Lines changed: 52 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
from ..models import (
1818
Nucc,
1919
EndpointInstanceToPayload,
20+
OrganizationToName,
21+
Provider,
2022
ProviderToOrganization,
2123
ProviderToLocation,
2224
ProviderToTaxonomy,
2325
PayloadType,
2426
Location,
2527
LocationToEndpointInstance,
28+
IndividualToName
2629
)
2730

2831

@@ -160,6 +163,7 @@ def setUpTestData(cls):
160163

161164
# Create organization and location
162165
cls.org_name = "Sunshine Health"
166+
cls.orgs.append(cls.org_name)
163167
org = create_organization(
164168
name=cls.org_name, organization_type=taxonomy_code.code if taxonomy_code else None
165169
)
@@ -266,23 +270,69 @@ def test_list_with_greater_than_max_page_size(self):
266270

267271
# Filter tests
268272
def test_list_filter_by_name(self):
273+
sample_name = "Charlie"
269274
url = reverse("fhir-practitionerrole-list")
270-
response = self.client.get(url, {"name": "Cumberland"})
275+
response = self.client.get(url, {"practitioner_name": sample_name})
271276
self.assertEqual(response.status_code, status.HTTP_200_OK)
272277
assert_has_results(self, response)
273278

279+
for entry in response.data["results"]["entry"]:
280+
#Query the practitioner names based on the returned id
281+
practitioner_id = entry["resource"]["practitioner"]["reference"].split("/")[-1]
282+
provider = Provider.objects.select_related("individual").get(
283+
individual_id=practitioner_id
284+
)
285+
286+
name_objects = IndividualToName.objects.filter(individual=provider.individual).all()
287+
288+
#Save if the search matches an individual name associated with a provider
289+
match_conditions = []
290+
291+
for name in name_objects:
292+
name_string = ""
293+
name_string += f"{name.prefix or ""}"
294+
name_string += f"{name.first_name or ""} {name.middle_name or ""}"
295+
name_string += f"{name.last_name or ""} {name.suffix or ""}"
296+
297+
match_conditions.append(sample_name in name_string)
298+
299+
#Make sure that the provider has any individual name that matches
300+
self.assertTrue(any(match_conditions))
301+
274302
def test_list_filter_by_practitioner_gender(self):
275303
url = reverse("fhir-practitionerrole-list")
276304
response = self.client.get(url, {"practitioner_gender": "Female"})
277305
self.assertEqual(response.status_code, status.HTTP_200_OK)
278306
assert_has_results(self, response)
279307

308+
for entry in response.data["results"]["entry"]:
309+
#Query the practitioner individual based on the returned id
310+
practitioner_id = entry["resource"]["practitioner"]["reference"].split("/")[-1]
311+
provider = Provider.objects.select_related("individual").get(
312+
individual_id=practitioner_id
313+
)
314+
315+
self.assertEqual('F', provider.individual.gender)
316+
280317
def test_list_filter_by_organization_name(self):
318+
name_search = "MEDICAL"
281319
url = reverse("fhir-practitionerrole-list")
282-
response = self.client.get(url, {"organization_name": "MEDICAL"})
320+
response = self.client.get(url, {"organization_name": name_search})
283321
self.assertEqual(response.status_code, status.HTTP_200_OK)
284322
assert_has_results(self, response)
285323

324+
for entry in response.data["results"]["entry"]:
325+
#Query the practitioner names based on the returned id
326+
org_id = entry["resource"]["organization"]["reference"].split("/")[-1]
327+
org_name = (
328+
OrganizationToName.objects
329+
.filter(organization_id=org_id)
330+
.values_list("name", flat=True)
331+
.first()
332+
)
333+
334+
self.assertIn(name_search, org_name)
335+
286336
def test_filter_by_distance_with_km(self):
287337
lat = -90.194315
288338
lon = 38.629267

0 commit comments

Comments
 (0)