Code

extended date syntax to make range searches even more useful
[roundup.git] / test / test_mailgw.py
index 5fed0029dc83f2217b1a48cad58741b589f7f589..138059bafc64a083a9285da2ba8c7c9a83b9b69d 100644 (file)
@@ -8,9 +8,10 @@
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 #
-# $Id: test_mailgw.py,v 1.38 2003-01-15 22:17:20 kedder Exp $
+# $Id: test_mailgw.py,v 1.44 2003-04-17 06:51:44 richard Exp $
 
 import unittest, cStringIO, tempfile, os, shutil, errno, imp, sys, difflib
+import rfc822
 
 # Note: Should parse emails according to RFC2822 instead of performing a
 # literal string comparision.  Parsing the messages allows the tests to work for
@@ -20,7 +21,7 @@ import unittest, cStringIO, tempfile, os, shutil, errno, imp, sys, difflib
 #except ImportError :
 #    import rfc822 as email
 
-from roundup.mailgw import MailGW, Unauthorized
+from roundup.mailgw import MailGW, Unauthorized, uidFromAddress
 from roundup import init, instance
 
 # TODO: make this output only enough equal lines for context, not all of
@@ -68,7 +69,8 @@ class MailgwTestCase(unittest.TestCase, DiffHelper):
         except OSError, error:
             if error.errno not in (errno.ENOENT, errno.ESRCH): raise
         # create the instance
-        init.install(self.dirname, 'classic', 'anydbm')
+        init.install(self.dirname, 'templates/classic')
+        init.write_select_db(self.dirname, 'anydbm')
         init.initialise(self.dirname, 'sekrit')
         # check we can load the package
         self.instance = instance.open(self.dirname)
@@ -213,7 +215,6 @@ New submission from Bork, Chef <chef@bork.bork.bork>:
 
 This is a test submission of a new issue.
 
-
 ----------
 assignedto: richard
 messages: 1
@@ -222,7 +223,7 @@ status: unread
 title: Testing...
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -270,12 +271,11 @@ Contrary, Mary <mary@test> added the comment:
 
 This is a second followup
 
-
 ----------
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -319,14 +319,13 @@ richard <richard@test> added the comment:
 
 This is a followup
 
-
 ----------
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -366,14 +365,13 @@ richard <richard@test> added the comment:
 
 This is a followup
 
-
 ----------
 assignedto:  -> mary
 nosy: +john, mary
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -414,13 +412,12 @@ John Doe <john@test> added the comment:
 
 This is a followup
 
-
 ----------
 nosy: +john
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 
 ''')
@@ -463,13 +460,12 @@ richard <richard@test> added the comment:
 
 This is a followup
 
-
 ----------
 nosy: +john
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 
 ''')
@@ -512,13 +508,12 @@ John Doe <john@test> added the comment:
 
 This is a followup
 
-
 ----------
 nosy: +john
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 
 ''')
@@ -560,12 +555,11 @@ John Doe <john@test> added the comment:
 
 This is a followup
 
-
 ----------
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 
 ''')
@@ -608,16 +602,37 @@ richard <richard@test> added the comment:
 
 This is a followup
 
-
 ----------
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 
 ''')
 
+    def testFollowupEmptyMessage(self):
+        self.doNewIssue()
+
+        message = cStringIO.StringIO('''Content-Type: text/plain;
+  charset="iso-8859-1"
+From: richard <richard@test>
+To: issue_tracker@your.tracker.email.domain.example
+Message-Id: <followup_dummy_id>
+In-Reply-To: <dummy_test_message_id>
+Subject: [issue1] Testing... [assignedto=mary; nosy=+john]
+
+''')
+        handler = self.instance.MailGW(self.instance, self.db)
+        handler.trapExceptions = 0
+        handler.main(message)
+        l = self.db.issue.get('1', 'nosy')
+        l.sort()
+        self.assertEqual(l, ['3', '4', '5', '6'])
+
+        # should be no file created (ie. no message)
+        assert not os.path.exists(os.environ['SENDMAILDEBUG'])
+
     def testNosyRemove(self):
         self.doNewIssue()
 
@@ -643,7 +658,7 @@ Subject: [issue1] Testing... [nosy=-richard]
     def testNewUserAuthor(self):
         # first without the permission
         # heh... just ignore the API for a second ;)
-        self.db.security.role['Anonymous'].permissions=[]
+        self.db.security.role['anonymous'].permissions=[]
         anonid = self.db.user.lookup('anonymous')
         self.db.user.set(anonid, roles='Anonymous')
 
@@ -669,7 +684,7 @@ This is a test submission of a new issue.
 
         # now with the permission
         p = self.db.security.getPermission('Email Registration')
-        self.db.security.role['Anonymous'].permissions=[p]
+        self.db.security.role['anonymous'].permissions=[p]
         handler = self.instance.MailGW(self.instance, self.db)
         handler.trapExceptions = 0
         message = cStringIO.StringIO(s)
@@ -721,7 +736,7 @@ A message with encoding (encoded oe =C3=B6)
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -776,10 +791,45 @@ A message with first part encoded (encoded oe =C3=B6)
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
+    def testContentDisposition(self):
+        self.doNewIssue()
+        message = cStringIO.StringIO('''Content-Type: text/plain;
+  charset="iso-8859-1"
+From: mary <mary@test>
+To: issue_tracker@your.tracker.email.domain.example
+Message-Id: <followup_dummy_id>
+In-Reply-To: <dummy_test_message_id>
+Subject: [issue1] Testing...
+Content-Type: multipart/mixed; boundary="bCsyhTFzCvuiizWE" 
+Content-Disposition: inline 
+--bCsyhTFzCvuiizWE 
+Content-Type: text/plain; charset=us-ascii 
+Content-Disposition: inline 
+
+test attachment binary 
+
+--bCsyhTFzCvuiizWE 
+Content-Type: application/octet-stream 
+Content-Disposition: attachment; filename="main.dvi" 
+
+xxxxxx 
+
+--bCsyhTFzCvuiizWE--
+''')
+        handler = self.instance.MailGW(self.instance, self.db)
+        handler.trapExceptions = 0
+        handler.main(message)
+        messages = self.db.issue.get('1', 'messages')
+        messages.sort()
+        file = self.db.msg.get(messages[-1], 'files')[0]
+        self.assertEqual(self.db.file.get(file, 'name'), 'main.dvi')
+
     def testFollowupStupidQuoting(self):
         self.doNewIssue()
 
@@ -817,12 +867,11 @@ richard <richard@test> added the comment:
 
 This is a followup
 
-
 ----------
 status: unread -> chatting
 _______________________________________________________________________
 Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
-http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
 _______________________________________________________________________
 ''')
 
@@ -873,6 +922,18 @@ This is a followup
 
         self.compareStrings(self.db.msg.get(messageid, 'content'), expect)
 
+    def testUserLookup(self):
+        i = self.db.user.create(username='user1', address='user1@foo.com')
+        self.assertEqual(uidFromAddress(self.db, ('', 'user1@foo.com'), 0), i)
+        self.assertEqual(uidFromAddress(self.db, ('', 'USER1@foo.com'), 0), i)
+        i = self.db.user.create(username='user2', address='USER2@foo.com')
+        self.assertEqual(uidFromAddress(self.db, ('', 'USER2@foo.com'), 0), i)
+        self.assertEqual(uidFromAddress(self.db, ('', 'user2@foo.com'), 0), i)
+
+    def testUserCreate(self):
+        i = uidFromAddress(self.db, ('', 'user@foo.com'), 1)
+        self.assertNotEqual(uidFromAddress(self.db, ('', 'user@bar.com'), 1), i)
+
 def suite():
     l = [unittest.makeSuite(MailgwTestCase),
     ]