def test_subject__transfer(self): person = PersonFactory(first_name="Conan", last_name="O'Brien") event = EventFactory() order = OrderFactory(event=event, person=person) TransactionFactory(event=event, order=order, amount=130) item = ItemFactory(event=event, name='Multipass') item_option1 = ItemOptionFactory(price=100, item=item, name='Gold') order.add_to_cart(item_option1) boughtitem = order.bought_items.all()[0] request = self.factory.get('/') request.user = person invite, created = TransferInvite.get_or_create( request=request, email='*****@*****.**', content=boughtitem, ) invite.send() self.assertEqual(len(mail.outbox), 1) self.assertEqual( mail.outbox[0].subject, "{} wants to transfer an item to you".format( person.get_full_name()))
class OrderReceiptMailerTestCase(TestCase): def setUp(self): self.person = PersonFactory() event = EventFactory() owner = PersonFactory() OrganizationMember.objects.create( person=owner, organization=event.organization, role=OrganizationMember.OWNER, ) self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) item = ItemFactory(event=event, name='Multipass') item_option1 = ItemOptionFactory(price=100, item=item, name='Gold') item_option2 = ItemOptionFactory(price=60, item=item, name='Silver') discount = DiscountFactory(amount=30, discount_type='percent', event=event, item_options=[item_option1]) self.order.add_to_cart(item_option1) self.order.add_to_cart(item_option2) self.order.add_discount(discount) self.order.mark_cart_paid(transaction) self.mailer = OrderAlertMailer(transaction, site='dancerfly.com', secure=True) self.event_name = event.name self.discount_amount = format_money(discount.amount, event.currency) self.total_amount = format_money(transaction.amount, event.currency) self.option1 = '{0} ({1})'.format(item.name, item_option1.name) self.option2 = '{0} ({1})'.format(item.name, item_option1.name) self.item_price = format_money(item_option1.price, event.currency) def test_render_plaintext(self): body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn(self.total_amount, body) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertNotIn("outstanding check payments", body) def test_render_inlined(self): body = self.mailer.render_body(self.mailer.get_context_data(), inlined=True) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertIn(self.total_amount, body) def test_recipients(self): self.assertSequenceEqual( self.mailer.get_recipients(), [self.order.event.organization.members.get().email]) def test_recipients__notify_never(self): person = self.order.event.organization.members.get() person.notify_new_purchases = 'never' person.save() self.assertSequenceEqual(self.mailer.get_recipients(), []) def test_recipients__notify_daily(self): person = self.order.event.organization.members.get() person.notify_new_purchases = 'daily' person.save() self.assertSequenceEqual(self.mailer.get_recipients(), []) def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ( '[{event_name}] New purchase by {person_name}'.format( event_name=self.event_name, person_name=self.person.get_full_name())) self.assertEqual(subject, expected_subject) def test_body_non_inlined_non_plaintext(self): body = self.mailer.render_body(self.mailer.get_context_data(), inlined=False, plaintext=False) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertIn(self.total_amount, body) def test_subject_apostrophe(self): event = EventFactory(name="Han & Leia's Wedding!") self.person = PersonFactory(first_name="Ma'ayan", last_name="Plaut") self.event_name = event.name self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) self.mailer = OrderAlertMailer(transaction, site='dancerfly.com', secure=True) subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ( '[{event_name}] New purchase by {person_name}'.format( event_name=self.event_name, person_name=self.person.get_full_name())) self.assertEqual(subject, expected_subject)
class TransferInviteTestCase(TestCase): def setUp(self): self.factory = RequestFactory() self.person = PersonFactory( first_name="Conan", last_name="O'Brien", ) self.event = EventFactory() self.order = OrderFactory( event=self.event, person=self.person, ) TransactionFactory( event=self.event, order=self.order, amount=130, ) self.item = ItemFactory( event=self.event, name='Multipass', ) self.item_option1 = ItemOptionFactory( price=100, item=self.item, name='Gold', ) self.order.add_to_cart(self.item_option1) self.bought_item = self.order.bought_items.all()[0] def test_email_subject__transfer(self): request = self.factory.get('/') request.user = self.person invite, created = TransferInvite.get_or_create( request=request, email='*****@*****.**', content=self.bought_item, ) invite.send() self.assertEqual(len(mail.outbox), 1) self.assertEqual( mail.outbox[0].subject, "{} wants to transfer an item to you".format( self.person.get_full_name() ), ) def test_manage_not_allowed__no_order(self): # A person who isn't signed up for the event # shouldn't be able to manage it. person2 = PersonFactory() request = self.factory.get('/') request.user = person2 session_middleware = SessionMiddleware() session_middleware.process_request(request) instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertFalse(invite.manage_allowed()) def test_manage_not_allowed__wrong_order(self): # A person who doesn't have the originating order # shouldn't be able to manage it. person2 = PersonFactory() OrderFactory( person=person2, event=self.event, ) request = self.factory.get('/') request.user = person2 instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertFalse(invite.manage_allowed()) def test_manage_allowed(self): # Owner of a bought item should be able to manage transfer invites. person2 = PersonFactory() request = self.factory.get('/') request.user = self.person instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertTrue(invite.manage_allowed())
class OrderReceiptMailerTestCase(TestCase): def setUp(self): self.person = PersonFactory() event = EventFactory() owner = PersonFactory() OrganizationMember.objects.create( person=owner, organization=event.organization, role=OrganizationMember.OWNER, ) self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) item = ItemFactory(event=event, name='Multipass') item_option1 = ItemOptionFactory(price=100, item=item, name='Gold') item_option2 = ItemOptionFactory(price=60, item=item, name='Silver') discount = DiscountFactory(amount=30, discount_type='percent', event=event, item_options=[item_option1]) self.order.add_to_cart(item_option1) self.order.add_to_cart(item_option2) self.order.add_discount(discount) self.order.mark_cart_paid(transaction) self.mailer = OrderAlertMailer(transaction, site='dancerfly.com', secure=True) self.event_name = event.name self.discount_amount = format_money(discount.amount, event.currency) self.total_amount = format_money(transaction.amount, event.currency) self.option1 = '{0} ({1})'.format(item.name, item_option1.name) self.option2 = '{0} ({1})'.format(item.name, item_option1.name) self.item_price = format_money(item_option1.price, event.currency) def test_render_plaintext(self): body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn(self.total_amount, body) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertNotIn("outstanding check payments", body) def test_render_inlined(self): body = self.mailer.render_body(self.mailer.get_context_data(), inlined=True) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertIn(self.total_amount, body) def test_recipients(self): self.assertSequenceEqual(self.mailer.get_recipients(), [self.order.event.organization.members.get().email]) def test_recipients__notify_never(self): person = self.order.event.organization.members.get() person.notify_new_purchases = 'never' person.save() self.assertSequenceEqual(self.mailer.get_recipients(), []) def test_recipients__notify_daily(self): person = self.order.event.organization.members.get() person.notify_new_purchases = 'daily' person.save() self.assertSequenceEqual(self.mailer.get_recipients(), []) def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ('[{event_name}] New purchase by {person_name}' .format(event_name=self.event_name, person_name=self.person.get_full_name())) self.assertEqual(subject, expected_subject) def test_body_non_inlined_non_plaintext(self): body = self.mailer.render_body(self.mailer.get_context_data(), inlined=False, plaintext=False) self.assertIn(self.option1, body) self.assertIn(self.option2, body) self.assertIn(self.total_amount, body) def test_subject_apostrophe(self): event = EventFactory(name="Han & Leia's Wedding!") self.person = PersonFactory(first_name="Ma'ayan", last_name="Plaut") self.event_name = event.name self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) self.mailer = OrderAlertMailer(transaction, site='dancerfly.com', secure=True) subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ('[{event_name}] New purchase by {person_name}' .format(event_name=self.event_name, person_name=self.person.get_full_name())) self.assertEqual(subject, expected_subject)
class TransferInviteTestCase(TestCase): def setUp(self): self.factory = RequestFactory() self.person = PersonFactory( first_name="Conan", last_name="O'Brien", ) self.event = EventFactory() self.order = OrderFactory( event=self.event, person=self.person, ) TransactionFactory( event=self.event, order=self.order, amount=130, ) self.item = ItemFactory( event=self.event, name='Multipass', ) self.item_option1 = ItemOptionFactory( price=100, item=self.item, name='Gold', ) self.order.add_to_cart(self.item_option1) self.bought_item = self.order.bought_items.all()[0] def test_email_subject__transfer(self): request = self.factory.get('/') request.user = self.person invite, created = TransferInvite.get_or_create( request=request, email='*****@*****.**', content=self.bought_item, ) invite.send() self.assertEqual(len(mail.outbox), 1) self.assertEqual( mail.outbox[0].subject, "{} wants to transfer an item to you".format( self.person.get_full_name()), ) def test_manage_not_allowed__no_order(self): # A person who isn't signed up for the event # shouldn't be able to manage it. person2 = PersonFactory() request = self.factory.get('/') request.user = person2 session_middleware = SessionMiddleware() session_middleware.process_request(request) instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertFalse(invite.manage_allowed()) def test_manage_not_allowed__wrong_order(self): # A person who doesn't have the originating order # shouldn't be able to manage it. person2 = PersonFactory() OrderFactory( person=person2, event=self.event, ) request = self.factory.get('/') request.user = person2 instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertFalse(invite.manage_allowed()) def test_manage_allowed(self): # Owner of a bought item should be able to manage transfer invites. person2 = PersonFactory() request = self.factory.get('/') request.user = self.person instance = Invite.objects.create( email=person2.email, user=self.person, kind='transfer', content_id=self.bought_item.id, ) invite = get_invite(request, instance.code, self.bought_item) self.assertTrue(invite.manage_allowed())