changeset 784:058ce25e12a9

filename tests
author Alain Mazy <am@orthanc.team>
date Fri, 14 Feb 2025 12:36:49 +0100
parents 15669253744c
children de1ee0264916
files Tests/Tests.py Tests/Toolbox.py
diffstat 2 files changed, 52 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/Tests/Tests.py	Wed Jan 22 13:48:10 2025 +0100
+++ b/Tests/Tests.py	Fri Feb 14 12:36:49 2025 +0100
@@ -278,6 +278,12 @@
             self.assertIn('Uuid', attachmentInfo)
             self.assertEqual(1, attachmentInfo['ContentType'])
 
+
+            if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
+                resp, content = DoGetRaw(_REMOTE, '/instances/%s/attachments/dicom/data?filename=toto.dcm' % instance)
+                self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
+
+
         s = sizeDummyCT + j
 
         if isCompressed:
@@ -727,7 +733,7 @@
         kneeStudy = DoGet(_REMOTE, '/studies')[0]
         kneeSeries = DoGet(_REMOTE, '/series')[0]
 
-        z = GetArchive(_REMOTE, '/patients/%s/archive' % kneePatient)
+        z, resp = GetArchive(_REMOTE, '/patients/%s/archive' % kneePatient)
         self.assertEqual(2, len(z.namelist()))
         if IsOrthancVersionAbove(_REMOTE, 1, 12, 6):
             self.assertIn('887 KNEE/A10003245599 IRM DU GENOU/MR T1W_aTSE/MR000001.dcm', z.namelist())
@@ -735,7 +741,7 @@
         else:
             self.assertIn('887 KNEE/A10003245599 IRM DU GENOU/MR T1W_aTSE/MR000000.dcm', z.namelist())
 
-        z = GetArchive(_REMOTE, '/studies/%s/archive' % kneeStudy)
+        z, resp = GetArchive(_REMOTE, '/studies/%s/archive' % kneeStudy)
         self.assertEqual(2, len(z.namelist()))
         if IsOrthancVersionAbove(_REMOTE, 1, 12, 6):
             self.assertIn('887 KNEE/A10003245599 IRM DU GENOU/MR T1W_aTSE/MR000001.dcm', z.namelist())
@@ -743,7 +749,7 @@
         else:
             self.assertIn('887 KNEE/A10003245599 IRM DU GENOU/MR T1W_aTSE/MR000000.dcm', z.namelist())
 
-        z = GetArchive(_REMOTE, '/series/%s/archive' % kneeSeries)
+        z, resp = GetArchive(_REMOTE, '/series/%s/archive' % kneeSeries)
         self.assertEqual(1, len(z.namelist()))
         if IsOrthancVersionAbove(_REMOTE, 1, 12, 6):
             self.assertIn('887 KNEE/A10003245599 IRM DU GENOU/MR T1W_aTSE/MR000001.dcm', z.namelist())
@@ -754,7 +760,7 @@
         brainixPatient = '16738bc3-e47ed42a-43ce044c-a3414a45-cb069bd0'
         brainixStudy = '27f7126f-4f66fb14-03f4081b-f9341db2-53925988'
 
-        z = GetArchive(_REMOTE, '/patients/%s/archive' % kneePatient)
+        z, resp = GetArchive(_REMOTE, '/patients/%s/archive' % kneePatient)
         self.assertEqual(2, len(z.namelist()))
 
         # archive with 2 patients
@@ -814,15 +820,15 @@
             self.assertEqual(helloPatient, worldPatient)
 
             # when downloading the Patient, we do not really know what PatientName we will get in the zip
-            z = GetArchive(_REMOTE, '/patients/%s/archive' % helloPatient)
+            z, resp = GetArchive(_REMOTE, '/patients/%s/archive' % helloPatient)
             self.assertEqual(2, len(z.namelist()))
 
             # when downloading studies individually, we want to have the PatientName that appears in the study
-            z = GetArchive(_REMOTE, '/studies/%s/archive' % helloStudy)
+            z, resp = GetArchive(_REMOTE, '/studies/%s/archive' % helloStudy)
             self.assertEqual(1, len(z.namelist()))
             self.assertIn('COMMON HELLO/HELLO SERIES/Unknown Series/00000000.dcm', z.namelist())
 
-            z = GetArchive(_REMOTE, '/studies/%s/archive' % worldStudy)
+            z, resp = GetArchive(_REMOTE, '/studies/%s/archive' % worldStudy)
             self.assertEqual(1, len(z.namelist()))
             self.assertIn('COMMON WORLD/WORLD SERIES/Unknown Series/00000000.dcm', z.namelist())
 
@@ -832,7 +838,7 @@
         UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
         UploadInstance(_REMOTE, 'Knee/T2/IM-0001-0001.dcm')
 
-        z = GetArchive(_REMOTE, '/patients/%s/media' % DoGet(_REMOTE, '/patients')[0])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/media' % DoGet(_REMOTE, '/patients')[0])
         self.assertEqual(3, len(z.namelist()))
         self.assertTrue('IMAGES/IM0' in z.namelist())
         self.assertTrue('IMAGES/IM1' in z.namelist())
@@ -4745,7 +4751,7 @@
     def test_extended_media(self):
         UploadInstance(_REMOTE, 'Knee/T1/IM-0001-0001.dcm')
 
-        z = GetArchive(_REMOTE, '/patients/%s/media?extended' % DoGet(_REMOTE, '/patients')[0])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/media?extended' % DoGet(_REMOTE, '/patients')[0])
         self.assertEqual(2, len(z.namelist()))
         self.assertTrue('IMAGES/IM0' in z.namelist())
         self.assertTrue('DICOMDIR' in z.namelist())
@@ -5176,12 +5182,15 @@
 
         job = MonitorJob2(_REMOTE, lambda: DoPost
                           (_REMOTE, '/series/%s/archive' % kneeT1, {
-                              'Synchronous' : False
+                              'Synchronous' : False,
+                              'Filename': 'toto.zip'
                           }))
 
-        z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+        z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
         self.assertEqual(1, len(z.namelist()))
         self.assertFalse('DICOMDIR' in z.namelist())
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
+            self.assertEqual('filename="toto.zip"', resp['content-disposition'])
 
         info = DoGet(_REMOTE, '/jobs/%s' % job)
         self.assertEqual(0, info['Content']['ArchiveSizeMB'])  # New in Orthanc 1.8.1
@@ -5197,7 +5206,7 @@
         # archive from second job (as MediaArchiveSize == 1)
         self.assertRaises(Exception, lambda: GetArchive(_REMOTE, '/jobs/%s/archive' % job))
 
-        z = GetArchive(_REMOTE, '/jobs/%s/archive' % job2)
+        z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job2)
         self.assertEqual(2, len(z.namelist()))
         self.assertTrue('DICOMDIR' in z.namelist())
 
@@ -5212,7 +5221,7 @@
                               'Resources' : [ kneeT1, kneeT2 ],
                           }))
 
-        z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+        z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
         self.assertEqual(2, len(z.namelist()))
         self.assertFalse('DICOMDIR' in z.namelist())
         
@@ -5227,7 +5236,7 @@
                               'Resources' : [ kneeT1, kneeT2 ],
                           }))
 
-        z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+        z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
         self.assertEqual(3, len(z.namelist()))
         self.assertTrue('DICOMDIR' in z.namelist())
 
@@ -5249,7 +5258,7 @@
                                 'Synchronous' : False
                             }))
 
-            z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+            z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
             # delete the output
             DoDelete(_REMOTE, '/jobs/%s/archive' % job)
             # make sure it is not available anymore afterwards
@@ -5260,7 +5269,7 @@
                             (_REMOTE, '/series/%s/archive' % kneeT2, {
                                 'Synchronous' : False
                             }))
-            z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+            z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
             # delete the output
             DoDelete(_REMOTE, '/jobs/%s/archive' % job)
             # make sure it is not available anymore afterwards
@@ -5278,7 +5287,7 @@
                                 (_REMOTE, '/series/%s/archive' % kneeT2, {
                                     'Synchronous' : False
                                 }))
-                z = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
+                z, resp = GetArchive(_REMOTE, '/jobs/%s/archive' % job)
                 # delete the job itself
                 DoDelete(_REMOTE, '/jobs/%s' % job)
                 # make sure it is not available anymore afterwards (and its output is not available either)
@@ -5523,7 +5532,7 @@
         a = UploadInstance(_REMOTE, 'Issue124.dcm')['ID']
         s = DoGet(_REMOTE, '/instances/%s/series' % a)['ID']
 
-        z = GetArchive(_REMOTE, '/series/%s/media' % s)
+        z, resp = GetArchive(_REMOTE, '/series/%s/media' % s)
         self.assertEqual(2, len(z.namelist()))
 
 
@@ -6733,19 +6742,19 @@
         info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
 
         # GET on "/media"
-        z = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/media' % info['ParentPatient'])
         self.assertEqual(2, len(z.namelist()))
         self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read('IMAGES/IM0')))
 
         self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/media?transcode=nope' % info['ParentPatient']))
 
-        z = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50' % info['ParentPatient'])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50' % info['ParentPatient'])
         self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read('IMAGES/IM0')))
 
-        z = GetArchive(_REMOTE, '/studies/%s/media?transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy'])
+        z, resp = GetArchive(_REMOTE, '/studies/%s/media?transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy'])
         self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0')))
 
-        z = GetArchive(_REMOTE, '/series/%s/media?transcode=1.2.840.10008.1.2.4.57' % info['ParentSeries'])
+        z, resp = GetArchive(_REMOTE, '/series/%s/media?transcode=1.2.840.10008.1.2.4.57' % info['ParentSeries'])
         self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
 
 
@@ -6770,19 +6779,19 @@
 
         
         # GET on "/archive"
-        z = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'])
         self.assertEqual(1, len(z.namelist()))
         self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(z.read(z.namelist()[0])))
 
         self.assertRaises(Exception, lambda: DoGet(_REMOTE, '/patients/%s/archive?transcode=nope' % info['ParentPatient']))
 
-        z = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2' % info['ParentPatient'])
+        z, resp = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2' % info['ParentPatient'])
         self.assertEqual('1.2.840.10008.1.2', GetTransferSyntax(z.read(z.namelist()[0])))
 
-        z = GetArchive(_REMOTE, '/studies/%s/archive?transcode=1.2.840.10008.1.2.2' % info['ParentStudy'])
+        z, resp = GetArchive(_REMOTE, '/studies/%s/archive?transcode=1.2.840.10008.1.2.2' % info['ParentStudy'])
         self.assertEqual('1.2.840.10008.1.2.2', GetTransferSyntax(z.read(z.namelist()[0])))
 
-        z = GetArchive(_REMOTE, '/series/%s/archive?transcode=1.2.840.10008.1.2.4.70' % info['ParentSeries'])
+        z, resp = GetArchive(_REMOTE, '/series/%s/archive?transcode=1.2.840.10008.1.2.4.70' % info['ParentSeries'])
         self.assertEqual('1.2.840.10008.1.2.4.70', GetTransferSyntax(z.read(z.namelist()[0])))
 
 
@@ -6829,17 +6838,19 @@
         self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
 
         if IsOrthancVersionAbove(_REMOTE, 1, 12, 2):
-            z = GetArchive(_REMOTE, '/tools/create-archive?resources=%s&transcode=1.2.840.10008.1.2.4.50' % info['ParentStudy'])
+            z, resp = GetArchive(_REMOTE, '/tools/create-archive?resources=%s&transcode=1.2.840.10008.1.2.4.50' % info['ParentStudy'])
             self.assertEqual(1, len(z.namelist()))
             self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(z.read(z.namelist()[0])))
 
-            z = GetArchive(_REMOTE, '/tools/create-media?resources=%s&transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy'])
+            z, resp = GetArchive(_REMOTE, '/tools/create-media?resources=%s&transcode=1.2.840.10008.1.2.4.51' % info['ParentStudy'])
             self.assertEqual(2, len(z.namelist()))
             self.assertEqual('1.2.840.10008.1.2.4.51', GetTransferSyntax(z.read('IMAGES/IM0')))
 
-            z = GetArchive(_REMOTE, '/tools/create-media-extended?resources=%s&transcode=1.2.840.10008.1.2.4.57' % info['ParentStudy'])
+            z, resp = GetArchive(_REMOTE, '/tools/create-media-extended?resources=%s&transcode=1.2.840.10008.1.2.4.57&filename=toto.zip' % info['ParentStudy'])
             self.assertEqual(2, len(z.namelist()))
             self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
+            if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
+                self.assertEqual('filename="toto.zip"', resp['content-disposition'])
 
 
 
@@ -6854,6 +6865,16 @@
             self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(
                 DoGet(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50' % info['ID'])))
 
+            if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
+                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename=toto.dcm' % info['ID'])
+                self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
+
+                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50&filename=toto.dcm' % info['ID'])
+                self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
+
+                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename="toto".dcm' % info['ID'])
+                self.assertEqual('filename="\"toto\".dcm"', resp['content-disposition'])
+
 
     def test_modify_keep_source(self):
         # https://groups.google.com/d/msg/orthanc-users/CgU-Wg8vDio/BY5ZWcDEAgAJ
--- a/Tests/Toolbox.py	Wed Jan 22 13:48:10 2025 +0100
+++ b/Tests/Toolbox.py	Fri Feb 14 12:36:49 2025 +0100
@@ -240,7 +240,8 @@
         return zipfile.ZipFile(StringIO(s), "r")
 
 def GetArchive(orthanc, uri):
-    return ParseArchive(DoGet(orthanc, uri))
+    (resp, content) = DoGetRaw(orthanc, uri)
+    return ParseArchive(content), resp
 
 def PostArchive(orthanc, uri, body):
     # http://stackoverflow.com/a/1313868/881731