diff --git a/test/test_mailgw.py b/test/test_mailgw.py
index b35f3567b374e9393fdfa9df1c2511eed2fd2314..78eef48094cd7ebfa9e6638777b96dddfc91e9c8 100644 (file)
--- a/test/test_mailgw.py
+++ b/test/test_mailgw.py
from roundup import init, instance, password, rfc2822, __version__
from roundup.anypy.sets_ import set
-import db_test_base
+#import db_test_base
+import memorydb
class Message(rfc822.Message):
"""String-based Message class with equivalence test."""
return (self.dict == other.dict and
self.fp.read() == other.fp.read())
+class Tracker(object):
+ def open(self, journaltag):
+ return self.db
+
class DiffHelper:
def compareMessages(self, new, old):
"""Compare messages for semantic equivalence."""
res.extend(body_diff)
if res:
- res.insert(0, 'Generated message not correct (diff follows):')
+ res.insert(0, 'Generated message not correct (diff follows, expected vs. actual):')
raise AssertionError, '\n'.join(res)
def compareStrings(self, s2, s1, replace={}):
schema = 'classic'
def setUp(self):
MailgwTestCase.count = MailgwTestCase.count + 1
- self.dirname = '_test_mailgw_%s'%self.count
- # set up and open a tracker
- self.instance = db_test_base.setupTracker(self.dirname)
- # and open the database
- self.db = self.instance.open('admin')
+ # and open the database / "instance"
+ self.db = memorydb.create('admin')
+ self.instance = Tracker()
+ self.instance.db = self.db
+ self.instance.config = self.db.config
+ self.instance.MailGW = MailGW
+
self.chef_id = self.db.user.create(username='Chef',
address='chef@bork.bork.bork', realname='Bork, Chef', roles='User')
self.richard_id = self.db.user.create(username='richard',
if os.path.exists(SENDMAILDEBUG):
os.remove(SENDMAILDEBUG)
self.db.close()
- try:
- shutil.rmtree(self.dirname)
- except OSError, error:
- if error.errno not in (errno.ENOENT, errno.ESRCH): raise
+
+ def _create_mailgw(self, message):
+ class MailGW(self.instance.MailGW):
+ def handle_message(self, message):
+ return self._handle_message(message)
+ handler = MailGW(self.instance)
+ handler.db = self.db
+ return handler
def _handle_mail(self, message):
- # handler will open a new db handle. On single-threaded
- # databases we'll have to close our current connection
- self.db.commit()
- self.db.close()
- handler = self.instance.MailGW(self.instance)
+ handler = self._create_mailgw(message)
handler.trapExceptions = 0
- ret = handler.main(StringIO(message))
- # handler had its own database, open new connection
- self.db = self.instance.open('admin')
- return ret
+ return handler.main(StringIO(message))
def _get_mail(self):
f = open(SENDMAILDEBUG)
assert not os.path.exists(SENDMAILDEBUG)
self.assertEqual(self.db.issue.get(nodeid, 'title'), 'Testing...')
+ def testMessageWithFromInIt(self):
+ nodeid = self._handle_mail('''Content-Type: text/plain;
+ charset="iso-8859-1"
+From: Chef <chef@bork.bork.bork>
+To: issue_tracker@your.tracker.email.domain.example
+Cc: richard@test.test
+Reply-To: chef@bork.bork.bork
+Message-Id: <dummy_test_message_id>
+Subject: [issue] Testing...
+
+From here to there!
+''')
+ assert not os.path.exists(SENDMAILDEBUG)
+ msgid = self.db.issue.get(nodeid, 'messages')[0]
+ self.assertEqual(self.db.msg.get(msgid, 'content'), 'From here to there!')
+
def doNewIssue(self):
nodeid = self._handle_mail('''Content-Type: text/plain;
charset="iso-8859-1"
Subject: [issue1] Testing...
To: chef@bork.bork.bork, mary@test.test, richard@test.test
From: "Bork, Chef" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <dummy_test_message_id>
X-Roundup-Name: Roundup issue tracker
Subject: [issue1] Testing...
To: mary@test.test, richard@test.test
From: "Bork, Chef" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <dummy_test_message_id>
X-Roundup-Name: Roundup issue tracker
Subject: [issue1] Testing...
To: mary@test.test, richard@test.test
From: "Bork, Chef" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <dummy_test_message_id>
X-Roundup-Name: Roundup issue tracker
Subject: [issue1] Testing...
To: chef@bork.bork.bork, richard@test.test
From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, john@test.test, mary@test.test
From: richard <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue1>
_______________________________________________________________________
+''')
+
+ def testNosyGeneration(self):
+ self.db.issue.create(title='test')
+
+ # create a nosy message
+ msg = self.db.msg.create(content='This is a test',
+ author=self.richard_id, messageid='<dummy_test_message_id>')
+ self.db.journaltag = 'richard'
+ l = self.db.issue.create(title='test', messages=[msg],
+ nosy=[self.chef_id, self.mary_id, self.john_id])
+
+ self.compareMessages(self._get_mail(),
+'''FROM: roundup-admin@your.tracker.email.domain.example
+TO: chef@bork.bork.bork, john@test.test, mary@test.test
+Content-Type: text/plain; charset="utf-8"
+Subject: [issue2] test
+To: chef@bork.bork.bork, john@test.test, mary@test.test
+From: richard <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
+MIME-Version: 1.0
+Message-Id: <dummy_test_message_id>
+X-Roundup-Name: Roundup issue tracker
+X-Roundup-Loop: hello
+X-Roundup-Issue-Status: unread
+Content-Transfer-Encoding: quoted-printable
+
+
+New submission from richard <richard@test.test>:
+
+This is a test
+
+----------
+messages: 1
+nosy: Chef, john, mary, richard
+status: unread
+title: test
+
+_______________________________________________________________________
+Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+<http://tracker.example/cgi-bin/roundup.cgi/bugs/issue2>
+_______________________________________________________________________
''')
def testPropertyChangeOnly(self):
# reconstruct old behaviour: This would reuse the
# database-handle from the doNewIssue above which has committed
# as user "Chef". So we close and reopen the db as that user.
- self.db.close()
+ #self.db.close() actually don't close 'cos this empties memorydb
self.db = self.instance.open('Chef')
self.db.issue.set('1', assignedto=self.chef_id)
self.db.commit()
X-Roundup-Loop: hello
X-Roundup-Issue-Status: unread
X-Roundup-Version: 1.3.3
+In-Reply-To: <dummy_test_message_id>
MIME-Version: 1.0
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
Content-Transfer-Encoding: quoted-printable
Subject: [issue1] Testing...
To: chef@bork.bork.bork, john@test.test, mary@test.test
From: richard <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, richard@test.test
From: John Doe <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork
From: richard <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, john@test.test, richard@test.test
From: John Doe <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, richard@test.test
From: John Doe <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork
From: richard <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
assert not os.path.exists(SENDMAILDEBUG)
def testNewUserAuthor(self):
-
+ self.db.commit()
l = self.db.user.list()
l.sort()
message = '''Content-Type: text/plain;
This is a test submission of a new issue.
'''
- def hook (db, **kw):
- ''' set up callback for db open '''
- db.security.role['anonymous'].permissions=[]
- anonid = db.user.lookup('anonymous')
- db.user.set(anonid, roles='Anonymous')
- self.instance.schema_hook = hook
+ self.db.security.role['anonymous'].permissions=[]
+ anonid = self.db.user.lookup('anonymous')
+ self.db.user.set(anonid, roles='Anonymous')
try:
self._handle_mail(message)
except Unauthorized, value:
Unknown address: fubar@bork.bork.bork
""")
-
assert not body_diff, body_diff
-
else:
raise AssertionError, "Unathorized not raised when handling mail"
-
- def hook (db, **kw):
- ''' set up callback for db open '''
- # Add Web Access role to anonymous, and try again to make sure
- # we get a "please register at:" message this time.
- p = [
- db.security.getPermission('Register', 'user'),
- db.security.getPermission('Web Access', None),
- ]
- db.security.role['anonymous'].permissions=p
- self.instance.schema_hook = hook
+ # Add Web Access role to anonymous, and try again to make sure
+ # we get a "please register at:" message this time.
+ p = [
+ self.db.security.getPermission('Register', 'user'),
+ self.db.security.getPermission('Web Access', None),
+ ]
+ self.db.security.role['anonymous'].permissions=p
try:
self._handle_mail(message)
except Unauthorized, value:
Unknown address: fubar@bork.bork.bork
""")
-
assert not body_diff, body_diff
-
else:
raise AssertionError, "Unathorized not raised when handling mail"
m.sort()
self.assertEqual(l, m)
- def hook (db, **kw):
- ''' set up callback for db open '''
- # now with the permission
- p = [
- db.security.getPermission('Register', 'user'),
- db.security.getPermission('Email Access', None),
- ]
- db.security.role['anonymous'].permissions=p
- self.instance.schema_hook = hook
+ # now with the permission
+ p = [
+ self.db.security.getPermission('Register', 'user'),
+ self.db.security.getPermission('Email Access', None),
+ ]
+ self.db.security.role['anonymous'].permissions=p
self._handle_mail(message)
m = self.db.user.list()
m.sort()
This is a test submission of a new issue.
'''
- def hook (db, **kw):
- ''' set up callback for db open '''
- p = [
- db.security.getPermission('Register', 'user'),
- db.security.getPermission('Email Access', None),
- db.security.getPermission('Create', 'issue'),
- db.security.getPermission('Create', 'msg'),
- ]
- db.security.role['anonymous'].permissions = p
- self.instance.schema_hook = hook
+ p = [
+ self.db.security.getPermission('Register', 'user'),
+ self.db.security.getPermission('Email Access', None),
+ self.db.security.getPermission('Create', 'issue'),
+ self.db.security.getPermission('Create', 'msg'),
+ ]
+ self.db.security.role['anonymous'].permissions = p
self._handle_mail(message)
m = set(self.db.user.list())
new = list(m - l)[0]
This is a test submission of a new issue.
'''
- self.db.close()
- handler = self.instance.MailGW(self.instance)
+ handler = self._create_mailgw(message)
# we want a bounce message:
handler.trapExceptions = 1
ret = handler.main(StringIO(message))
To: chef@bork.bork.bork, richard@test.test
From: =?utf-8?b?w6TDtsO8w4TDlsOcw58sIE1hcnk=?=
<issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, richard@test.test
From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork, richard@test.test
From: "Contrary, Mary" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
Subject: [issue1] Testing...
To: chef@bork.bork.bork
From: richard <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
Message-Id: <followup_dummy_id>
In-Reply-To: <dummy_test_message_id>
charset="iso-8859-1"
From: Chef <chef@bork.bork.bork>
To: issue_tracker@your.tracker.email.domain.example
-Message-Id: <dummy_test_message_id>
+Message-Id: <dummy_test_message_id_2>
Subject: [issue%(id)s] Testing... [nosy=+mary]
Just a test reply
Subject: [issue1] Testing...
To: richard@test.test
From: "Bork, Chef" <issue_tracker@your.tracker.email.domain.example>
-Reply-To: Roundup issue tracker <issue_tracker@your.tracker.email.domain.example>
+Reply-To: Roundup issue tracker
+ <issue_tracker@your.tracker.email.domain.example>
MIME-Version: 1.0
-Message-Id: <dummy_test_message_id>
+Message-Id: <dummy_test_message_id_2>
+In-Reply-To: <dummy_test_message_id>
X-Roundup-Name: Roundup issue tracker
X-Roundup-Loop: hello
X-Roundup-Issue-Status: chatting