Example #1
1
    def test_multi_site(self):
        basket = factories.create_basket(empty=True)
        site1 = factories.SiteFactory()
        site2 = factories.SiteFactory()
        request = HttpRequest()
        request.META['SERVER_PORT'] = 80
        request.META['SERVER_NAME'] = site1.domain
        user = factories.UserFactory()
        add_product(basket, D('12.00'))
        shipping_method = Free()
        shipping_charge = shipping_method.calculate(basket)
        order_total = OrderTotalCalculator().calculate(basket, shipping_charge)

        billing_address = factories.BillingAddressFactory()
        shipping_address = factories.ShippingAddressFactory()
        order_submission_data = {'user': user,
                                 'order_number': '12345',
                                 'basket': basket,
                                 'shipping_method': shipping_method,
                                 'shipping_charge': shipping_charge,
                                 'order_total': order_total,
                                 'billing_address': billing_address,
                                 'shipping_address': shipping_address,
                                 'request': request}
        OrderPlacementMixin().place_order(**order_submission_data)
        order1 = Order.objects.get(number='12345')
        self.assertEqual(order1.site, site1)

        add_product(basket, D('12.00'))
        request.META['SERVER_NAME'] = site2.domain
        order_submission_data['order_number'] = '12346'
        order_submission_data['request'] = request
        OrderPlacementMixin().place_order(**order_submission_data)
        order2 = Order.objects.get(number='12346')
        self.assertEqual(order2.site, site2)
Example #2
0
    def test_get_single_seat(self):
        """
        The single-seat helper for cybersource reporting should correctly
        and return the first 'seat' product encountered in a basket.
        """
        get_single_seat = Cybersource.get_single_seat

        # finds the seat when it's the only product in the basket.
        self.assertEqual(get_single_seat(self.basket), self.product)

        # finds the first seat added, when there's more than one.
        basket = factories.create_basket(empty=True)
        other_seat = factories.ProductFactory(product_class=self.seat_product_class, stockrecords__price_currency='USD')
        basket.add_product(self.product)
        basket.add_product(other_seat)
        self.assertEqual(get_single_seat(basket), self.product)

        # finds the seat when there's a mixture of product classes.
        basket = factories.create_basket(empty=True)
        other_product = factories.ProductFactory(stockrecords__price_currency='USD')
        basket.add_product(other_product)
        basket.add_product(self.product)
        self.assertEqual(get_single_seat(basket), self.product)
        self.assertNotEqual(get_single_seat(basket), other_product)

        # returns None when there's no seats.
        basket = factories.create_basket(empty=True)
        basket.add_product(other_product)
        self.assertIsNone(get_single_seat(basket))

        # returns None for an empty basket.
        basket = factories.create_basket(empty=True)
        self.assertIsNone(get_single_seat(basket))
Example #3
0
 def setUp(self):
     self.range = models.Range.objects.create(
         name="All products range", includes_all_products=True)
     self.basket = factories.create_basket(empty=True)
     self.condition = models.CountCondition(
         range=self.range, type="Count", value=2)
     self.offer = mock.Mock()
    def test_consume_stock_allocations_track_stock_on(self):
        product_class = factories.ProductClassFactory(
            requires_shipping=False, track_stock=True)
        product = factories.ProductFactory(product_class=product_class)
        basket = factories.create_basket(empty=True)
        add_product(basket, D('10.00'), 5, product=product)
        order = factories.create_order(basket=basket)

        stockrecord = product.stockrecords.get()
        num_in_stock = stockrecord.num_in_stock
        num_allocated = stockrecord.num_allocated

        lines = order.lines.all()
        self.handler.consume_stock_allocations(
            order, lines, [line.quantity for line in lines])

        stockrecord.refresh_from_db()
        self.assertEqual(
            stockrecord.num_allocated,
            num_allocated - 5,
            "Allocated stock should have decreased, but didn't."
        )
        self.assertEqual(
            stockrecord.num_in_stock,
            num_in_stock - 5,
            "Stock should have decreased, but didn't."
        )
Example #5
0
    def test_payment_error_with_duplicate_payment_id(self):
        """
        Verify that we fail gracefully when PayPal sends us the wrong payment ID,
        logging the exception and redirecting the user to an LMS checkout error page.
        """
        logger_name = 'ecommerce.extensions.payment.views.paypal'
        with LogCapture(logger_name) as l:
            self.mock_oauth2_response()

            # Create payment records with different baskets which will have same payment ID
            self.mock_payment_creation_response(self.basket)
            self.processor.get_transaction_parameters(self.basket, request=self.request)

            dummy_basket = factories.create_basket()
            self.mock_payment_creation_response(dummy_basket)
            self.processor.get_transaction_parameters(dummy_basket, request=self.request)

            self._assert_error_page_redirect()
            l.check(
                (
                    logger_name,
                    'INFO',
                    'Payment [{payment_id}] approved by payer [{payer_id}]'.format(
                        payment_id=self.PAYMENT_ID,
                        payer_id=self.PAYER_ID
                    )
                ),
                (
                    logger_name,
                    'ERROR',
                    'Duplicate payment ID [{payment_id}] received from PayPal.'.format(payment_id=self.PAYMENT_ID),
                ),
            )
    def test_basket_offers_are_ordered(self):
        voucher = Voucher.objects.create(
            name="Test voucher",
            code="test",
            start_date=datetime.date.today(),
            end_date=datetime.date.today() + datetime.timedelta(days=12),
        )

        voucher.offers = [
            factories.create_offer(name="A", priority=0),
            factories.create_offer(name="B", priority=7),
            factories.create_offer(name="C", priority=5),
            factories.create_offer(name="D", priority=7),
            factories.create_offer(name="E", priority=1),
        ]

        basket = factories.create_basket()
        user = mock.Mock()

        # Apply voucher to basket
        basket.vouchers.add(voucher)

        offers = utils.Applicator().get_basket_offers(basket, user)
        ordered_names = [offer.name for offer in offers]
        self.assertEqual(["B", "D", "C", "E", "A"], ordered_names)
Example #7
0
    def setUp(self):
        """
        Creates two orders. order_in has self.user in it's partner users list.
        """
        super(PermissionBasedDashboardOrderTestsBase, self).setUp()
        self.address = G(ShippingAddress)
        self.basket_in = create_basket()
        self.basket_out = create_basket()
        # replace partner with one that has the user in it's users list
        self.partner_in = G(Partner, users=[self.user])
        stockrecord = self.basket_in.lines.all()[0].stockrecord
        stockrecord.partner = self.partner_in
        stockrecord.save()

        self.order_in = create_order(basket=self.basket_in, shipping_address=self.address)
        self.order_out = create_order(basket=self.basket_out, shipping_address=self.address)
Example #8
0
 def setUp(self):
     basket = create_basket(empty=True)
     add_product(basket, D("10.00"), 4)
     self.order = create_order(number="100002", basket=basket)
     self.line = self.order.lines.all()[0]
     self.order_placed, __ = ShippingEventType.objects.get_or_create(code="order_placed", name="Order placed")
     self.dispatched, __ = ShippingEventType.objects.get_or_create(code="dispatched", name="Dispatched")
Example #9
0
    def test_formset_with_removed_line(self):
        products = [create_product() for i in range(3)]
        basket = factories.create_basket(empty=True)
        basket.owner = self.user
        basket.save()

        add_product(basket, product=products[0])
        add_product(basket, product=products[1])
        add_product(basket, product=products[2])
        response = self.get(reverse('basket:summary'))
        formset = response.context['formset']
        self.assertEqual(len(formset.forms), 3)

        basket.lines.filter(product=products[0]).delete()

        management_form = formset.management_form
        data = {
            formset.add_prefix('INITIAL_FORMS'): management_form.initial['INITIAL_FORMS'],
            formset.add_prefix('MAX_NUM_FORMS'): management_form.initial['MAX_NUM_FORMS'],
            formset.add_prefix('TOTAL_FORMS'): management_form.initial['TOTAL_FORMS'],
            'form-0-quantity': 1,
            'form-0-id': formset.forms[0].instance.id,
            'form-1-quantity': 2,
            'form-1-id': formset.forms[1].instance.id,
            'form-2-quantity': 2,
            'form-2-id': formset.forms[2].instance.id,
        }
        response = self.post(reverse('basket:summary'), params=data)
        self.assertEqual(response.status_code, 302)
        formset = response.follow().context['formset']
        self.assertEqual(len(formset.forms), 2)
        self.assertEqual(len(formset.forms_with_instances), 2)
        self.assertEqual(basket.lines.all()[0].quantity, 2)
        self.assertEqual(basket.lines.all()[1].quantity, 2)
Example #10
0
    def test_multiple_payment_events(self):
        basket = factories.create_basket(empty=True)
        user = factories.UserFactory()
        add_product(basket, D('100.00'))
        order_placement = OrderPlacementMixin()
        order_placement.add_payment_event('Gift Card Payment', D('10'))
        order_placement.add_payment_event('Credit Card Payment', D('90'))
        shipping_method = Free()
        shipping_charge = shipping_method.calculate(basket)
        order_total = OrderTotalCalculator().calculate(basket, shipping_charge)

        billing_address = factories.BillingAddressFactory()
        shipping_address = factories.ShippingAddressFactory()
        order_submission_data = {'user': user,
                                 'order_number': '12345',
                                 'basket': basket,
                                 'shipping_method': shipping_method,
                                 'shipping_charge': shipping_charge,
                                 'order_total': order_total,
                                 'billing_address': billing_address,
                                 'shipping_address': shipping_address}
        order_placement.place_order(**order_submission_data)
        order1 = Order.objects.get(number='12345')
        self.assertEqual(order1.payment_events.count(), 2)
        event1 = order1.payment_events.all()[0]
        event2 = order1.payment_events.all()[1]
        self.assertEqual(event1.event_type.name, 'Credit Card Payment')
        self.assertEqual(event1.amount, D('90'))
        self.assertEqual(event1.lines.count(), 1)
        self.assertEqual(event2.event_type.name, 'Gift Card Payment')
        self.assertEqual(event2.amount, D('10'))
        self.assertEqual(event2.lines.count(), 1)
Example #11
0
 def setUp(self):
     super(InvoiceTests, self).setUp()
     self.basket = factories.create_basket(empty=True)
     self.basket.owner = factories.UserFactory()
     self.basket.order = factories.OrderFactory()
     self.basket.save()
     self.invoice = Invoice.objects.create(order=self.basket.order, state='Paid')
Example #12
0
    def test_moving_from_saved_basket(self):
        self.user = User.objects.create_user(username='******', password='******',
                                             email='*****@*****.**')
        product = create_product(price=D('10.00'), num_in_stock=2)
        basket = factories.create_basket(empty=True)
        basket.owner = self.user
        basket.save()
        add_product(basket, product=product)

        saved_basket, created = Basket.saved.get_or_create(owner=self.user)
        saved_basket.strategy = basket.strategy
        add_product(saved_basket, product=product)

        response = self.get(reverse('basket:summary'))
        saved_formset = response.context['saved_formset']
        saved_form = saved_formset.forms[0]

        data = {
            saved_formset.add_prefix('INITIAL_FORMS'): 1,
            saved_formset.add_prefix('MAX_NUM_FORMS'): 1,
            saved_formset.add_prefix('TOTAL_FORMS'): 1,
            saved_form.add_prefix('id'): saved_form.initial['id'],
            saved_form.add_prefix('move_to_basket'): True,
        }
        response = self.post(reverse('basket:saved'), params=data)
        self.assertEqual(Basket.open.get(id=basket.id).lines.get(
            product=product).quantity, 2)
        self.assertRedirects(response, reverse('basket:summary'))
Example #13
0
    def setUp(self):
        User = get_user_model()
        self.user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******'
        )
        self.product_class = factories.ProductClassFactory(
            name='Seat', requires_shipping=False, track_stock=False
        )
        self.course = factories.ProductFactory(
            structure='parent', upc='001', title='EdX DemoX Course', product_class=self.product_class
        )
        self.seat = factories.ProductFactory(
            structure='child',
            upc='002',
            title='Seat in EdX DemoX Course with Honor Certificate',
            product_class=self.product_class,
            parent=self.course
        )
        for stock_record in self.seat.stockrecords.all():
            stock_record.price_currency = 'USD'
            stock_record.save()

        basket = factories.create_basket(empty=True)
        basket.add_product(self.seat, 1)
        self.order = factories.create_order(number=1, basket=basket, user=self.user)

        # Move the order from 'Open' to 'Paid' so fulfillment can be completed.
        self.order.set_status(ORDER.BEING_PROCESSED)
        self.order.set_status(ORDER.PAID)
    def setUp(self):
        # Create a product
        self.product_main = create_product(product_class='Stuff')
        create_stockrecord(self.product_main, D('5000.00'), num_in_stock=100)

        # Create a range
        self.range_main = Range.objects.create(name='Stuff')
        self.range_main.add_product(self.product_main)

        # Create an offer which gives $500 off a product
        cond = Condition()
        cond.proxy_class = 'oscarbluelight.offer.conditions.BluelightCountCondition'
        cond.value = 1
        cond.range = self.range_main
        cond.save()

        benefit = Benefit()
        benefit.proxy_class = 'oscarbluelight.offer.benefits.BluelightAbsoluteDiscountBenefit'
        benefit.value = 500
        benefit.range = self.range_main
        benefit.save()

        offer = ConditionalOffer()
        offer.condition = cond
        offer.benefit = benefit
        offer.save()

        self.basket = create_basket(empty=True)
Example #15
0
    def test_notify_purchaser(self, mock_task):
        """ Verify the notification is scheduled if the site has notifications enabled
        and the refund is for a course seat.
        """
        site_configuration = self.site.siteconfiguration
        site_configuration.send_refund_notifications = True

        user = UserFactory()

        course = CourseFactory()
        price = Decimal(100.00)
        product = course.create_or_update_seat('verified', True, price, self.partner)

        basket = create_basket(empty=True)
        basket.site = self.site
        basket.add_product(product)

        order = create_order(basket=basket, user=user)
        order_url = get_receipt_page_url(site_configuration, order.number)

        refund = Refund.create_with_lines(order, order.lines.all())

        with LogCapture(REFUND_MODEL_LOGGER_NAME) as l:
            refund._notify_purchaser()  # pylint: disable=protected-access

        msg = 'Course refund notification scheduled for Refund [{}].'.format(refund.id)
        l.check(
            (REFUND_MODEL_LOGGER_NAME, 'INFO', msg)
        )

        amount = format_currency(order.currency, price)
        mock_task.assert_called_once_with(
            user.email, refund.id, amount, course.name, order.number, order_url, site_code=self.partner.short_code
        )
def build_submission():
    basket = factories.create_basket()
    # Ensure taxes aren't set by default
    basket.strategy = strategy.US()

    # Ensure partner has an address
    partner = basket.lines.all()[0].stockrecord.partner
    G(partner_models.PartnerAddress, partner=partner)

    shipping_address = G(models.ShippingAddress,
                         phone_number='')
    shipping_method = methods.FixedPrice(D('0.99'))
    shipping_charge = shipping_method.calculate(basket)

    calculator = calculators.OrderTotalCalculator()
    total = calculator.calculate(basket, shipping_charge)

    return {
        'user': None,
        'basket': basket,
        'shipping_address': shipping_address,
        'shipping_method': shipping_method,
        'shipping_charge': shipping_charge,
        'order_total': total,
        'order_kwargs': {},
        'payment_kwargs': {}}
Example #17
0
 def setUp(self):
     self.basket = create_basket(empty=True)
     self.product = create_product(price=100)
     range = RangeFactory(products=[self.product])
     condition = ConditionFactory(range=range, value=2)
     self.voucher = VoucherFactory()
     self.voucher.offers.add(create_offer(offer_type='Voucher', range=range, condition=condition))
Example #18
0
    def setUp(self):
        # Override all loggers, suppressing logging calls of severity CRITICAL and below
        logging.disable(logging.CRITICAL)

        user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******'
        )

        self.product_class = factories.ProductClassFactory(
            name='Seat',
            requires_shipping=False,
            track_stock=False
        )

        product_attribute = factories.ProductAttributeFactory(
            name='course_key',
            code='course_key',
            product_class=self.product_class,
            type='text'
        )

        fried_chicken = factories.ProductFactory(
            structure='parent',
            title=u'𝑭𝒓𝒊𝒆𝒅 𝑪𝒉𝒊𝒄𝒌𝒆𝒏',
            product_class=self.product_class,
            stockrecords=None,
        )

        factories.ProductAttributeValueFactory(
            attribute=product_attribute,
            product=fried_chicken,
            value_text='pollos/chickenX/2015'
        )

        pollos_hermanos = factories.ProductFactory(
            structure='child',
            parent=fried_chicken,
            title=u'𝕃𝕠𝕤 ℙ𝕠𝕝𝕝𝕠𝕤 ℍ𝕖𝕣𝕞𝕒𝕟𝕠𝕤',
            stockrecords__partner_sku=u'ṠÖṀЁṪḦЇṄĠ⸚ḊЁḶЇĊЇÖÜṠ',
            stockrecords__price_excl_tax=D('9.99'),
        )

        self.attribute_value = factories.ProductAttributeValueFactory(
            attribute=product_attribute,
            product=pollos_hermanos,
            value_text='pollos/hermanosX/2015'
        )

        basket = factories.create_basket(empty=True)
        basket.add_product(pollos_hermanos, 1)

        self.order = factories.create_order(
            number=self.ORDER_NUMBER, basket=basket, user=user, status=ORDER.BEING_PROCESSED
        )
        # the processor will pass through a string representation of this
        self.order_total = unicode(self.order.total_excl_tax)

        # Remove logger override
        self.addCleanup(logging.disable, logging.NOTSET)
Example #19
0
    def setUp(self):
        basket = create_basket(empty=True)
        add_product(basket, D("10.00"), 4)
        self.order = create_order(number="100002", basket=basket)
        self.line = self.order.lines.all()[0]

        self.shipped, __ = ShippingEventType.objects.get_or_create(name="Shipped")
        self.returned, __ = ShippingEventType.objects.get_or_create(name="Returned")
Example #20
0
    def test_allows_a_product_quantity_to_be_increased(self):
        basket = factories.create_basket()
        product = basket.all_lines()[0].product

        # Add more of the same product
        data = {'quantity': 1}
        form = forms.AddToBasketForm(basket=basket, product=product, data=data)
        self.assertTrue(form.is_valid())
 def setUp(self):
     self.order = factories.create_order()
     self.handler = EventHandler()
     basket = factories.create_basket(empty=True)
     add_product(basket, D('10.00'), 5)
     self.order = factories.create_order(basket=basket)
     self.settled = models.PaymentEventType.objects.create(
         name='Settled')
Example #22
0
 def setUp(self):
     super(InvoiceTests, self).setUp()
     self.basket = factories.create_basket(empty=True)
     self.basket.owner = factories.UserFactory()
     self.basket.order = factories.OrderFactory()
     self.basket.save()
     self.invoice = Invoice.objects.create(order=self.basket.order,
                                           state='Paid')
    def test_multi_item_basket(self):
        basket = factories.create_basket(empty=True)
        record = factories.create_stockrecord()
        basket.add_product(record.product, 7)

        charge = self.method.calculate(basket)

        self.assertEqual(D('5.00') + 7*D('1.00'), charge.incl_tax)
Example #24
0
 def _create_valid_basket(self):
     """ Creates a Basket ready for checkout. """
     basket = factories.create_basket()
     basket.owner = self.user
     basket.strategy = Selector().strategy()
     basket.site = self.site
     basket.thaw()
     return basket
Example #25
0
    def test_checks_whether_passed_product_id_matches_a_real_product(self):
        basket = factories.create_basket()
        product = basket.all_lines()[0].product

        # Add more of the same product
        data = {'quantity': -1}
        form = forms.AddToBasketForm(basket=basket, product=product, data=data)
        self.assertFalse(form.is_valid())
 def setUp(self):
     self.applicator = Applicator()
     self.basket = factories.create_basket(empty=True)
     rng = G(models.Range, includes_all_products=True)
     self.condition = G(models.Condition, range=rng, type="Value",
                        value=D('100'), proxy_class=None)
     self.benefit = G(models.Benefit, range=rng, type="Absolute",
                      value=D('10'))
Example #27
0
 def _create_basket(self, user, site, status=Basket.OPEN):
     """ Create a new Basket for the user. """
     basket = factories.create_basket()
     basket.owner = user
     basket.site = site
     basket.status = status
     basket.save()
     return basket
Example #28
0
    def test_multi_item_basket(self):
        basket = factories.create_basket(empty=True)
        record = factories.create_stockrecord()
        basket.add_product(record.product, 7)

        charge = self.method.calculate(basket)

        self.assertEqual(D('5.00') + 7 * D('1.00'), charge.incl_tax)
Example #29
0
 def setUp(self):
     self.range = models.Range.objects.create(
         name="All products range", includes_all_products=True)
     self.basket = factories.create_basket(empty=True)
     self.condition = models.ValueCondition(
         range=self.range, type="Value", value=D('10.00'))
     self.offer = mock.Mock()
     self.item = factories.create_product(price=D('5.00'))
     self.expensive_item = factories.create_product(price=D('15.00'))
Example #30
0
 def setUp(self):
     basket = create_basket(empty=True)
     add_product(basket, D('10.00'), 4)
     self.order = create_order(number='100002', basket=basket)
     self.line = self.order.lines.all()[0]
     self.order_placed, __ = ShippingEventType.objects.get_or_create(
         code='order_placed', name='Order placed')
     self.dispatched, __ = ShippingEventType.objects.get_or_create(
         code='dispatched', name='Dispatched')
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=2)
     self.offer = mock.Mock()
     self.benefit = models.AbsoluteDiscountBenefit.objects.create(
         range=range, type=models.Benefit.FIXED, value=D('3.00'))
     self.basket = factories.create_basket(empty=True)
Example #32
0
    def test_allows_a_product_quantity_to_be_increased(self):
        basket = factories.create_basket()
        product = basket.all_lines()[0].product

        # Add more of the same product
        data = {'quantity': 1}
        form = forms.AddToBasketForm(
            basket=basket, product=product, data=data)
        self.assertTrue(form.is_valid())
Example #33
0
 def setUp(self):
     basket = create_basket(empty=True)
     add_product(basket, D('10.00'), 4)
     self.order = create_order(number='100002', basket=basket)
     self.line = self.order.lines.all()[0]
     self.order_placed, __ = ShippingEventType.objects.get_or_create(
         code='order_placed', name='Order placed')
     self.dispatched, __ = ShippingEventType.objects.get_or_create(
         code='dispatched', name='Dispatched')
Example #34
0
    def setUp(self):
        super(RetrieveOrderViewTests, self).setUp()
        user = self.create_user()
        self.basket = factories.create_basket()
        order_number = OrderNumberGenerator.order_number(self.basket)
        self.order = factories.create_order(number=order_number, basket=self.basket, user=user)

        self.token = self.generate_jwt_token_header(user)
        self.url = reverse('api:v1:orders:retrieve', kwargs={'number': self.order.number})
 def setUp(self):
     self.range = models.Range.objects.create(
         name="All products", includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=self.range,
         type=models.Condition.COUNT,
         value=3)
     self.offer = mock.Mock()
     self.basket = factories.create_basket(empty=True)
    def test_get_upsell_message_or(self):
        offer = self._build_offer(CompoundCondition.OR)

        product = create_product()
        create_stockrecord(product, D('1.00'), num_in_stock=10)

        basket = create_basket(empty=True)
        basket.add_product(product, quantity=1)
        self.assertEqual(offer.condition.proxy().get_upsell_message(offer, basket), 'Spend $9.00 more from site or Buy 1 more product from site')
Example #37
0
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=3)
     self.benefit = models.MultibuyDiscountBenefit.objects.create(
         range=range, type=models.Benefit.MULTIBUY)
     self.offer = mock.Mock()
     self.basket = create_basket(empty=True)
Example #38
0
    def setUp(self):
        """
        Creates two orders. order_in has self.user in it's partner users list.
        """
        super(PermissionBasedDashboardOrderTestsBase, self).setUp()
        self.address = G(ShippingAddress)
        self.basket_in = create_basket()
        self.basket_out = create_basket()
        # replace partner with one that has the user in it's users list
        self.partner_in = G(Partner, users=[self.user])
        stockrecord = self.basket_in.lines.all()[0].stockrecord
        stockrecord.partner = self.partner_in
        stockrecord.save()

        self.order_in = create_order(basket=self.basket_in,
                                     shipping_address=self.address)
        self.order_out = create_order(basket=self.basket_out,
                                      shipping_address=self.address)
Example #39
0
 def setUp(self):
     self.products = [factories.create_product(), factories.create_product()]
     self.range = models.Range.objects.create(name="Some products")
     for product in self.products:
         self.range.included_products.add(product)
         self.range.included_products.add(product)
     self.basket = factories.create_basket(empty=True)
     self.condition = models.CoverageCondition(
         range=self.range, type="Coverage", value=2)
Example #40
0
    def test_checks_whether_passed_product_id_matches_a_real_product(self):
        basket = factories.create_basket()
        product = basket.all_lines()[0].product

        # Add more of the same product
        data = {'quantity': -1}
        form = forms.AddToBasketForm(
            basket=basket, product=product, data=data)
        self.assertFalse(form.is_valid())
Example #41
0
    def setUp(self):
        """
        Creates two orders. order_in has self.user in it's partner users list.
        """
        super().setUp()
        self.address = ShippingAddressFactory()
        self.basket_in = create_basket()
        self.basket_out = create_basket()
        # replace partner with one that has the user in it's users list
        self.partner_in = PartnerFactory(users=[self.user])
        stockrecord = self.basket_in.lines.all()[0].stockrecord
        stockrecord.partner = self.partner_in
        stockrecord.save()

        self.order_in = create_order(basket=self.basket_in,
                                     shipping_address=self.address)
        self.order_out = create_order(basket=self.basket_out,
                                      shipping_address=self.address)
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=3)
     self.benefit = models.FixedPriceBenefit.objects.create(
         range=range, type=models.Benefit.FIXED_PRICE, value=D('20.00'))
     self.offer = mock.Mock()
     self.basket = factories.create_basket(empty=True)
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.ValueCondition.objects.create(
         range=range, type=models.Condition.VALUE, value=D('10.00'))
     self.benefit = models.MultibuyDiscountBenefit.objects.create(
         range=range, type=models.Benefit.MULTIBUY, value=1)
     self.offer = mock.Mock()
     self.basket = factories.create_basket(empty=True)
Example #44
0
    def test_unicode(self):
        """ Verify the __unicode__ method returns the correct value. """
        basket = factories.create_basket()
        expected = u"{id} - {status} basket (owner: {owner}, lines: {num_lines})".format(
            id=basket.id,
            status=basket.status,
            owner=basket.owner,
            num_lines=basket.num_lines)

        self.assertEqual(unicode(basket), expected)
Example #45
0
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=2)
     self.benefit = models.PercentageDiscountBenefit.objects.create(
         range=range, type=models.Benefit.PERCENTAGE, value=20)
     self.offer = mock.Mock()
     self.offer.applies_to_tax_exclusive_prices = False
     self.basket = factories.create_basket(empty=True)
 def setUp(self):
     self.products = [factories.create_product(), factories.create_product()]
     self.range = models.Range.objects.create(name="Some products")
     for product in self.products:
         self.range.add_product(product)
         self.range.add_product(product)
     self.basket = factories.create_basket(empty=True)
     self.condition = models.CoverageCondition(
         range=self.range, type="Coverage", value=2)
     self.offer = mock.Mock()
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.ValueCondition.objects.create(
         range=range, type=models.Condition.VALUE, value=D('10.00'))
     self.benefit = models.AbsoluteDiscountBenefit.objects.create(
         range=range, type=models.Benefit.FIXED, value=D('3.00'))
     self.offer = mock.Mock()
     self.offer.applies_to_tax_exclusive_prices = False
     self.basket = factories.create_basket(empty=True)
Example #48
0
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=2)
     self.benefit = models.ShippingPercentageDiscountBenefit.objects.create(
         type=models.Benefit.SHIPPING_PERCENTAGE, value=50)
     self.offer = models.ConditionalOffer(condition=self.condition,
                                          benefit=self.benefit)
     self.basket = factories.create_basket(empty=True)
 def setUp(self):
     self.basket = create_basket(empty=True)
     self.product = create_product(price=100)
     range = RangeFactory(products=[self.product])
     condition = ConditionFactory(range=range, value=2)
     self.voucher = VoucherFactory()
     self.voucher.offers.add(
         create_offer(offer_type='Voucher',
                      range=range,
                      condition=condition))
    def test_contains_coupon(self):
        self.assertFalse(self.order.contains_coupon)

        product = factories.create_product(
            product_class=COUPON_PRODUCT_CLASS_NAME)
        basket = factories.create_basket(empty=True)
        factories.create_stockrecord(product, num_in_stock=1)
        basket.add_product(product)
        order = factories.create_order(basket=basket)
        self.assertTrue(order.contains_coupon)
Example #51
0
    def test_consumes_correct_number_of_products_for_4_product_basket(self):
        basket = factories.create_basket(empty=True)
        add_products(basket, [(D('1'), 2), (D('1'), 2)])

        self.assertTrue(self.offer.is_condition_satisfied(basket))
        discount = self.offer.apply_benefit(basket)
        self.assertTrue(discount.discount > 0)
        self.assertEqual(3, basket.num_items_with_discount)
        self.assertEqual(1, basket.num_items_without_discount)
        self.assertFalse(self.offer.is_condition_satisfied(basket))
Example #52
0
    def setUp(self):
        basket = create_basket(empty=True)
        add_product(basket, D('10.00'), 4)
        self.order = create_order(number='100002', basket=basket)
        self.line = self.order.lines.all()[0]

        self.shipped, __ = ShippingEventType.objects.get_or_create(
            name='Shipped')
        self.returned, __ = ShippingEventType.objects.get_or_create(
            name='Returned')
Example #53
0
    def setUp(self):
        super(PaymentProcessorTestCaseMixin, self).setUp()

        self.course = Course.objects.create(id='a/b/c', name='Demo Course')
        self.product = self.course.create_or_update_seat(self.CERTIFICATE_TYPE, False, 20, self.partner)

        self.processor = self.processor_class()  # pylint: disable=not-callable
        self.basket = factories.create_basket(empty=True)
        self.basket.add_product(self.product)
        self.basket.owner = factories.UserFactory()
        self.basket.save()
Example #54
0
 def setUp(self):
     range = models.Range.objects.create(name="All products",
                                         includes_all_products=True)
     self.condition = models.CountCondition.objects.create(
         range=range, type=models.Condition.COUNT, value=2)
     self.benefit = models.PercentageDiscountBenefit.objects.create(
         range=range,
         type=models.Benefit.PERCENTAGE,
         value=20,
         max_affected_items=1)
     self.basket = factories.create_basket(empty=True)
    def test_zero_charge_with_shipping_discount(self):
        offer = factories.create_offer(benefit=Benefit.objects.create(
            type=Benefit.SHIPPING_FIXED_PRICE, value=1), )
        basket = factories.create_basket()
        Applicator().apply_offers(basket, [offer])

        # Similar to test_zero_charge_discount(),
        # but now test how the repository deals with it.
        method = Repository().apply_shipping_offer(basket, self.standard,
                                                   offer)
        self.assertEqual(D('0.00'), method.discount(basket))
Example #56
0
    def test_prevents_event_quantities_higher_than_original_line(self):
        basket = factories.create_basket(empty=True)
        add_product(basket, D('10.00'), 5)
        order = factories.create_order(basket=basket)

        # First shipping event
        lines = order.lines.all()
        self.handler.handle_shipping_event(order, self.shipped, lines, [4])

        with self.assertRaises(exceptions.InvalidShippingEvent):
            self.handler.handle_shipping_event(order, self.shipped, lines, [4])
Example #57
0
 def setUp(self):
     self.applicator = Applicator()
     rng = RangeFactory(includes_all_products=True)
     self.condition = ConditionFactory(
         range=rng, type=ConditionFactory._meta.model.VALUE,
         value=D('100'), proxy_class=None)
     self.benefit = BenefitFactory(
         range=rng, type=BenefitFactory._meta.model.FIXED,
         value=D('10'), max_affected_items=1)
     self.basket = factories.create_basket()
     self.line = self.basket.all_lines()[0]
Example #58
0
 def test_partner_name_is_optional(self):
     for partner_name, order_number in [('', 'A'), ('p1', 'B')]:
         self.basket = factories.create_basket(empty=True)
         product = factories.create_product(partner_name=partner_name)
         add_product(self.basket, D('12.00'), product=product)
         place_order(self.creator,
                     basket=self.basket,
                     order_number=order_number)
         line = Order.objects.get(number=order_number).lines.all()[0]
         partner = product.stockrecords.all()[0].partner
         self.assertTrue(partner_name == line.partner_name == partner.name)
Example #59
0
    def setUp(self):
        """
        Creates two orders. order_in has self.user in it's partner users list.
        """
        self.client = Client()
        self.user = self.create_user(username='******',
                                     is_staff=False)
        self.address = G(ShippingAddress)
        self.basket_in = create_basket()
        self.basket_out = create_basket()
        # replace partner with one that has the user in it's users list
        self.partner_in = G(Partner, users=[self.user])
        stockrecord = self.basket_in.lines.all()[0].stockrecord
        stockrecord.partner = self.partner_in
        stockrecord.save()

        self.order_in = create_order(basket=self.basket_in,
                                     shipping_address=self.address)
        self.order_out = create_order(basket=self.basket_out,
                                      shipping_address=self.address)