def test_clean_validation_custom_exists(self): """ If a custom benefit exists, and the data for range, type and value is supplied, the form should validate. Clean should return the cleaned data. """ create_benefit(CustomBenefitModel) form = forms.BenefitForm( data={ 'range': self.range.id, 'type': Benefit.FIXED, 'value': 5, 'custom_benefit': '' }) self.assertTrue(form.is_valid()) self.assertEqual( { 'range': self.range, 'type': Benefit.FIXED, 'value': D('5'), 'custom_benefit': '', 'max_affected_items': None }, form.clean())
def test_init_with_custom_benefit(self): """ If a custom benefit exists, the type field should not be required. """ create_benefit(CustomBenefitModel) form = forms.BenefitForm() self.assertFalse(form.fields['type'].required) self.assertEqual(form.fields['custom_benefit'].initial, None)
def create_offer(): range = models.Range.objects.create(name="All products", includes_all_products=True) condition = models.CountCondition.objects.create(range=range, type=models.Condition.COUNT, value=1) benefit = custom.create_benefit(CustomAction) return models.ConditionalOffer.objects.create( condition=condition, benefit=benefit, offer_type=models.ConditionalOffer.SITE )
def test_clean_only_range_custom_exists(self): """ If a custom benefit exists, the type field is not required. Still, the clean method should throw a ValidationError, if only the range is supplied. """ create_benefit(CustomBenefitModel) form = forms.BenefitForm(data={ 'range': self.range, 'type': '', 'value': '', 'custom_benefit': '' }) self.assertFalse(form.is_valid()) self.assertRaises(ValidationError, form.clean)
def create_twin_product_offer(): try: o1 = ConditionalOffer.objects.get(slug='remove-twin-products') except: print('Modelli offer non presenti, li creo') # creare range r = create_range(AllProductsRange) c1_new = True try: c1 = create_condition(CheckTwinDigitalProducts, range=r, value=1, type=CoverageCondition.COVERAGE) except: c1_new = False c1 = CheckTwinDigitalProducts.objects.get( range=r, value=1, type=CoverageCondition.COVERAGE) print('Check Preso?', c1, 'Nuovo?', c1_new) b1 = create_benefit(FreeTwinDigitalProducts, range=r, value=100, type=PercentageDiscountBenefit.PERCENTAGE) print('Benefit Preso?', b1) o1, o1_new = ConditionalOffer.objects.get_or_create( name='Remove twin products', condition=c1, benefit=b1, offer_type=ConditionalOffer.SESSION) print('Offer Preso?', o1, 'Nuova?', o1_new) return o1
def create_twin_product_offer(): try: o1 = ConditionalOffer.objects.get(slug='remove-twin-products') except: print('Modelli offer non presenti, li creo') # creare range r = create_range(AllProductsRange) c1_new = True try: c1 = create_condition(CheckTwinDigitalProducts, range=r, value=1, type=CoverageCondition.COVERAGE) except: c1_new = False c1 = CheckTwinDigitalProducts.objects.get(range=r, value=1, type=CoverageCondition.COVERAGE) print('Check Preso?', c1, 'Nuovo?', c1_new) b1 = create_benefit(FreeTwinDigitalProducts, range=r, value=100, type=PercentageDiscountBenefit.PERCENTAGE) print('Benefit Preso?', b1) o1, o1_new= ConditionalOffer.objects.get_or_create(name='Remove twin products', condition=c1, benefit=b1, offer_type=ConditionalOffer.SESSION) print('Offer Preso?', o1, 'Nuova?', o1_new) return o1
def test_init_with_custom_benefit_with_instance(self): """ If a custom benefit exists and the kwargs instance is passed to init, the initial value for the custom_benefit should be the instance. """ benefit = create_benefit(CustomBenefitModel) form = forms.BenefitForm(instance=benefit) self.assertFalse(form.fields['type'].required) self.assertEqual(form.fields['custom_benefit'].initial, benefit.id)
def create_offer(): range = models.Range.objects.create(name="All products", includes_all_products=True) condition = models.CountCondition.objects.create( range=range, type=models.Condition.COUNT, value=1) benefit = custom.create_benefit(CustomAction) return models.ConditionalOffer.objects.create( condition=condition, benefit=benefit, offer_type=models.ConditionalOffer.SITE)
def test_custom_benefits_and_conditions_not_deleted(self): condition = custom.create_condition(BasketOwnerCalledBarry) condition_id = condition.id benefit = custom.create_benefit(CustomBenefitModel) benefit_id = benefit.id offer = factories.create_offer(benefit=benefit, condition=condition) offer.delete() self.assertTrue( models.Condition.objects.filter(id=condition_id).exists()) self.assertTrue(models.Benefit.objects.filter(id=benefit_id).exists())
def test_custom_benefits_and_conditions_not_deleted(self): condition = custom.create_condition(BasketOwnerCalledBarry) condition_id = condition.id benefit = custom.create_benefit(CustomBenefitModel) benefit_id = benefit.id offer = factories.create_offer(benefit=benefit, condition=condition) offer.delete() self.assertTrue( models.Condition.objects.filter(id=condition_id).exists()) self.assertTrue( models.Benefit.objects.filter(id=benefit_id).exists())
def test_clean_validation_custom_exists(self): """ If a custom benefit exists, and the data for range, type and value is supplied, the form should validate. Clean should return the cleaned data. """ create_benefit(CustomBenefitModel) form = forms.BenefitForm(data={ 'range': self.range.id, 'type': Benefit.FIXED, 'value': 5, 'custom_benefit': '' }) self.assertTrue(form.is_valid()) self.assertEqual({ 'range': self.range, 'type': Benefit.FIXED, 'value': D('5'), 'custom_benefit': '', 'max_affected_items': None }, form.clean())
def test_offer_benefit_view_with_custom_benefit_type(self): benefit = create_benefit(CustomBenefitModel) request = RequestFactory().post('/', data={ 'custom_benefit': benefit.pk, }) request.session['offer_wizard'] = { self.metadata_form_kwargs_key: json.dumps(self.metadata_form_kwargs_session_data), self.metadata_obj_key: json.dumps(self.metadata_obj_session_data), } response = offer_views.OfferBenefitView.as_view(update=True)( request, pk=self.offer.pk) self.assertEqual(response.status_code, 302) self.assertEqual( response.url, reverse('dashboard:offer-condition', kwargs={'pk': self.offer.pk})) self.assertJSONEqual( request.session['offer_wizard'][self.metadata_form_kwargs_key], self.metadata_form_kwargs_session_data) self.assertJSONEqual( request.session['offer_wizard'][self.metadata_obj_key], self.metadata_obj_session_data) self.assertJSONEqual( request.session['offer_wizard'][self.benefit_form_kwargs_key], { 'data': { 'range': None, 'type': '', 'value': None, 'max_affected_items': None, 'custom_benefit': str(benefit.pk), }, }) self.assertJSONEqual( request.session['offer_wizard'][self.benefit_obj_key], [{ 'model': 'offer.benefit', 'pk': benefit.pk, 'fields': { 'range': None, 'type': '', 'value': None, 'max_affected_items': None, 'proxy_class': benefit.proxy_class, } }])
def test_clean_validation_with_custom_benefit(self): """ If a custom benefit is selected, the form should be valid. """ benefit = create_benefit(CustomBenefitModel) form = forms.BenefitForm(data={ 'range': '', 'type': '', 'value': '', 'custom_benefit': benefit.id }) self.assertTrue(form.is_valid()) self.assertEqual({ 'range': None, 'type': '', 'value': None, 'custom_benefit': str(benefit.id), 'max_affected_items': None }, form.clean())
def setUp(self): self.custom_benefits = [ custom.create_benefit(CustomBenefitModel), custom.create_benefit(CustomBenefitWithoutName)]