예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
    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
예제 #7
0
    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)