-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds unit tests and fixes for the find duplicates check
- Loading branch information
fredkingham
committed
Nov 16, 2022
1 parent
b5b9c0c
commit 56eeda7
Showing
2 changed files
with
188 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
from unittest import mock | ||
from opal.core.test import OpalTestCase | ||
from plugins.data_quality.checks import find_duplicates | ||
|
||
|
||
@mock.patch('plugins.data_quality.utils.send_email') | ||
class FindExactDuplicatesTestCase(OpalTestCase): | ||
def test_finds_exact_cleanable_duplicates(self, send_email): | ||
""" | ||
Cleanable duplicates are when we can delete one without issue. | ||
In this case only patient 1 has a subrecord so | ||
patient 2 can be deleted. | ||
""" | ||
patient_1, episode = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
diagnosis = episode.diagnosis_set.create() | ||
diagnosis.condition = "Cough" | ||
diagnosis.save() | ||
patient_2, _ = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
find_duplicates.find_exact_duplicates() | ||
call_args = send_email.call_args[0] | ||
self.assertEqual( | ||
call_args[0], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["title"], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [] | ||
) | ||
self.assertEqual( | ||
call_args[2]["cleanable_duplicates"], [(patient_2, patient_1,)] | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [] | ||
) | ||
|
||
def test_finds_exact_uncleanable_duplicates(self, send_email): | ||
""" | ||
Cleanable duplicates are when we can delete one without issue. | ||
In this case only patient 1 has a subrecord so | ||
patient 2 can be deleted. | ||
""" | ||
patient_1, episode_1 = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
diagnosis = episode_1.diagnosis_set.create() | ||
diagnosis.condition = "Cough" | ||
diagnosis.save() | ||
patient_2, episode_2 = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
diagnosis = episode_2.diagnosis_set.create() | ||
diagnosis.condition = "Fever" | ||
diagnosis.save() | ||
find_duplicates.find_exact_duplicates() | ||
call_args = send_email.call_args[0] | ||
self.assertEqual( | ||
call_args[0], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["title"], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["cleanable_duplicates"], [] | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [(patient_1, patient_2,)] | ||
) | ||
|
||
def test_does_not_find_exact_duplicates(self, send_email): | ||
patient_1, _ = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
patient_2, _ = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='22222222', | ||
) | ||
find_duplicates.find_exact_duplicates() | ||
self.assertFalse(send_email.called) | ||
|
||
|
||
@mock.patch('plugins.data_quality.utils.send_email') | ||
class FindLeadingZeroDuplicatesTestCase(OpalTestCase): | ||
def test_finds_leading_zero_cleanable_duplicates(self, send_email): | ||
""" | ||
Cleanable duplicates are when we can delete one without issue. | ||
In this case only patient 1 has a subrecord so | ||
patient 2 can be deleted. | ||
""" | ||
patient_1, episode = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
diagnosis = episode.diagnosis_set.create() | ||
diagnosis.condition = "Cough" | ||
diagnosis.save() | ||
patient_2, _ = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='0111111', | ||
) | ||
find_duplicates.find_zero_leading_duplicates() | ||
call_args = send_email.call_args[0] | ||
self.assertEqual( | ||
call_args[0], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["title"], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [] | ||
) | ||
self.assertEqual( | ||
call_args[2]["cleanable_duplicates"], [(patient_2, patient_1,)] | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [] | ||
) | ||
|
||
def test_finds_leading_zero_uncleanable_duplicates(self, send_email): | ||
""" | ||
Cleanable duplicates are when we can delete one without issue. | ||
In this case only patient 1 has a subrecord so | ||
patient 2 can be deleted. | ||
""" | ||
patient_1, episode_1 = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
diagnosis = episode_1.diagnosis_set.create() | ||
diagnosis.condition = "Cough" | ||
diagnosis.save() | ||
patient_2, episode_2 = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='0111111', | ||
) | ||
diagnosis = episode_2.diagnosis_set.create() | ||
diagnosis.condition = "Fever" | ||
diagnosis.save() | ||
find_duplicates.find_zero_leading_duplicates() | ||
call_args = send_email.call_args[0] | ||
self.assertEqual( | ||
call_args[0], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["title"], '1 Exact hospital number duplicates' | ||
) | ||
self.assertEqual( | ||
call_args[2]["cleanable_duplicates"], [] | ||
) | ||
self.assertEqual( | ||
call_args[2]["uncleanable_duplicates"], [(patient_2,patient_1,)] | ||
) | ||
|
||
def test_does_not_find_leading_zero_duplicates(self, send_email): | ||
patient_1, _ = self.new_patient_and_episode_please() | ||
patient_1.demographics_set.update( | ||
hospital_number='111111', | ||
) | ||
patient_2, _ = self.new_patient_and_episode_please() | ||
patient_2.demographics_set.update( | ||
hospital_number='022222222', | ||
) | ||
find_duplicates.find_zero_leading_duplicates() | ||
self.assertFalse(send_email.called) |