diff --git a/core/tests/test_user.py b/core/tests/test_user.py index 752405b2..0a8a3b7b 100644 --- a/core/tests/test_user.py +++ b/core/tests/test_user.py @@ -200,7 +200,11 @@ class TestFilterInactive(TestCase): ] sale_recipe.make(customer=cls.users[3].customer, date=time_active) baker.make( - Refilling, customer=cls.users[4].customer, date=time_active, counter=counter + Refilling, + customer=cls.users[4].customer, + date=time_active, + counter=counter, + amount=1, ) sale_recipe.make(customer=cls.users[5].customer, date=time_inactive) @@ -455,7 +459,9 @@ def test_user_preferences(client: Client): @pytest.mark.django_db def test_user_stats(client: Client): user = subscriber_user.make() - baker.make(Refilling, customer=user.customer, amount=99999) + baker.make( + Refilling, customer=user.customer, amount=settings.SITH_ACCOUNT_MAX_MONEY + ) bars = [b[0] for b in settings.SITH_COUNTER_BARS] baker.make( Permanency, diff --git a/counter/tests/test_counter.py b/counter/tests/test_counter.py index aa771b25..e7682848 100644 --- a/counter/tests/test_counter.py +++ b/counter/tests/test_counter.py @@ -144,6 +144,8 @@ class TestRefilling(TestFullClickBase): assert self.updated_amount(self.customer) == 0 def test_refilling_no_refer_fail(self): + """Check that the refill fails is the HTTP_REFERER header is missing""" + def refill(): return self.client.post( reverse( @@ -157,13 +159,13 @@ class TestRefilling(TestFullClickBase): ) self.client.force_login(self.club_admin) - assert refill() + assert refill().status_code == 403 self.client.force_login(self.root) - assert refill() + assert refill().status_code == 403 self.client.force_login(self.subscriber) - assert refill() + assert refill().status_code == 403 assert self.updated_amount(self.customer) == 0 @@ -199,6 +201,17 @@ class TestRefilling(TestFullClickBase): == 404 ) + def test_refilling_above_limit_fails(self): + """Test that it's forbidden to refill a customer above the limit.""" + self.login_in_bar() + limit = settings.SITH_ACCOUNT_MAX_MONEY + # create a refilling to check that current balance is taken into account + baker.make(Refilling, customer=self.customer.customer, amount=limit // 2) + response = self.refill_user(self.customer, self.counter, (limit // 2) + 1) + assert response.status_code == 200 # no redirect = failure + self.customer.customer.refresh_from_db() + assert self.updated_amount(self.customer) == limit // 2 + def test_refilling_counter_success(self): self.login_in_bar() diff --git a/counter/tests/test_customer.py b/counter/tests/test_customer.py index 5a194824..ca1b2b85 100644 --- a/counter/tests/test_customer.py +++ b/counter/tests/test_customer.py @@ -15,6 +15,7 @@ from core.models import User from counter.baker_recipes import product_recipe, refill_recipe, sale_recipe from counter.models import ( Counter, + CounterSellers, Customer, Refilling, ReturnableProduct, @@ -38,7 +39,7 @@ class TestStudentCard(TestCase): cls.subscriber = subscriber_user.make() cls.counter = baker.make(Counter, type="BAR") - cls.counter.sellers.add(cls.barmen) + CounterSellers.objects.create(counter=cls.counter, user=cls.barmen) cls.club_counter = baker.make(Counter) role = baker.make(ClubRole, club=cls.club_counter.club, is_board=True) diff --git a/eboutic/tests/test_basket.py b/eboutic/tests/test_basket.py index 5df6df6d..2dc296d1 100644 --- a/eboutic/tests/test_basket.py +++ b/eboutic/tests/test_basket.py @@ -278,6 +278,27 @@ class TestEboutic(TestCase): ) assert Basket.objects.count() == 2 + def test_refill_limit(self): + """Test that an eboutic basket cannot refill an account above the limit.""" + self.client.force_login(self.subscriber) + product = product_recipe.make( + product_type_id=settings.SITH_COUNTER_PRODUCTTYPE_REFILLING, + counters=[self.eboutic], + ) + price = price_recipe.make( + product=product, + groups=[self.group_cotiz], + amount=settings.SITH_ACCOUNT_MAX_MONEY // 10, + ) + + response = self.submit_basket([BasketItem(price.id, 10)]) + assert Basket.objects.count() == 1 + assertRedirects(response, reverse("eboutic:checkout", kwargs={"basket_id": 1})) + + response = self.submit_basket([BasketItem(price.id, 11)]) + assert Basket.objects.count() == 1 + assert response.status_code == 200 # no redirect = form validation failed + def test_create_basket(self): self.client.force_login(self.new_customer) assertRedirects(