class OrderReceiptMailerForNonUserTestCase(TestCase): def setUp(self): event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') 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 = OrderReceiptMailer(transaction, site='dancerfly.com', secure=True) def test_recipients(self): self.assertEqual(self.mailer.get_recipients(), [self.order.email])
class OrderAlertMailerWithUnconfirmedCheckPayments(TestCase): def setUp(self): event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') transaction = TransactionFactory(event=event, order=self.order, amount=130, method=Transaction.CHECK, is_confirmed=False) 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 def test_body_plaintext(self): body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn("keep an eye on your mail", body)
def test_summary_data__discount_changed(self): """ Test that get_summary_data returns correct values for savings and total cost even if a discount was changed. """ event = EventFactory() order = OrderFactory(event=event) transaction = TransactionFactory(event=event, order=order) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_discount(discount) order.mark_cart_paid(transaction) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80) discount.amount = 100 discount.save() # Make sure that the value isn't cached. order = Order.objects.get(pk=order.pk) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80)
def test_summary_data__base(self): """ Test that get_summary_data returns correct values for savings and total cost. """ event = EventFactory() order = OrderFactory(event=event) transaction = TransactionFactory(event=event, order=order) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.mark_cart_paid(transaction) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], 0) self.assertEqual(summary_data['net_cost'], 100) # Discounts don't get added to BOUGHT items. order.add_discount(discount) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], 0) self.assertEqual(summary_data['net_cost'], 100)
def test_cart_discount_caching(self): """ Test that the cached discount information is correct. """ event = EventFactory() order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_discount(discount) discount.delete() self.assertTrue(order.bought_items.exists()) boughtitem = order.bought_items.all()[0] self.assertTrue(boughtitem.discounts.exists()) boughtitemdiscount = boughtitem.discounts.all()[0] self.assertTrue(boughtitemdiscount.discount_id is None) self.assertEqual(boughtitemdiscount.name, discount.name) self.assertEqual(boughtitemdiscount.code, discount.code) self.assertEqual(boughtitemdiscount.discount_type, discount.discount_type) self.assertEqual(boughtitemdiscount.amount, discount.amount) self.assertEqual(boughtitemdiscount.savings(), 20)
def test_summary_data__itemoption_deleted(self): """ Test that get_summary_data returns correct values for savings and total cost even if an itemoption was deleted. """ event = EventFactory() order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], 0) self.assertEqual(summary_data['net_cost'], 100) order.add_discount(discount) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80) item_option.delete() # Make sure that the value isn't cached. order = Order.objects.get(pk=order.pk) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80)
def test_comped__sends_email(self): """A successful completion with fully-comped items should send a receipt email and an alert email.""" organization = OrganizationFactory() owner = PersonFactory() OrganizationMember.objects.create( person=owner, organization=organization, role=OrganizationMember.OWNER, ) event = EventFactory( collect_housing_data=False, organization=organization, ) order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=100, discount_type='percent', event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_to_cart(item_option) order.add_discount(discount) view = SummaryView() view.request = self.factory.post('/') view.request.user = AnonymousUser() view.event = event view.order = order self.assertEqual(len(mail.outbox), 0) response = view.post(view.request) self.assertEqual(response.status_code, 302) self.assertEqual(len(mail.outbox), 2)
def test_summary_data__base(self): """ Test that get_summary_data returns correct values for savings and total cost. """ event = EventFactory() order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], 0) self.assertEqual(summary_data['net_cost'], 100) order.add_discount(discount) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80)
def test_summary_data__discount_deleted(self): """ Test that get_summary_data returns correct values for savings and total cost even if a discount was deleted. """ event = EventFactory() order = OrderFactory(event=event) transaction = TransactionFactory(event=event, order=order) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_discount(discount) order.mark_cart_paid(transaction) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80) discount.delete() # Make sure that the value isn't cached. order = Order.objects.get(pk=order.pk) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80)
class OrderAlertMailerForNonUserOrderTestCase(TestCase): def setUp(self): event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') 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 def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ('[{event_name}] New purchase by {order_email}' .format(event_name=self.event_name, order_email=self.order.email)) self.assertEqual(subject, expected_subject)
class OrderAlertMailerForNonUserOrderTestCase(TestCase): def setUp(self): event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') 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 def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ( '[{event_name}] New purchase by {order_email}'.format( event_name=self.event_name, order_email=self.order.email)) self.assertEqual(subject, expected_subject)
class ItemOptionViewSetTestCase(TestCase): def setUp(self): self.factory = RequestFactory() event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') self.transaction = TransactionFactory( event=event, order=self.order, amount=130, method=Transaction.CHECK, is_confirmed=False) 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(self.transaction) order2 = OrderFactory(event=event, email='*****@*****.**') order2.add_to_cart(item_option2) transaction2 = TransactionFactory(event=event, order=self.order, amount=130, method=Transaction.CHECK, is_confirmed=True) order2.mark_cart_paid(transaction2) self.order3 = OrderFactory(event=event, email='*****@*****.**') self.order3.add_to_cart(item_option1) transaction3 = TransactionFactory(event=event, order=self.order3, amount=130, method=Transaction.CHECK, is_confirmed=True) self.order3.mark_cart_paid(transaction3) self.viewset = ItemOptionViewSet() self.viewset.request = self.factory.get('/') self.viewset.request.user = self.order.person def test_taken_counts(self): qs = self.viewset.get_queryset() self.assertEqual([2, 2], [int(p.taken) for p in qs]) def test_exclude_refunded(self): """should exclude refunded items from the taken count""" self.transaction.refund() qs = self.viewset.get_queryset() self.assertEqual([1, 1], [int(p.taken) for p in qs]) def test_exclude_transferred(self): """should exclude transferred items from the taken count""" for item in self.order3.bought_items.all(): item.status = BoughtItem.TRANSFERRED item.save() qs = self.viewset.get_queryset() self.assertEqual([1, 2], [int(p.taken) for p in qs])
class AddDiscountTestCase(TestCase): def setUp(self): self.event = EventFactory() self.order = OrderFactory(event=self.event) self.item = ItemFactory(event=self.event) self.item_option = ItemOptionFactory(price=100, item=self.item) self.order.add_to_cart(self.item_option) self.discount = DiscountFactory(amount=20, event=self.event, item_options=[self.item_option]) def test_add_discount_creates_boughtitemdiscount(self): created = self.order.add_discount(self.discount) self.assertTrue(created) bought_item = self.order.bought_items.get() self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount.discount, self.discount) def test_add_discount_does_not_duplicate_discounts(self): existing_bought_item_discount = BoughtItemDiscount.objects.create( discount=self.discount, bought_item=self.order.bought_items.get(), name=self.discount.name, code=self.discount.code, discount_type=self.discount.discount_type, amount=self.discount.amount, ) created = self.order.add_discount(self.discount) self.assertFalse(created) bought_item = self.order.bought_items.get() self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount, existing_bought_item_discount) def test_created_true_if_any_discounts_created(self): item_option2 = ItemOptionFactory(price=100, item=self.item) self.discount.item_options.add(item_option2) self.order.add_to_cart(item_option2) BoughtItemDiscount.objects.create( discount=self.discount, bought_item=self.order.bought_items.get( item_option=self.item_option), name=self.discount.name, code=self.discount.code, discount_type=self.discount.discount_type, amount=self.discount.amount, ) created = self.order.add_discount(self.discount) self.assertTrue(created) bought_item = self.order.bought_items.get(item_option=item_option2) self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount.discount, self.discount)
class AddDiscountTestCase(TestCase): def setUp(self): self.event = EventFactory() self.order = OrderFactory(event=self.event) self.item = ItemFactory(event=self.event) self.item_option = ItemOptionFactory(price=100, item=self.item) self.order.add_to_cart(self.item_option) self.discount = DiscountFactory(amount=20, event=self.event, item_options=[self.item_option]) def test_add_discount_creates_boughtitemdiscount(self): created = self.order.add_discount(self.discount) self.assertTrue(created) bought_item = self.order.bought_items.get() self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount.discount, self.discount) def test_add_discount_does_not_duplicate_discounts(self): existing_bought_item_discount = BoughtItemDiscount.objects.create( discount=self.discount, bought_item=self.order.bought_items.get(), name=self.discount.name, code=self.discount.code, discount_type=self.discount.discount_type, amount=self.discount.amount, ) created = self.order.add_discount(self.discount) self.assertFalse(created) bought_item = self.order.bought_items.get() self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount, existing_bought_item_discount) def test_created_true_if_any_discounts_created(self): item_option2 = ItemOptionFactory(price=100, item=self.item) self.discount.item_options.add(item_option2) self.order.add_to_cart(item_option2) BoughtItemDiscount.objects.create( discount=self.discount, bought_item=self.order.bought_items.get(item_option=self.item_option), name=self.discount.name, code=self.discount.code, discount_type=self.discount.discount_type, amount=self.discount.amount, ) created = self.order.add_discount(self.discount) self.assertTrue(created) bought_item = self.order.bought_items.get(item_option=item_option2) self.assertEqual(bought_item.discounts.count(), 1) bought_item_discount = bought_item.discounts.get() self.assertEqual(bought_item_discount.discount, self.discount)
def test_summary_data__items_no_transaction__discount(self): """ Items without transactions are included in summary data. """ event = EventFactory() order = OrderFactory(event=event) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_discount(discount) summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['net_cost'], 80)
class OrderReceiptMailerWithUnconfirmedCheckPayments(TestCase): def setUp(self): event = EventFactory() self.order = OrderFactory(event=event, email='*****@*****.**') transaction = TransactionFactory(event=event, order=self.order, amount=130, method=Transaction.CHECK, is_confirmed=False) 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 = OrderReceiptMailer(transaction, site='dancerfly.com', secure=True) self.event = event def test_still_time_to_mail_check(self): self.event.check_postmark_cutoff = date.today() + timedelta(days=5) body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn("Checks must be postmarked no later than", body) def test_past_postmark_cutoff(self): self.event.check_postmark_cutoff = date.today() - timedelta(days=5) body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn("Payment was due to be postmarked", body) def test_postmark_cutoff_today(self): self.event.check_postmark_cutoff = date.today() body = self.mailer.render_body(self.mailer.get_context_data(), plaintext=True) self.assertIn("postmarked no later than today", body)
def test_summary_data__transfer(self): """Items sent or received in a transfer shouldn't count towards net cost and savings""" event = EventFactory() order = OrderFactory( event=event, person=PersonFactory(), ) person2 = PersonFactory() transaction = TransactionFactory( event=event, order=order, is_confirmed=True, transaction_type=Transaction.PURCHASE, amount=80, ) item = ItemFactory(event=event) item_option = ItemOptionFactory(price=100, item=item) discount = DiscountFactory(amount=20, event=event, item_options=[item_option]) order.add_to_cart(item_option) order.add_discount(discount) order.mark_cart_paid(transaction) bought_item = transaction.bought_items.get() invite = TransferInvite.get_or_create( request=Mock(user=person2, session={}), email=person2.email, content=bought_item, )[0] invite.accept() summary_data = order.get_summary_data() self.assertEqual(summary_data['gross_cost'], 100) self.assertEqual(summary_data['total_savings'], -20) self.assertEqual(summary_data['total_refunds'], 0) self.assertEqual(summary_data['total_payments'], 80) self.assertEqual(summary_data['net_cost'], 80) self.assertEqual(summary_data['net_balance'], 0) self.assertEqual(summary_data['unconfirmed_check_payments'], False) transactions = summary_data['transactions'] self.assertEqual(len(transactions), 2) transfer_txn, transfer_txn_dict = transactions.items()[0] self.assertEqual(transfer_txn.transaction_type, Transaction.TRANSFER) self.assertEqual(transfer_txn_dict['items'], [bought_item]) self.assertEqual(transfer_txn_dict['gross_cost'], 0) self.assertEqual(transfer_txn_dict['discounts'], []) self.assertEqual(transfer_txn_dict['total_savings'], 0) self.assertEqual(transfer_txn_dict['net_cost'], 0) purchase_txn, purchase_txn_dict = transactions.items()[1] self.assertEqual(purchase_txn.transaction_type, Transaction.PURCHASE) self.assertEqual(purchase_txn_dict['items'], [bought_item]) self.assertEqual(purchase_txn_dict['gross_cost'], 100) self.assertEqual(purchase_txn_dict['discounts'], [bought_item.discounts.first()]) self.assertEqual(purchase_txn_dict['total_savings'], -20) self.assertEqual(purchase_txn_dict['net_cost'], 80) order2 = Order.objects.get(event=event, person=person2) summary_data2 = order2.get_summary_data() self.assertEqual(summary_data2['gross_cost'], 0) self.assertEqual(summary_data2['total_savings'], 0) self.assertEqual(summary_data2['total_refunds'], 0) self.assertEqual(summary_data2['total_payments'], 0) self.assertEqual(summary_data2['net_cost'], 0) self.assertEqual(summary_data2['net_balance'], 0) self.assertEqual(summary_data2['unconfirmed_check_payments'], False) transactions2 = summary_data2['transactions'] self.assertEqual(len(transactions2), 1) transfer_txn2, transfer_txn2_dict = transactions.items()[0] self.assertEqual(transfer_txn2.transaction_type, Transaction.TRANSFER) self.assertEqual(transfer_txn2_dict['items'], [bought_item]) self.assertEqual(transfer_txn2_dict['gross_cost'], 0) self.assertEqual(transfer_txn2_dict['discounts'], []) self.assertEqual(transfer_txn2_dict['total_savings'], 0) self.assertEqual(transfer_txn2_dict['net_cost'], 0)
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 OrderReceiptMailerTestCase(TestCase): def setUp(self): self.person = PersonFactory() event = EventFactory() 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 = OrderReceiptMailer(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.discount_amount, body) self.assertIn(self.item_price, body) self.assertIn(self.option1, body) self.assertIn(self.option2, 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.item_price, body) self.assertIn(self.discount_amount, body) self.assertIn(self.total_amount, body) def test_recipients(self): self.assertEqual(self.mailer.get_recipients(), [self.person.email]) def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ('[{event_name}] Receipt for order {order_code}' .format(event_name=self.event_name, order_code=self.order.code)) 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.item_price, body) self.assertIn(self.discount_amount, body) self.assertIn(self.total_amount, body) def test_subject_apostrophe(self): event = EventFactory(name="Han & Leia's Wedding") self.event_name = event.name self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) self.mailer = OrderReceiptMailer(transaction, site='dancerfly.com', secure=True) subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ('[{event_name}] Receipt for order {order_code}' .format(event_name=self.event_name, order_code=self.order.code)) self.assertEqual(subject, expected_subject)
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 OrderReceiptMailerTestCase(TestCase): def setUp(self): self.person = PersonFactory() event = EventFactory() 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 = OrderReceiptMailer(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.discount_amount, body) self.assertIn(self.item_price, body) self.assertIn(self.option1, body) self.assertIn(self.option2, 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.item_price, body) self.assertIn(self.discount_amount, body) self.assertIn(self.total_amount, body) def test_recipients(self): self.assertEqual(self.mailer.get_recipients(), [self.person.email]) def test_subject(self): subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ( '[{event_name}] Receipt for order {order_code}'.format( event_name=self.event_name, order_code=self.order.code)) 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.item_price, body) self.assertIn(self.discount_amount, body) self.assertIn(self.total_amount, body) def test_subject_apostrophe(self): event = EventFactory(name="Han & Leia's Wedding") self.event_name = event.name self.order = OrderFactory(event=event, person=self.person) transaction = TransactionFactory(event=event, order=self.order, amount=130) self.mailer = OrderReceiptMailer(transaction, site='dancerfly.com', secure=True) subject = self.mailer.render_subject(self.mailer.get_context_data()) expected_subject = ( '[{event_name}] Receipt for order {order_code}'.format( event_name=self.event_name, order_code=self.order.code)) self.assertEqual(subject, expected_subject)