def add_mailings(app_title=u'BIMT'): """Create default mailings.""" with transaction.manager: mailing_created = Mailing( name='after_creation', trigger=MailingTriggers.after_user_created.name, days=0, subject=u'Welcome to {settings[bimt.app_title]}!', body=USER_CREATED_BODY, ) Session.add(mailing_created) mailing_disabled = Mailing( name='after_disabled', trigger=MailingTriggers.after_user_disabled.name, days=0, subject=u'Your {} account is disabled.'.format(app_title), body=u'Your account is disabled.', ) Session.add(mailing_disabled) mailing_password_changed = Mailing( name='after_user_changed_password', trigger=MailingTriggers.after_user_changed_password.name, days=0, subject=u'{} Password Reset'.format(app_title), body=PASSWORD_EMAIL_BODY, ) Session.add(mailing_password_changed)
def test_send_immediately_success(self, get_current_request): get_current_request.return_value = self.request add_users() self.request.context = Mailing.by_name('welcome_email') result = self.view.send_immediately_success(self.APPSTRUCT) self.assertIsInstance(result, HTTPFound) self.assertEqual(result.location, '/mailing/4/edit/') self.assertEqual( self.request.session.pop_flash(), [u'Mailing "welcome_email" sent to 1 recipients.'], ) mailer = get_mailer(self.request) self.assertEqual(len(mailer.outbox), 1) self.assertEqual(mailer.outbox[0].recipients, [ '*****@*****.**', ]) self.assertEqual(mailer.outbox[0].subject, u'Über Welcome!') self.assertIn( u'Hello Öne Bar', mailer.outbox[0].html, ) self.assertIn(u'Welcome to this über amazing BIMT app!', mailer.outbox[0].html) self.assertIn('Best wishes,', mailer.outbox[0].html) self.assertIn('BIMT Team', mailer.outbox[0].html)
def _make_mailing(name='foo', days=0, subject=u'', body=u'', **kwargs): mailing = Mailing(name=name, days=days, subject=subject, body=body, **kwargs) Session.add(mailing) return mailing
def __getitem__(self, key): mailing = Mailing.by_id(key) if mailing: mailing.__parent__ = self mailing.__name__ = key return mailing else: raise KeyError
def test_save_success(self): self.request.context = Mailing.by_id(1) result = self.view.save_success(self.APPSTRUCT) self.assertIsInstance(result, HTTPFound) self.assertEqual(result.location, '/mailing/1/edit/') mailing = Mailing.by_id(1) self.assertEqual(mailing.name, 'bar') self.assertEqual(mailing.groups, [Group.by_id(1), Group.by_id(2)]) self.assertEqual(mailing.exclude_groups, [Group.by_id(3)]) self.assertEqual(mailing.trigger, MailingTriggers.after_created.name) self.assertEqual(mailing.days, 7) self.assertEqual(mailing.subject, u'Bär') self.assertEqual(mailing.body, u'Bän') self.assertEqual(self.request.session.pop_flash(), [u'Mailing "bar" modified.'])
def test_set_value_for_send_immediately_button(self): add_groups() add_users() add_demo_mailing() self.request.context = Mailing.by_name('welcome_email') schema = colander.Schema() form = deform.Form(schema, buttons=['foo', 'bar', 'send_immediately']) self.view.before(form) self.assertEqual(form.buttons[0].value, 'foo') self.assertEqual(form.buttons[1].value, 'bar') self.assertEqual( form.buttons[2].value, 'Immediately send mailing "welcome_email" to all 1 recipients ' 'without date constraints?')
def test_appstruct_full_context(self): self.request.context = Mailing.by_name('welcome_email') self.assertEqual( self.view.appstruct(), { 'name': 'welcome_email', 'groups': [ '4', ], 'exclude_groups': [ '1', ], 'trigger': MailingTriggers.after_created.name, 'days': 1, 'subject': u'Über Welcome!', 'body': u'Welcome to this über amazing BIMT app!', })
def test_submit_success(self): result = self.view.submit_success(self.APPSTRUCT) self.assertIsInstance(result, HTTPFound) self.assertEqual(result.location, '/mailing/1/edit/') mailing = Mailing.by_id(1) self.assertEqual(mailing.name, 'foo') self.assertEqual(mailing.groups, [Group.by_id(1)]) self.assertEqual(mailing.exclude_groups, [Group.by_id(2)]) self.assertEqual(mailing.trigger, MailingTriggers.never.name) self.assertEqual(mailing.days, 30) self.assertEqual(mailing.subject, u'Foö') self.assertEqual(mailing.body, u'Bär') self.assertEqual(self.request.session.pop_flash(), [u'Mailing "foo" added.'])
def test_test_success(self): add_users() self.request.user = User.by_email('*****@*****.**') self.request.context = Mailing.by_name('welcome_email') result = self.view.test_success(self.APPSTRUCT) self.assertIsInstance(result, HTTPFound) self.assertEqual(result.location, '/mailing/4/edit/') self.assertEqual( self.request.session.pop_flash(), [u'Mailing "welcome_email" sent to "*****@*****.**".'], ) mailer = get_mailer(self.request) self.assertEqual(len(mailer.outbox), 1) self.assertEqual(mailer.outbox[0].subject, u'[Mailing Test] Über Welcome!') self.assertIn('This mailing would be sent to:', mailer.outbox[0].html) self.assertIn('*****@*****.**', mailer.outbox[0].html)
def add_demo_mailing(): """Create a dummy mailing.""" with transaction.manager: trial = Group.by_name('trial') admins = Group.by_name('admins') mailing = Mailing( name='welcome_email', groups=[ trial, ], exclude_groups=[ admins, ], trigger=MailingTriggers.after_created.name, days=1, subject=u'Über Welcome!', body=u'Welcome to this über amazing BIMT app!', ) Session.add(mailing)
def submit_success(self, appstruct): mailing = Mailing( name=appstruct['name'], groups=[ Group.by_id(group_id) for group_id in appstruct.get('groups') ], # noqa exclude_groups=[ Group.by_id(group_id) for group_id in appstruct.get('exclude_groups') ], # noqa trigger=appstruct['trigger'], days=appstruct['days'], subject=appstruct['subject'], body=appstruct['body'], ) Session.add(mailing) Session.flush() self.request.session.flash(u'Mailing "{}" added.'.format(mailing.name)) return HTTPFound(location=self.request.route_path( 'mailing_edit', mailing_id=mailing.id))
def _make_mailing( id=1, name='foo', groups=None, exclude_groups=None, trigger=MailingTriggers.never.name, days=0, subject=u'Sübject', body=u'Bödy', ): if groups is None: groups = [_make_group()] if exclude_groups is None: exclude_groups = [] return Mailing( id=id, name=name, groups=groups, exclude_groups=exclude_groups, trigger=trigger, days=days, subject=subject, body=body, )
def test_appstruct_empty_context(self): self.request.context = Mailing() self.assertEqual(self.view.appstruct(), {})