From e0a16b70e927f9a1eef4d253a100623ff7210a48 Mon Sep 17 00:00:00 2001 From: Dawn Smith Date: Tue, 31 Aug 2021 18:45:39 -0400 Subject: [PATCH 1/3] Added quick fix for SPN30/31 redcap issues. --- bin/dm_redcap_scan_completed.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bin/dm_redcap_scan_completed.py b/bin/dm_redcap_scan_completed.py index 025dbf8e..c41121d4 100755 --- a/bin/dm_redcap_scan_completed.py +++ b/bin/dm_redcap_scan_completed.py @@ -150,6 +150,11 @@ def parse_id(subject_id): # KCNI site and study fields match the datman fields. return ident + # Avoid modifying the ID if the study happens to match the destination + # study, otherwise duplicate records may be made + if 'Study' in id_map and ident.study in id_map['Study'].values(): + return ident + return datman.scanid.parse(subject_id, settings=id_map) From e1836c36761b3d2fe0495a24106d25c095ef06a4 Mon Sep 17 00:00:00 2001 From: Dawn Smith Date: Thu, 2 Sep 2021 14:05:09 -0400 Subject: [PATCH 2/3] Added test for the redcap SPN30/31 ID conversion bug fix --- tests/test_dm_redcap_scan_completed.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_dm_redcap_scan_completed.py b/tests/test_dm_redcap_scan_completed.py index d89fbbb8..69978615 100644 --- a/tests/test_dm_redcap_scan_completed.py +++ b/tests/test_dm_redcap_scan_completed.py @@ -51,6 +51,25 @@ def test_bad_id_raises_parse_exception(self, config): with pytest.raises(ParseException): rc.parse_id(bad_id) + def test_sites_dont_get_modified_if_study_field_unchanged(self, config): + def mock_get_key(key): + if key != 'IdMap': + raise datman.config.UndefinedSetting + settings = { + 'Study': { + 'SPN31': 'SPN30' + }, + 'Site': { + 'CMH': 'CMP' + } + } + return settings + config.get_key.side_effect = mock_get_key + rc.cfg = config + + parsed = rc.parse_id('SPN30_CMH_0001_01_SE01_MR') + assert str(parsed) == 'SPN30_CMH_0001_01_01' + @pytest.fixture def config(self): conf = Mock(spec=datman.config.config) From 197bed33b64efe5e200b792870fad1c29d9ad716 Mon Sep 17 00:00:00 2001 From: Dawn Smith Date: Thu, 2 Sep 2021 14:13:32 -0400 Subject: [PATCH 3/3] Added test to catch possible regressions --- tests/test_dm_redcap_scan_completed.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_dm_redcap_scan_completed.py b/tests/test_dm_redcap_scan_completed.py index 69978615..c769dcc7 100644 --- a/tests/test_dm_redcap_scan_completed.py +++ b/tests/test_dm_redcap_scan_completed.py @@ -70,6 +70,26 @@ def mock_get_key(key): parsed = rc.parse_id('SPN30_CMH_0001_01_SE01_MR') assert str(parsed) == 'SPN30_CMH_0001_01_01' + def test_sites_do_get_modified_when_study_code_is_not_matched(self, config): + def mock_get_key(key): + if key != 'IdMap': + raise datman.config.UndefinedSetting + settings = { + 'Study': { + 'XYZ02': 'ABC01' + }, + 'Site': { + 'CMH': 'CMP' + } + } + return settings + config.get_key.side_effect = mock_get_key + rc.cfg = config + + parsed = rc.parse_id('XYZ03_CMH_0001_01_SE01_MR') + + assert str(parsed) == 'XYZ03_CMP_0001_01_01' + @pytest.fixture def config(self): conf = Mock(spec=datman.config.config)