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)
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
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)
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)
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)
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)
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
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
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