Code

Yet another fix to the mail gateway, messages got *all* files of
[roundup.git] / test / test_mailgw.py
index 0d698b6f6221d08ad00716d08ed1be658a5e702c..fa72040e6ae9658427e607e4b845e7beedffaf50 100644 (file)
@@ -268,10 +268,11 @@ From: Chef <chef@bork.bork.bork>
 To: issue_tracker@your.tracker.email.domain.example
 Message-Id: <dummy_test_message_id>
 Reply-To: chef@bork.bork.bork
-Subject: [issue] Testing...
+Subject: [issue] Testing... [status=chatting;priority=critical]
 
 Hi there!
 ''', (('-c', 'issue'),))
+        self.assertEqual(self.db.issue.get(nodeid, 'title'), 'Testing...')
         self.assertEqual(self.db.issue.get(nodeid, 'status'), '3')
         self.assertEqual(self.db.issue.get(nodeid, 'priority'), '1')
 
@@ -624,6 +625,68 @@ some text in inner email
                 self.assertEqual(f.content, content [n])
         self.assertEqual(msg.content, 'test attachment second text/plain')
 
+    def testMultipartSeveralAttachmentMessages(self):
+        self.doNewIssue()
+        self._handle_mail(self.multipart_msg)
+        messages = self.db.issue.get('1', 'messages')
+        messages.sort()
+        self.assertEqual(messages[-1], '2')
+        msg = self.db.msg.getnode (messages[-1])
+        self.assertEqual(len(msg.files), 5)
+        issue = self.db.issue.getnode ('1')
+        self.assertEqual(len(issue.files), 5)
+        names = {0 : 'first.dvi', 4 : 'second.dvi'}
+        content = {3 : 'test attachment third text/plain\n',
+                   4 : 'Just a test\n'}
+        for n, id in enumerate (msg.files):
+            f = self.db.file.getnode (id)
+            self.assertEqual(f.name, names.get (n, 'unnamed'))
+            if n in content :
+                self.assertEqual(f.content, content [n])
+        self.assertEqual(msg.content, 'test attachment second text/plain')
+        self.assertEqual(msg.files, ['1', '2', '3', '4', '5'])
+        self.assertEqual(issue.files, ['1', '2', '3', '4', '5'])
+
+        self._handle_mail(self.multipart_msg)
+        issue = self.db.issue.getnode ('1')
+        self.assertEqual(len(issue.files), 10)
+        messages = self.db.issue.get('1', 'messages')
+        messages.sort()
+        self.assertEqual(messages[-1], '3')
+        msg = self.db.msg.getnode (messages[-1])
+        self.assertEqual(issue.files, [str(i+1) for i in range(10)])
+        self.assertEqual(msg.files, ['6', '7', '8', '9', '10'])
+
+    def testMultipartKeepFiles(self):
+        self.doNewIssue()
+        self._handle_mail(self.multipart_msg)
+        messages = self.db.issue.get('1', 'messages')
+        messages.sort()
+        msg = self.db.msg.getnode (messages[-1])
+        self.assertEqual(len(msg.files), 5)
+        issue = self.db.issue.getnode ('1')
+        self.assertEqual(len(issue.files), 5)
+        names = {0 : 'first.dvi', 4 : 'second.dvi'}
+        content = {3 : 'test attachment third text/plain\n',
+                   4 : 'Just a test\n'}
+        for n, id in enumerate (msg.files):
+            f = self.db.file.getnode (id)
+            self.assertEqual(f.name, names.get (n, 'unnamed'))
+            if n in content :
+                self.assertEqual(f.content, content [n])
+        self.assertEqual(msg.content, 'test attachment second text/plain')
+        self._handle_mail('''From: mary <mary@test.test>
+To: issue_tracker@your.tracker.email.domain.example
+Message-Id: <followup_dummy_id2>
+In-Reply-To: <dummy_test_message_id>
+Subject: [issue1] Testing...
+
+This ist a message without attachment
+''')
+        issue = self.db.issue.getnode ('1')
+        self.assertEqual(len(issue.files), 5)
+        self.assertEqual(issue.files, ['1', '2', '3', '4', '5'])
+
     def testMultipartDropAlternatives(self):
         self.doNewIssue()
         self.db.config.MAILGW_IGNORE_ALTERNATIVES = True
@@ -631,7 +694,7 @@ some text in inner email
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 2)
+        self.assertEqual(len(msg.files), 2)
         names = {1 : 'second.dvi'}
         content = {0 : 'test attachment third text/plain\n',
                    1 : 'Just a test\n'}
@@ -650,7 +713,7 @@ some text in inner email
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 1)
+        self.assertEqual(len(msg.files), 1)
         name = 'unnamed'
         content = '<html>' + c + '</html>\n'
         for n, id in enumerate (msg.files):
@@ -701,7 +764,7 @@ _______________________________________________________________________
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 1)
+        self.assertEqual(len(msg.files), 1)
         name = 'unnamed'
         content = '<html>' + c + '</html>\n'
         for n, id in enumerate (msg.files):
@@ -750,7 +813,7 @@ _______________________________________________________________________
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 1)
+        self.assertEqual(len(msg.files), 1)
         name = 'unnamed'
         content = '<html>' + c + '</html>\n'
         for n, id in enumerate (msg.files):
@@ -814,7 +877,7 @@ PGh0bWw+dW1sYXV0IMOkw7bDvMOEw5bDnMOfPC9odG1sPgo=
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 1)
+        self.assertEqual(len(msg.files), 1)
         name = 'unnamed'
         content = '<html>' + c + '</html>\n'
         for n, id in enumerate (msg.files):
@@ -876,7 +939,7 @@ PGh0bWw+dW1sYXV0IMOkw7bDvMOEw5bDnMOfPC9odG1sPgo=
         messages = self.db.issue.get('1', 'messages')
         messages.sort()
         msg = self.db.msg.getnode (messages[-1])
-        assert(len(msg.files) == 1)
+        self.assertEqual(len(msg.files), 1)
         name = "Fwd: Original email subject.eml"
         for n, id in enumerate (msg.files):
             f = self.db.file.getnode (id)