def test_save_edit(self):
        """ Previously-created ConditionalOffer, Benefit, and Condition instances should be updated. """
        offer = factories.EnterpriseOfferFactory()
        data = self.generate_data(
            enterprise_customer_uuid=offer.condition.enterprise_customer_uuid,
            benefit_type=Benefit.FIXED)
        self.mock_specific_enterprise_customer_api(
            data['enterprise_customer_uuid'])
        form = EnterpriseOfferForm(request=self.request,
                                   data=data,
                                   instance=offer)
        form.is_valid()
        form.save()

        offer.refresh_from_db()
        self.assert_enterprise_offer_conditions(
            offer,
            data['enterprise_customer_uuid'],
            data['enterprise_customer_name'],
            data['enterprise_customer_catalog_uuid'],
            data['benefit_value'],
            data['benefit_type'],
            'Discount of type {} provided by {} for {}.'.format(
                ConditionalOffer.SITE, data['enterprise_customer_name'][:48],
                data['enterprise_customer_catalog_uuid']),
        )
Example #2
0
 def test_save_offer_name(self):
     """ If a request object is sent, the offer name should include the enterprise name. """
     data = self.generate_data()
     self.mock_specific_enterprise_customer_api(data['enterprise_customer_uuid'])
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer,
         data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'],
         data['benefit_value'],
         data['benefit_type'],
         'Discount of type {} provided by {} for {}.'.format(
             ConditionalOffer.SITE,
             data['enterprise_customer_name'][:48],
             data['enterprise_customer_catalog_uuid']
         ),
         data['contract_discount_type'],
         data['contract_discount_value'],
         data['prepaid_invoice_amount'],
         data['sales_force_id'],
         data['max_global_applications'],
         data['max_discount'],
     )
Example #3
0
 def test_save_create_special_char_title(self):
     """ When the Enterprise's name is international, new objects should still be created."""
     enterprise_customer_uuid = uuid.uuid4()
     data = self.generate_data(
         enterprise_customer_uuid=enterprise_customer_uuid,
         enterprise_customer_name=u'Sp\xe1nish Enterprise',
     )
     self.mock_specific_enterprise_customer_api(data['enterprise_customer_uuid'], name=u'Sp\xe1nish Enterprise')
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer,
         data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'],
         data['benefit_value'],
         data['benefit_type'],
         'Discount of type Site provided by Spánish Enterprise for {}.'.format(
             data['enterprise_customer_catalog_uuid']
         ),
         data['contract_discount_type'],
         data['contract_discount_value'],
         data['prepaid_invoice_amount'],
         data['sales_force_id'],
         data['max_global_applications'],
         data['max_discount'],
     )
Example #4
0
 def test_save_create(self):
     """
     A new ConditionalOffer, Benefit, Condition, and
     EnterpriseContractMetadata should be created.
     """
     data = self.generate_data()
     self.mock_specific_enterprise_customer_api(
         data['enterprise_customer_uuid'])
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer,
         data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'],
         data['benefit_value'],
         data['benefit_type'],
         'Discount of type {} provided by {} for {}.'.format(
             ConditionalOffer.SITE, data['enterprise_customer_name'][:48],
             data['enterprise_customer_catalog_uuid']),
         data['contract_discount_type'],
         data['contract_discount_value'],
         data['prepaid_invoice_amount'],
     )
Example #5
0
 def test_save_without_commit(self):
     """ No data should be persisted to the database if the commit kwarg is set to False. """
     data = self.generate_data()
     form = EnterpriseOfferForm(request=self.request, data=data)
     self.mock_specific_enterprise_customer_api(data['enterprise_customer_uuid'])
     form.is_valid()
     instance = form.save(commit=False)
     self.assertIsNone(instance.pk)
     self.assertFalse(hasattr(instance, 'benefit'))
     self.assertFalse(hasattr(instance, 'condition'))
Example #6
0
 def test_max_user_discount_clean_with_refunded_enrollments(self):
     """
     Verify that `clean` for `max_user_discount` and `max_user_applications` does not raise error when total consumed
      discount and total max user applications after refund is still less than the value, and the existing offer
      updates with new per user limit and max user application values.
     """
     current_refund_count = 0
     data = self.generate_data(max_user_applications=3,
                               max_user_discount=300)
     self.mock_specific_enterprise_customer_api(
         data['enterprise_customer_uuid'])
     # create an enterprise offer that can provide max $500 discount and consume $400
     offer = factories.EnterpriseOfferFactory(max_user_applications=5,
                                              max_user_discount=500)
     for _ in range(4):
         order = OrderFactory(user=self.user, status=ORDER.COMPLETE)
         OrderDiscountFactory(order=order, offer_id=offer.id, amount=100)
         # create a refund of $200 so the total consumed discount becomes $200
         if current_refund_count < 2:
             RefundFactory(order=order,
                           user=self.user,
                           status=REFUND.COMPLETE)
             current_refund_count += 1
     # now try to update the offer with max_user_discount set to $300
     # which is still greater than the consumed discount after refund $200
     form = EnterpriseOfferForm(request=self.request,
                                data=data,
                                instance=offer)
     self.assertTrue(form.is_valid())
     offer = form.save()
     self.assertEqual(offer.max_user_applications,
                      data['max_user_applications'])
     self.assertEqual(offer.max_user_discount, data['max_user_discount'])
Example #7
0
 def test_save_create_special_char_title(self):
     """ When the Enterprise's name is international, new objects should still be created."""
     enterprise_customer_uuid = uuid.uuid4()
     data = self.generate_data(
         enterprise_customer_uuid=enterprise_customer_uuid,
         enterprise_customer_name=u'Sp\xe1nish Enterprise',
     )
     self.mock_specific_enterprise_customer_api(
         data['enterprise_customer_uuid'], name=u'Sp\xe1nish Enterprise')
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer, data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'], data['benefit_value'],
         data['benefit_type'], 'Discount provided by Spánish Enterprise.')
Example #8
0
 def test_save_offer_name(self):
     """ If a request object is sent, the offer name should include the enterprise name. """
     data = self.generate_data()
     self.mock_specific_enterprise_customer_api(
         data['enterprise_customer_uuid'])
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer,
         data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'],
         data['benefit_value'],
         data['benefit_type'],
         'Discount provided by {}.'.format(
             data['enterprise_customer_name']),
     )
Example #9
0
 def test_save_create(self):
     """ A new ConditionalOffer, Benefit, and Condition should be created. """
     data = self.generate_data()
     self.mock_specific_enterprise_customer_api(
         data['enterprise_customer_uuid'])
     form = EnterpriseOfferForm(request=self.request, data=data)
     form.is_valid()
     offer = form.save()
     self.assert_enterprise_offer_conditions(
         offer,
         data['enterprise_customer_uuid'],
         data['enterprise_customer_name'],
         data['enterprise_customer_catalog_uuid'],
         data['benefit_value'],
         data['benefit_type'],
         'Discount provided by {}.'.format(
             data['enterprise_customer_name']),
     )
Example #10
0
 def test_emails_for_usage_alert(self, emails_for_usage_alert, is_valid_form, expected_errors):
     """
     Test emails_for_usage_alert field with valid and invalid data
     """
     data = self.generate_data(emails_for_usage_alert=emails_for_usage_alert)
     form = EnterpriseOfferForm(data=data)
     if is_valid_form:
         self.assertTrue(form.is_valid())
     else:
         self.assert_form_errors(data, {'emails_for_usage_alert': expected_errors})
Example #11
0
    def test_save_edit(self):
        """ Previously-created ConditionalOffer, Benefit, and Condition instances should be updated. """
        offer = factories.EnterpriseOfferFactory()
        ecm = EnterpriseContractMetadata(
            discount_value=self.contract_discount_value,
            discount_type=self.contract_discount_type,
            amount_paid=self.prepaid_invoice_amount,
        )
        offer.enterprise_contract_metadata = ecm
        data = self.generate_data(
            enterprise_customer_uuid=offer.condition.enterprise_customer_uuid,
            benefit_type=Benefit.FIXED
        )
        self.mock_specific_enterprise_customer_api(data['enterprise_customer_uuid'])
        form = EnterpriseOfferForm(request=self.request, data=data, instance=offer)
        form.is_valid()
        form.save()

        offer.refresh_from_db()
        self.assert_enterprise_offer_conditions(
            offer,
            data['enterprise_customer_uuid'],
            data['enterprise_customer_name'],
            data['enterprise_customer_catalog_uuid'],
            data['benefit_value'],
            data['benefit_type'],
            'Discount of type {} provided by {} for {}.'.format(
                ConditionalOffer.SITE,
                data['enterprise_customer_name'][:48],
                data['enterprise_customer_catalog_uuid']
            ),
            data['contract_discount_type'],
            data['contract_discount_value'],
            data['prepaid_invoice_amount'],
            data['sales_force_id'],
            data['max_global_applications'],
            data['max_discount'],
            data['max_user_applications'],
            data['max_user_discount'],
        )
Example #12
0
 def test_create_when_conditional_offer_with_uuid_exists(self):
     """
     An Enterprise Offer can be created if a conditional offer with different type and same UUIDs already exists.
     """
     data = self.generate_data()
     factories.EnterpriseOfferFactory(
         condition__enterprise_customer_uuid=data['enterprise_customer_uuid'],
         condition__enterprise_customer_name=data['enterprise_customer_name'],
         condition__enterprise_customer_catalog_uuid=data['enterprise_customer_catalog_uuid'],
         offer_type=ConditionalOffer.VOUCHER,
     )
     form = EnterpriseOfferForm(request=self.request, data=data)
     self.assertTrue(form.is_valid())
Example #13
0
 def _test_sales_force_id(self, sales_force_id, expected_error,
                          is_update_view):
     """
     Verify that `clean` for `sales_force_id` field is working as expected.
     """
     instance = None
     if is_update_view:
         instance = factories.EnterpriseOfferFactory()
     data = self.generate_data(sales_force_id=sales_force_id)
     if expected_error:
         expected_errors = {'sales_force_id': [expected_error]}
         self.assert_form_errors(data, expected_errors, instance)
     else:
         form = EnterpriseOfferForm(data=data, instance=instance)
         self.assertTrue(form.is_valid())
Example #14
0
    def test_offer_form_with_per_user_increased_limits(self):
        """
        Verify that an existing enterprise offer can be updated with per user increased limits.
        """
        data = self.generate_data(max_user_applications=40, max_user_discount=7000)
        self.mock_specific_enterprise_customer_api(data['enterprise_customer_uuid'])

        # create an enterprise offer with both max_global_applications and max_discount
        factories.EnterpriseOfferFactory(
            max_user_applications=30,
            max_user_discount=5000
        )
        # now try to update the offer with increased values
        form = EnterpriseOfferForm(request=self.request, data=data)
        self.assertTrue(form.is_valid())
        offer = form.save()
        self.assertEqual(offer.max_user_applications, data['max_user_applications'])
        self.assertEqual(offer.max_user_discount, data['max_user_discount'])
Example #15
0
 def assert_form_errors(self, data, expected_errors, instance=None):
     """ Assert that form validation fails with the expected errors. """
     form = EnterpriseOfferForm(data=data, instance=instance)
     self.assertFalse(form.is_valid())
     self.assertEqual(form.errors, expected_errors)