Exemple #1
0
 def test_should_export_product_rule_data(self):
     # GIVEN
     ProductBusinessRule.generate()
     # WHEN
     actual = ProductBusinessRule.get_rule_data()
     # THEN
     expected = self._get_rule_data()
     self.assertDictEqual(actual, expected)
Exemple #2
0
 def test_form_should_update_rule(self):
     # GIVEN
     ProductBusinessRule.generate()
     update_data = {'rules': '{"key1": "value1"}'}
     # WHEN
     response = self.client.post(reverse(
         'django_business_rules:business-rule-form', kwargs={'pk': 1}),
                                 data=update_data)
     # THEN
     self.assertEqual(response.status_code, 302, response.content)
     self.assertEqual(ProductBusinessRule.get_rules(), {'key1': 'value1'})
Exemple #3
0
 def test_should_use_correct_template_to_render_business_rule_form(self):
     # GIVEN
     ProductBusinessRule.generate()
     # WHEN
     response = self.client.post(
         # not the best idea to put '1'
         # but no other idea how to do it without using model
         reverse('dbr:business-rule-form', kwargs={'pk': 1}))
     # THEN
     self.assertEqual(response.status_code, 200, response.content)
     self.assertTemplateUsed(
         response, 'django_business_rules/business_rule_form.html')
Exemple #4
0
 def test_should_save_rule_in_database(self):
     # GIVEN
     with self.assertRaises(BusinessRuleModel.DoesNotExist):
         ProductBusinessRule.get_rule_data()
     out = StringIO()
     try:
         # WHEN
         call_command(self.COMMAND_NAME, verbosity=2, stdout=out)
         # THEN
         self.assertEqual(self._get_rule_data(),
                          ProductBusinessRule.get_rule_data())
     except Exception:
         self._print_output(out)
         raise
Exemple #5
0
    def _assert_rule_executed(self, product_for_order, product_not_for_order):
        mommy.make(ProductOrder,
                   product=product_for_order,
                   expiration_date=datetime.datetime.now() +
                   timezone.timedelta(days=4))
        mommy.make(ProductOrder,
                   product=product_not_for_order,
                   expiration_date=datetime.datetime.now() +
                   timezone.timedelta(days=4))

        self.assertFalse(
            ProductOrder.objects.filter(product=product_for_order,
                                        quantity=40).exists())
        self.assertFalse(
            ProductOrder.objects.filter(product=product_not_for_order,
                                        quantity=40).exists())

        ProductBusinessRule.generate()
        ProductBusinessRule.save_rules(self._get_rules())
        # WHEN
        for product in Product.objects.all():
            ProductBusinessRule.run_all(product)
        # THEN
        self.assertTrue(
            ProductOrder.objects.filter(product=product_for_order,
                                        quantity=40).exists())
        self.assertFalse(
            ProductOrder.objects.filter(product=product_not_for_order,
                                        quantity=40).exists())
Exemple #6
0
    def test_should_execute_rules_1(self):
        # GIVEN
        product_for_sale = mommy.make(Product, current_inventory=21, price=200)
        product_not_for_sale_1 = mommy.make(Product,
                                            current_inventory=20,
                                            price=200)
        product_not_for_sale_2 = mommy.make(Product,
                                            current_inventory=21,
                                            price=200)

        mommy.make(ProductOrder,
                   product=product_for_sale,
                   expiration_date=timezone.now() + timezone.timedelta(days=4))
        mommy.make(ProductOrder,
                   product=product_not_for_sale_1,
                   expiration_date=timezone.now() + timezone.timedelta(days=4))
        mommy.make(ProductOrder,
                   product=product_not_for_sale_2,
                   expiration_date=timezone.now() + timezone.timedelta(days=5))

        ProductBusinessRule.generate()
        ProductBusinessRule.save_rules(self._get_rules())
        # WHEN
        for product in Product.objects.all():
            ProductBusinessRule.run_all(product)
        # THEN
        product_for_sale.refresh_from_db()
        product_not_for_sale_1.refresh_from_db()
        product_not_for_sale_2.refresh_from_db()
        self.assertEqual(product_for_sale.price, 150)
        self.assertEqual(product_not_for_sale_1.price, 200)
        self.assertEqual(product_not_for_sale_2.price, 200)
def execute_product_business_rules(sender, instance, **kwargs):
    ProductBusinessRule.run_all(instance)