diff test/test_cgi.py @ 5065:47ab150b7325

Allow multiple file uploads If the html template specifies multiple="multiple" for a file upload the user can attach multiple files and the form parser now handles this.
author Ralf Schlatterbeck <rsc@runtux.com>
date Mon, 30 May 2016 17:23:35 +0200
parents 364c54991861
children e424987d294a
line wrap: on
line diff
--- a/test/test_cgi.py	Tue May 10 16:27:45 2016 +0200
+++ b/test/test_cgi.py	Mon May 30 17:23:35 2016 +0200
@@ -25,6 +25,14 @@
         self.content = content
         self.filename = filename
 
+class FileList:
+    def __init__(self, name, *files):
+        self.name  = name
+        self.files = files
+    def items (self):
+        for f in self.files:
+            yield (self.name, f)
+
 def makeForm(args):
     form = cgi.FieldStorage()
     for k,v in args.items():
@@ -263,6 +271,33 @@
             ({('file', None): {'content': 'foo', 'name': 'foo.txt',
             'type': 'text/plain'}}, []))
 
+    def testSingleFileUpload(self):
+        file = FileUpload('foo', 'foo.txt')
+        self.assertEqual(self.parseForm({'@file': file}, 'issue'),
+            ({('file', '-1'): {'content': 'foo', 'name': 'foo.txt',
+            'type': 'text/plain'},
+              ('issue', None): {}},
+             [('issue', None, 'files', [('file', '-1')])]))
+
+    def testMultipleFileUpload(self):
+        f1 = FileUpload('foo', 'foo.txt')
+        f2 = FileUpload('bar', 'bar.txt')
+        f3 = FileUpload('baz', 'baz.txt')
+        files = FileList('@file', f1, f2, f3)
+
+        self.assertEqual(self.parseForm(files, 'issue'),
+            ({('file', '-1'): {'content': 'foo', 'name': 'foo.txt',
+               'type': 'text/plain'},
+              ('file', '-2'): {'content': 'bar', 'name': 'bar.txt',
+               'type': 'text/plain'},
+              ('file', '-3'): {'content': 'baz', 'name': 'baz.txt',
+               'type': 'text/plain'},
+              ('issue', None): {}},
+             [ ('issue', None, 'files', [('file', '-1')])
+             , ('issue', None, 'files', [('file', '-2')])
+             , ('issue', None, 'files', [('file', '-3')])
+             ]))
+
     def testEditFileClassAttributes(self):
         self.assertEqual(self.parseForm({'name': 'foo.txt',
                                          'type': 'application/octet-stream'},

Roundup Issue Tracker: http://roundup-tracker.org/