changeset 115:45ebfab035b7

test_bitbucket_issue_46
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 12 Jul 2017 22:10:00 +0200
parents a6019560272f
children d87bf4fbbf83
files Tests/Tests.py
diffstat 1 files changed, 56 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Tests/Tests.py	Tue Jul 11 17:55:16 2017 +0200
+++ b/Tests/Tests.py	Wed Jul 12 22:10:00 2017 +0200
@@ -3262,3 +3262,59 @@
             b.append(a[0])
 
         self.assertEqual(0, len(set(b) ^ set(knee)))
+
+
+    def test_bitbucket_issue_46(self):
+        # "PHI remaining after anonymization"
+        # https://bitbucket.org/sjodogne/orthanc/issues/46
+
+        def GetAnonymizedTags(study, version):
+            anonymized = DoPost(_REMOTE, '/studies/%s/anonymize' % study,
+                                { 'DicomVersion' : version },
+                                'application/json') ['ID']
+            a = DoGet(_REMOTE, '/studies/%s/instances' % anonymized)
+            self.assertEqual(1, len(a))
+
+            instance = a[0]['ID']
+            
+            return (instance, DoGet(_REMOTE, '/instances/%s/tags' % instance))
+
+        # Use a sample DICOM image that already contains the 0010,1060
+        # (RequestingService) tag
+        UploadInstance(_REMOTE, 'Issue44/Monochrome1.dcm')
+        origStudy = '6068a14b-d4df27af-9ec22145-538772d8-74f228ff'
+
+        # Add the 0032,1033 (Requesting Service) and the 0010,1060
+        # (Patient's Mother's Birth Name) tags
+        newStudy = DoPost(_REMOTE, '/studies/%s/modify' % origStudy,
+                          '{"Replace":{"0010,1060":"OSIMIS","0032,1033":"MOTHER"}}',
+                          'application/json')['ID']
+
+        # Use Table E.1-1 from PS 3.15-2008
+        # https://raw.githubusercontent.com/jodogne/dicom-specification/master/2008/08_15pu.pdf
+        (instance, tags) = GetAnonymizedTags(newStudy, "2008")
+        self.assertTrue('0032,1033' in tags)
+        self.assertTrue('0010,1060' in tags)
+
+        # Use Table E.1-1 from PS 3.15-2011 (only if Orthanc >= 1.2.1)
+        # https://raw.githubusercontent.com/jodogne/dicom-specification/master/2008/08_15pu.pdf
+        (instance, tags) = GetAnonymizedTags(newStudy, "2017c")
+        self.assertFalse('0032,1033' in tags)
+        self.assertFalse('0010,1060' in tags)
+
+        t = {}
+        for (key, value) in tags.iteritems():
+            t[value['Name']] = value['Value']
+
+        self.assertEqual('', t['StudyDate'])  # Type 1 tag => cleared
+        self.assertEqual('', t['StudyTime'])  # Type 1 tag => cleared
+        self.assertEqual('', t['PatientSex']) # Type 1 tag => cleared
+        self.assertFalse('SeriesDate' in t)   # Type 3 tag => null
+        self.assertFalse('SeriesTime' in t)   # Type 3 tag => null
+
+        with tempfile.NamedTemporaryFile(delete = True) as f:
+            # Run "dciodvfy" on the anonymized file to be sure it is still valid
+            f.write(DoGet(_REMOTE, '/instances/%s/file' % instance))
+            f.flush()
+            subprocess.check_output([ FindExecutable('dciodvfy'), f.name ],
+                                    stderr = subprocess.STDOUT).split('\n')