def test_processing_the_payment_of_an_order_containing_all_types_of_items( self): order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[ OrderItems(item=self.screwdriver, quantity=2), OrderItems(item=self.gogol_music, quantity=2), OrderItems(item=self.book, quantity=2), OrderItems(item=self.movie, quantity=1) ]) payment = Payment(payment_method=CreditCard.fetch_by_hased('VISA-xxx'), order=order) payment.pay() assert payment.is_paid assert payment.order.subtotal == 50.0 assert payment.order.items[0].item == self.screwdriver assert payment.order.items[1].item == self.gogol_music assert payment.order.items[2].item == self.book assert payment.order.items[3].item == self.movie assert self.regular_shipping_label in shipping_labels.pending_labels assert self.tax_exempt_shipping_label in shipping_labels.pending_labels self.assert_email_was_sent_generated_from_template( order, EmailTemplate.SUBSCRIPTION_ACTIVATION) self.assert_email_was_sent_generated_from_template( order, EmailTemplate.DIGITAL_MEDIA_ACCESS) self.assert_email_was_sent_generated_from_template( order, EmailTemplate.DISCOUNT_VOUCHER) assert self.gogol_music in subscription_service.activated_subscriptions_for_customer( self.customer)
def test_processing_the_payment_for_an_order_containing_multiple_subscriptions(self): order = Order( customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[ OrderItems(item=self.gogol_music, quantity=1), OrderItems(item=self.spotofy, quantity=1) ] ) payment = Payment( payment_method=CreditCard.fetch_by_hased('VISA-xxx'), order=order ) payment.pay() assert payment.is_paid assert payment.order.subtotal == 10.0 assert payment.order.items[0].item == self.gogol_music assert payment.order.items[1].item == self.spotofy assert email_sender.latest() == Email.from_template( template=EmailTemplate.SUBSCRIPTION_ACTIVATION, order=order ) assert self.gogol_music in subscription_service.activated_subscriptions_for_customer(self.customer) assert self.spotofy in subscription_service.activated_subscriptions_for_customer(self.customer)
def test_order_reports_it_contains_a_digital_item(self): song = Item(type=ItemType.DIGITAL_MEDIA, price=10.0, name='Imagine') order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[OrderItems(item=song, quantity=3)]) assert order.contains_digital_media is True
def test_order_reports_it_contains_a_book(self): book = Item(type=ItemType.BOOK, price=10.0, name='Python for Dummies') order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[OrderItems(item=book, quantity=3)]) assert order.contains_books is True
def test_order_reports_it_contains_a_digital_subscription_item(self): gogol_music = Item(type=ItemType.SUBSCRIPTION, price=10.0, name='Gogol Music') order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[OrderItems(item=gogol_music, quantity=3)]) assert order.contains_subscriptions is True
def test_order_reports_it_contains_a_physical_item(self): screwdriver = Item(type=ItemType.PHYSICAL, price=10.0, name='Screwdriver') order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[OrderItems(item=screwdriver, quantity=3)]) assert order.contains_physical_items is True
def test_getting_the_subtotal_for_an_order_containing_many_units_of_one_item( self): screwdriver = Item(type=ItemType.PHYSICAL, price=10.0, name='Screwdriver') order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[OrderItems(item=screwdriver, quantity=3)]) assert order.subtotal == 30.0
def test_processing_the_payment_for_an_order_containing_multiple_physical_items( self): order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[ OrderItems(item=self.screwdriver, quantity=2), OrderItems(item=self.hammer, quantity=2), ]) payment = Payment(payment_method=CreditCard.fetch_by_hased('VISA-xxx'), order=order) payment.pay() assert payment.is_paid assert payment.order.subtotal == 30.0 assert payment.order.items[0].item == self.screwdriver assert payment.order.items[1].item == self.hammer latest_shipping_label = shipping_labels.latest() assert latest_shipping_label == ShippingLabel( shipping_address=self.address, customer=self.customer)
def test_processing_the_payment_for_an_order_containing_multiple_digital_media( self): order = Order(customer=self.customer, shipping_address=self.address, billing_address=self.address, items=[ OrderItems(item=self.avator, quantity=2), OrderItems(item=self.mission_possible, quantity=2), ]) payment = Payment(payment_method=CreditCard.fetch_by_hased('VISA-xxx'), order=order) payment.pay() assert payment.is_paid assert payment.order.subtotal == 30.0 assert payment.order.items[0].item == self.avator assert payment.order.items[1].item == self.mission_possible self.assert_email_was_sent_generated_from_template( order, EmailTemplate.DIGITAL_MEDIA_ACCESS) self.assert_email_was_sent_generated_from_template( order, EmailTemplate.DISCOUNT_VOUCHER)