示例#1
0
    def test_track_completed_discounted_order_with_offer(self):
        """ An event including a discount but no coupon should be sent to Segment"""
        with mock.patch(
                'ecommerce.extensions.checkout.signals.track_segment_event'
        ) as mock_track:
            # Orders may be discounted by a fixed value
            offer_discount = 5
            product = ProductFactory(categories=[],
                                     stockrecords__price_currency='USD')
            _range = factories.RangeFactory(products=[product], )
            site_offer = factories.ConditionalOfferFactory(
                offer_type=ConditionalOffer.SITE,
                benefit=factories.BenefitFactory(range=_range,
                                                 value=offer_discount),
                condition=factories.ConditionFactory(type=Condition.COVERAGE,
                                                     value=1,
                                                     range=_range))

            basket = BasketFactory(owner=self.user, site=self.site)
            basket.add_product(product)
            Applicator().apply_offers(basket, [site_offer])

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            properties = self._generate_event_properties(order)
            mock_track.assert_called_once_with(order.site, order.user,
                                               'Order Completed', properties)
示例#2
0
    def test_track_completed_enrollment_order(self):
        """ Make sure we do not send GA events for Enrollment Code orders """
        with mock.patch(
                'ecommerce.extensions.checkout.signals.track_segment_event'
        ) as mock_track:

            toggle_switch(ENROLLMENT_CODE_SWITCH, True)
            site_config = self.site.siteconfiguration
            site_config.enable_enrollment_codes = True
            site_config.save()

            course = CourseFactory()
            course.create_or_update_seat('verified',
                                         True,
                                         50,
                                         self.partner,
                                         create_enrollment_code=True)
            enrollment_code = Product.objects.get(
                product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME)

            basket = BasketFactory(owner=self.user, site=self.site)
            basket.add_product(enrollment_code)

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            assert not mock_track.called
示例#3
0
    def test_track_bundle_order(self, mock_track):
        """ If the order is a bundle purchase, we should track the associated bundle in the properties """
        order = self.prepare_order('verified')
        BasketAttribute.objects.update_or_create(
            basket=order.basket,
            attribute_type=BasketAttributeType.objects.get(name=BUNDLE),
            value_text='test_bundle')

        # Tracks a full bundle order
        with mock.patch(
                'ecommerce.extensions.checkout.signals.get_program',
                mock.Mock(return_value=self.mock_get_program_data(True))):
            track_completed_order(None, order)
            properties = self._generate_event_properties(
                order, bundle_id='test_bundle', fullBundle=True)
            mock_track.assert_called_once_with(order.site, order.user,
                                               'Order Completed', properties)

        # Tracks a partial bundle order
        with mock.patch(
                'ecommerce.extensions.checkout.signals.get_program',
                mock.Mock(return_value=self.mock_get_program_data(False))):
            mock_track.reset_mock()
            track_completed_order(None, order)
            properties = self._generate_event_properties(
                order, bundle_id='test_bundle')
            mock_track.assert_called_once_with(order.site, order.user,
                                               'Order Completed', properties)
示例#4
0
    def test_track_completed_discounted_order_with_voucher_with_offer(self):
        with mock.patch(
                'ecommerce.extensions.checkout.signals.track_segment_event'
        ) as mock_track:
            # Orders may be discounted by a fixed value
            fixed_benefit = 5.00
            offer_discount = 6
            product = ProductFactory(categories=[],
                                     stockrecords__price_currency='USD')
            _range = factories.RangeFactory(products=[product], )
            voucher, product = prepare_voucher(_range=_range,
                                               benefit_value=fixed_benefit,
                                               benefit_type=Benefit.FIXED)
            factories.ConditionalOfferFactory(
                offer_type=ConditionalOffer.SITE,
                benefit=factories.BenefitFactory(range=_range,
                                                 value=offer_discount),
                condition=factories.ConditionFactory(type=Condition.COVERAGE,
                                                     value=1,
                                                     range=_range))

            basket = BasketFactory(owner=self.user, site=self.site)
            basket.add_product(product)
            basket.vouchers.add(voucher)
            Applicator().apply(basket, user=basket.owner, request=self.request)

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            properties = self._generate_event_properties(order, voucher)
            mock_track.assert_called_once_with(order.site, order.user,
                                               'Order Completed', properties)
示例#5
0
    def test_track_completed_discounted_order_with_voucher(self):
        """ An event including coupon information should be sent to Segment"""
        with mock.patch(
                'ecommerce.extensions.checkout.signals.track_segment_event'
        ) as mock_track:
            # Orders may be discounted by percent
            percent_benefit = 66
            product = ProductFactory(categories=[],
                                     stockrecords__price_currency='USD')
            _range = factories.RangeFactory(products=[product], )
            voucher, product = prepare_voucher(_range=_range,
                                               benefit_value=percent_benefit)

            basket = factories.BasketFactory(owner=self.user, site=self.site)
            basket.add_product(product)
            basket.vouchers.add(voucher)
            Applicator().apply(basket, user=basket.owner, request=self.request)

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            properties = self._generate_event_properties(order, voucher)
            mock_track.assert_called_once_with(order.site,
                                               order.user,
                                               'Order Completed',
                                               properties,
                                               traits=properties)
示例#6
0
    def test_track_completed_order(self):
        """ An event should be sent to Segment. """

        with mock.patch(
                'ecommerce.extensions.checkout.signals.track_segment_event'
        ) as mock_track:
            order = self.prepare_order('verified')
            track_completed_order(None, order)
            properties = self._generate_event_properties(order)
            mock_track.assert_called_once_with(order.site,
                                               order.user,
                                               'Order Completed',
                                               properties,
                                               traits=properties)

            # We should be able to fire events even if the product is not related to a course.
            mock_track.reset_mock()
            order = create_order()
            track_completed_order(None, order)
            properties = self._generate_event_properties(order)
            mock_track.assert_called_once_with(order.site,
                                               order.user,
                                               'Order Completed',
                                               properties,
                                               traits=properties)
示例#7
0
 def test_track_completed_coupon_order(self):
     """ Make sure we do not send GA events for Coupon orders """
     with mock.patch(
             'ecommerce.extensions.checkout.signals.track_segment_event'
     ) as mock_track:
         order = self.prepare_coupon_order()
         track_completed_order(None, order)
         assert not mock_track.called
示例#8
0
    def test_track_completed_coupon_order(self):
        """ Make sure we do not send GA events for Coupon orders """
        with mock.patch('ecommerce.extensions.checkout.signals.track_segment_event') as mock_track:

            coupon = self.create_coupon()
            basket = factories.BasketFactory(owner=self.user, site=self.site)
            basket.add_product(coupon)

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            assert not mock_track.called
示例#9
0
    def test_track_completed_enrollment_order(self):
        """ Make sure we are sending GA events for Enrollment Code orders """
        with mock.patch('ecommerce.extensions.checkout.signals.track_segment_event') as mock_track:

            course = CourseFactory(partner=self.partner)
            course.create_or_update_seat('verified', True, 50, create_enrollment_code=True)
            enrollment_code = Product.objects.get(product_class__name=ENROLLMENT_CODE_PRODUCT_CLASS_NAME)

            basket = factories.BasketFactory(owner=self.user, site=self.site)
            basket.add_product(enrollment_code)

            order = factories.create_order(basket=basket, user=self.user)
            track_completed_order(None, order)
            assert mock_track.called