def test_update_smsAddress(self):
        'Make sure that updating smsAddresses works'
        url = self.get_url('user_update')
        db.query(SMSAddress).delete()
        userSID, userSCode, userSEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userS['username']).first()
        userAID, userACode, userAEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userA['username']).first()
        userIID, userICode, userIEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userI['username']).first()

        imapServer = sms.connect(self.router.registry.settings)
        # Register an invalid email address
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom=''))
        # Register using an invalid userID or userCode
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (-1, userSCode), fromWhom='sms_' + userSEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, -1), fromWhom='sms_' + userSEmail))
        # Register three email addresses
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom='sms_' + userSEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userAID, userACode), fromWhom='sms_' + userAEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userIID, userICode), fromWhom='sms_' + userIEmail))
        # Register an address that already exists for the given user
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom='sms_' + userSEmail))
        # Remove an email address
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (0, 'xxx'), fromWhom='sms_' + userSEmail))
        # Process
        sms.process(self.router.registry.settings)
        # Make sure we only have two registered SMS address
        self.assertEqual(2, db.query(SMSAddress).count())
        smsAddressA = db.query(SMSAddress).filter_by(user_id=userAID).first()
        smsAddressI = db.query(SMSAddress).filter_by(user_id=userIID).first()

        # Get token
        self.login(self.userI)
        token = get_token(self.get(url).unicode_body)

        params = ReplaceableDict(token=token, smsAddressAction='activate', smsAddressID=smsAddressI.id)
        # Activate an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Activate an smsAddress
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress.is_active).filter_by(user_id=userIID).first()[0], True)

        params = ReplaceableDict(token=token, smsAddressAction='deactivate', smsAddressID=smsAddressI.id)
        # Deactivate an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Deactivate an smsAddress
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress.is_active).filter_by(user_id=userIID).first()[0], False)

        params = ReplaceableDict(token=token, smsAddressAction='remove', smsAddressID=smsAddressI.id)
        # Remove an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Remove an smsAddress that does belong to the user
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress).filter_by(id=smsAddressI.id).count(), 0)

        params = ReplaceableDict(token=token)
        # Send an invalid command
        self.assert_json(self.post(url, params.replace(smsAddressAction='')), 0)
        self.assert_json(self.post(url, params.replace(smsAddressAction='xxx')), 0)
Example #2
0
    def test_update_smsAddress(self):
        'Make sure that updating smsAddresses works'
        url = self.get_url('user_update')
        db.query(SMSAddress).delete()
        userSID, userSCode, userSEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userS['username']).first()
        userAID, userACode, userAEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userA['username']).first()
        userIID, userICode, userIEmail = db.query(User.id, User.code, User.email).filter_by(username=self.userI['username']).first()

        imapServer = sms.connect(self.router.registry.settings)
        # Register an invalid email address
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom=''))
        # Register using an invalid userID or userCode
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (-1, userSCode), fromWhom='sms_' + userSEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, -1), fromWhom='sms_' + userSEmail))
        # Register three email addresses
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom='sms_' + userSEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userAID, userACode), fromWhom='sms_' + userAEmail))
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userIID, userICode), fromWhom='sms_' + userIEmail))
        # Register an address that already exists for the given user
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (userSID, userSCode), fromWhom='sms_' + userSEmail))
        # Remove an email address
        imapServer.revive('inbox', imapIO.build_message(subject='%s-%s' % (0, 'xxx'), fromWhom='sms_' + userSEmail))
        # Process
        sms.process(self.router.registry.settings)
        # Make sure we only have two registered SMS address
        self.assertEqual(2, db.query(SMSAddress).count())
        smsAddressA = db.query(SMSAddress).filter_by(user_id=userAID).first()
        smsAddressI = db.query(SMSAddress).filter_by(user_id=userIID).first()

        # Get token
        self.login(self.userI)
        token = get_token(self.get(url).unicode_body)

        params = ReplaceableDict(token=token, smsAddressAction='activate', smsAddressID=smsAddressI.id)
        # Activate an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Activate an smsAddress
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress.is_active).filter_by(user_id=userIID).first()[0], True)

        params = ReplaceableDict(token=token, smsAddressAction='deactivate', smsAddressID=smsAddressI.id)
        # Deactivate an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Deactivate an smsAddress
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress.is_active).filter_by(user_id=userIID).first()[0], False)

        params = ReplaceableDict(token=token, smsAddressAction='remove', smsAddressID=smsAddressI.id)
        # Remove an smsAddress that doesn't belong to the user
        self.assert_json(self.post(url, params.replace(smsAddressID=smsAddressA.id)), 0)
        # Remove an smsAddress that does belong to the user
        self.assert_json(self.post(url, params), 1)
        self.assertEqual(db.query(SMSAddress).filter_by(id=smsAddressI.id).count(), 0)

        params = ReplaceableDict(token=token)
        # Send an invalid command
        self.assert_json(self.post(url, params.replace(smsAddressAction='')), 0)
        self.assert_json(self.post(url, params.replace(smsAddressAction='xxx')), 0)
Example #3
0
File: tests.py Project: vad/imapIO
 def test_revive(self):
     self.server.cd = lambda a='': None
     self.server.list = lambda: ('OK', ['() "/" aaa'])
     self.server.create = lambda a: None
     self.server.append = lambda a, b, c, d: ('xxx', [])
     with self.assertRaises(imapIO.IMAPError):
         self.server.revive('bbb', imapIO.build_message())
Example #4
0
 def test_revive(self):
     self.server.cd = lambda a='': None
     self.server.list = lambda: ('OK', ['() "/" aaa'])
     self.server.create = lambda a: None
     self.server.append = lambda a, b, c, d: ('xxx', [])
     with self.assertRaises(imapIO.IMAPError):
         self.server.revive('bbb', imapIO.build_message())
Example #5
0
File: tests.py Project: vad/imapIO
def test_build_message():
    imapIO.mimetypes.guess_type = lambda a: (None, None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('image/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('audio/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('xxx/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
Example #6
0
def test_build_message():
    imapIO.mimetypes.guess_type = lambda a: (None, None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('image/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('audio/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
    imapIO.mimetypes.guess_type = lambda a: ('xxx/xxx', None)
    imapIO.build_message(attachmentPaths=['MANIFEST.in'])
Example #7
0
 def test_revive(self):
     folder = 'inbox'
     self.server.cd(folder)
     baseCase = dict(whenUTC=datetime.datetime(2005, 1, 23, 1, 0),
                     subject='Test',
                     fromWhom='*****@*****.**',
                     toWhom='*****@*****.**',
                     ccWhom='*****@*****.**',
                     bccWhom='*****@*****.**',
                     bodyText='Yes',
                     bodyHTML='<html>No</html>',
                     attachmentPaths=[
                         'CHANGES.rst',
                         'README.rst',
                     ])
     # Clear previous cases
     for email in self.server.walk(folder):
         if [email.fromWhom, email.toWhom
             ] == [baseCase['fromWhom'], baseCase['toWhom']]:
             email.deleted = True
     self.server.expunge()
     # Run cases
     cases = [
         baseCase,
         dict(baseCase, bodyHTML=''),
         dict(baseCase, bodyText=''),
         dict(baseCase, attachmentPaths=None),
         dict(baseCase, attachmentPaths=None, bodyHTML=''),
         dict(baseCase, attachmentPaths=None, bodyText=''),
     ]
     self.temporaryPaths = []
     for caseIndex, case in enumerate(cases):
         subject = case['subject'] + str(caseIndex)
         # Revive
         self.server.revive(
             folder, imapIO.build_message(**dict(case, subject=subject)))
         # Make sure the revived email exists
         for email in self.server.walk(folder):
Example #8
0
File: tests.py Project: vad/imapIO
 def test_revive(self):
     folder = 'inbox'
     self.server.cd(folder)
     baseCase = dict(
         whenUTC=datetime.datetime(2005, 1, 23, 1, 0),
         subject='Test',
         fromWhom='*****@*****.**',
         toWhom='*****@*****.**',
         ccWhom='*****@*****.**',
         bccWhom='*****@*****.**',
         bodyText='Yes',
         bodyHTML='<html>No</html>',
         attachmentPaths=[
             'CHANGES.rst',
             'README.rst',
         ])
     # Clear previous cases
     for email in self.server.walk(folder):
         if [email.fromWhom, email.toWhom] == [baseCase['fromWhom'], baseCase['toWhom']]:
             email.deleted = True
     self.server.expunge()
     # Run cases
     cases = [
         baseCase,
         dict(baseCase, bodyHTML=''),
         dict(baseCase, bodyText=''),
         dict(baseCase, attachmentPaths=None),
         dict(baseCase, attachmentPaths=None, bodyHTML=''),
         dict(baseCase, attachmentPaths=None, bodyText=''),
     ]
     self.temporaryPaths = []
     for caseIndex, case in enumerate(cases):
         subject = case['subject'] + str(caseIndex)
         # Revive
         self.server.revive(folder, imapIO.build_message(**dict(case, subject=subject)))
         # Make sure the revived email exists
         for email in self.server.walk(folder):
             if [email.fromWhom, email.toWhom, email.subject] == [baseCase['fromWhom'], baseCase['toWhom'], subject]:
                 break
         else:
             raise AssertionError('Could not find revived message on server')
         self.assertEqual(email.seen, False)
         self.assertEqual(email.whenUTC, case['whenUTC'])
         email.flags = r'\Seen'
         self.assertEqual(
             set([r'\Seen']), 
             set(x for x in email.flags).difference([r'\Recent']))
         # Save
         targetPath = tempfile.mkstemp(suffix='.gz')[1]
         self.temporaryPaths.append(targetPath)
         email.save(targetPath)
         partPacks = imapIO.extract_parts(targetPath, [100])
         partPacks = imapIO.extract_parts(targetPath)
         attachmentPathByName = dict((os.path.basename(x), x) for x in case['attachmentPaths'] or [])
         # Make sure the email contains all attachments
         self.assertEqual(set(attachmentPathByName) - set(x[1] for x in partPacks), set())
         # Make sure attachment contents match
         for partIndex, partName, contentType, payload in partPacks:
             if partName in attachmentPathByName:
                 attachmentData = open(attachmentPathByName[partName], 'rb').read()
                 if contentType.startswith('text'):
                     payload = payload.replace('\r\n', '\n')
                 self.assertEqual(payload, attachmentData)
             elif contentType == 'text/plain':
                 self.assertEqual(payload, case['bodyText'])
             elif contentType == 'text/html':
                 self.assertEqual(payload, case['bodyHTML'])
             else:
                 raise Exception('Unexpect part: %s' % (partIndex, partName, contentType))
     # Duplicate an email directly
     for email in self.server.walk(folder):
         if [email.fromWhom, email.toWhom] == [baseCase['fromWhom'], baseCase['toWhom']]:
             self.server.revive(folder, email)
             break
     # Clear cases
     self.server.format_error('xxx', '')
     for email in self.server.walk(folder):
         email.format_error('xxx', '')
         if [email.fromWhom, email.toWhom] == [baseCase['fromWhom'], baseCase['toWhom']]:
             email.deleted = True
     self.server.expunge()