def test_post_existing(): """ testing posting an existing tiddler to check that it is overwritten """ #setup setup(store) tiddler = Tiddler('i exist','jon_private') tiddler.fields['geo.lat'] = '20' tiddler.fields['geo.long'] = '2' tiddler.text = 'data' tiddler.tags = ['a', 'b'] store.put(tiddler) #run mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'i exist', 'body': 'wipeout' }) #verify tiddler = store.get(Tiddler('i exist', 'jon_private')) assert tiddler.text == 'wipeout' assert tiddler.fields.get('geo.lat') == None
def test_post_new(): """ testing posting a new tiddler to tiddlyweb via email and that a reply to the response doesn't overwrite that tiddler """ #setup setup(store) #run email = mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'Jons brand spanking new tiddler', 'body': 'I love email tiddlyweb' }) #verify try: tiddler = Tiddler('Jons brand spanking new tiddler', 'jon_private') tiddler = store.get(tiddler) except NoTiddlerError: raise AssertionError('Tiddler has not been put into store') assert tiddler.text == 'I love email tiddlyweb' assert tiddler.tags == [] assert email['from'] == '*****@*****.**' assert email['to'] == '*****@*****.**' assert email['subject'] == 'Jons brand spanking new tiddler' #check a reply doesn't overwrite the tiddler reply = { 'subject': 'RE: Jons brand spanking new tiddler', 'from': '*****@*****.**', 'to': '*****@*****.**', 'body': 'thanks tiddlyweb!' } #run email = mailer.handle_email(reply) #verify tiddler = Tiddler('Jons brand spanking new tiddler', 'jon_private') tiddler = store.get(tiddler) assert tiddler.text == 'I love email tiddlyweb' assert email == { 'body': 'I love email tiddlyweb', 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'Jons brand spanking new tiddler' }
def mail_agent(args): print "booting up mail agent" pigscantfly = True try: settings = config['mailer'] except KeyError: print "mail agent failed to start: add to your config 'mailer':{'host':'','username':'','password':''}" return server =settings["pop"] user =settings["username"] password =settings["password"] while pigscantfly: print "logging %s into %s"%(user,server) try: session = poplib.POP3(server) session.user(user) session.pass_(password) except Exception,e: print "failed to start mail agent. Will try again in 30s." time.sleep(5) return mail_agent(args) print "logged into mail agent" numMessages = len(session.list()[1]) print "there are %s new messages"%numMessages for i in range(1,numMessages+1): print "ooohh a message!! :D :D :D" raw_email = session.retr(i)[1] email_string = "" for el in raw_email: email_string += el email_string += "\n" msg = emailpy.message_from_string(email_string) email = {"from":msg["From"],"to":msg["To"],"subject":msg["Subject"]} body = msg.get_payload() if type(body) == type([]): body = body[0].as_string() try: body.index("\n\n") body = body[body.index("\n\n"):] except ValueError: body = body email["body"]= body try: mailer.handle_email(email) session.dele(i) except Exception,e: print "error %s"%e pass
def test_view_tiddlers(): """ test a request for viewing all tiddlers in a bag """ #setup setup(store) tiddler = Tiddler('one', 'jon_private') store.put(tiddler) tiddler = Tiddler('two', 'jon_private') store.put(tiddler) tiddler = Tiddler('three', 'jon_private') store.put(tiddler) tiddler = Tiddler('four', 'jon_private') store.put(tiddler) #run email = mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': '', 'body': '' }) #verify assert email['to'] == '*****@*****.**' body = email['body'].splitlines() assert body.pop(0) == 'The following tiddlers are in jon.tiddlyspace.com:' assert len(body) == 4 for tiddler_name in body: assert tiddler_name in ['one', 'two', 'three', 'four']
def test_view(): """ test a request for viewing a single tiddler """ #setup setup(store) tiddler = Tiddler('GettingStarted', 'jon_private') tiddler.text = 'the cat jumped over the moon' tiddler.tags = ['hello', 'world'] store.put(tiddler) #run email = mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'GettingStarted', 'body': '' }) #verify assert email == { 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'GettingStarted', 'body': 'the cat jumped over the moon' }
def test_posting_of_tags(): """ overwriting a tiddler with tags with a tiddler with a different set of tags via email """ #setup setup(store) tiddler = Tiddler('Hey there', 'ben_private') tiddler.tags = ['rainbows', 'colourful'] store.put(tiddler) #run mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'Hey there', 'body': 'tiddler text' }) #verify tiddler = Tiddler('Hey there', 'ben_private') tiddler = store.get(tiddler) assert tiddler.tags == ['foo', 'bar', 'baz']
def test_view_reply(): """ test a request for viewing based on a reply to a previous response ie - the subject has an RE: in it. """ #setup setup(store) tiddler = Tiddler('GettingStarted', 'ben_private') tiddler.text = 'The quick brown fox jumped over the lazy dog' store.put(tiddler) #run email = mailer.handle_email({ 'to': '*****@*****.**', 'from': '*****@*****.**', 'subject': 'RE: GettingStarted', 'body': '' }) #verify assert email['to'] == '*****@*****.**' assert email['from'] == '*****@*****.**' assert email['subject'] == 'GettingStarted' assert email['body'] == 'The quick brown fox jumped over the lazy dog'
def test_subscribe(): # setup setup(store) empty = Tiddler("bags/osmosoft_private/empty", "subscriptions.daily") empty.text = """ [email protected] [email protected] """ store.put(empty) # run email = mailer.handle_email( {"to": "*****@*****.**", "from": "*****@*****.**", "subject": "", "body": ""} ) # verify tid = store.get(Tiddler("bags/osmosoft_private/tiddlers", "subscriptions.daily")) assert tid.text == "*****@*****.**" email = mailer.handle_email( {"to": "*****@*****.**", "from": "*****@*****.**", "subject": "", "body": ""} ) email = mailer.handle_email( {"to": "*****@*****.**", "from": "*****@*****.**", "subject": "", "body": ""} ) tid = store.get(Tiddler("bags/osmosoft_private/tiddlers", "subscriptions.daily")) lines = tid.text.splitlines() assert len(lines) == 3 for i in [u"*****@*****.**", u"*****@*****.**", u"*****@*****.**"]: assert i in lines email = mailer.handle_email( {"to": "*****@*****.**", "from": "*****@*****.**", "subject": "", "body": ""} ) email = mailer.handle_email( {"to": "*****@*****.**", "from": "*****@*****.**", "subject": "", "body": ""} ) tid = store.get(Tiddler("bags/osmosoft_private/tiddlers", "subscriptions.daily")) lines = tid.text.splitlines() email = mailer.make_digest_email(tid, environ) bcc = email["bcc"] assert len(bcc) == 2 assert len(lines) == 2 assert email["from"] == "*****@*****.**" for i in [u"*****@*****.**", u"*****@*****.**"]: assert i in lines assert i in bcc twhost = environ["tiddlyweb.config"]["server_host"]["host"] expected = ( u"""note you can subscribe to this feed via atom feed <%s/test/bags/osmosoft_private/tiddlers.atom> The meaning of life <http://monty.tiddlyspace.com/meaninglife> The knights that go.. Life of Brian <http://monty.tiddlyspace.com/lifeofbrian> He's been a very naughty boy. """ % twhost ) print "###########" assert email["body"] == expected expected = ( u'<html><div>note you can <a href="%s/test/bags/osmosoft_private/tiddlers.atom">subscribe to this feed via atom feed</a></div><div><a href="http://monty.tiddlyspace.com/meaninglife"><h1>The meaning of life</h1></a>The knights that go..</div><div><a href="http://monty.tiddlyspace.com/lifeofbrian"><h1>Life of Brian</h1></a>He\'s been a very naughty boy.</div></html>' % twhost ) assert email["bodyhtml"] == expected assert email["subject"] == u"Email Digest: Tiddlers in bag for testing purposes" tid = store.get(tid) assert "last_generated" in tid.fields global totalsent totalsent = 0 def new_sendmail(email): global totalsent print "sending as part of make_digest_email test" totalsent += 1 dummymailer.send_email = new_sendmail dummymailer.make_digest(["subscriptions.daily"]) assert ( totalsent is 1 ) # one email is sent with all the email addresses blind carbon copied. osmosoft_private/empty is empty so wont cause emails tid = store.get(Tiddler("bags/osmosoft_private/empty", "subscriptions.daily")) email = dummymailer.make_digest_email( tid, environ ) # now since there was no changes to the store you would expect no email assert email is False assert "last_generated" not in tid.fields # havent sent one yet