From 4f84ec09d779196255c34d4067e4e4795da09381 Mon Sep 17 00:00:00 2001 From: imperosol Date: Thu, 5 Mar 2026 11:02:36 +0100 Subject: [PATCH] add tests --- counter/tests/test_counter_admin.py | 123 +++++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 2 deletions(-) diff --git a/counter/tests/test_counter_admin.py b/counter/tests/test_counter_admin.py index eaade1c5..91832786 100644 --- a/counter/tests/test_counter_admin.py +++ b/counter/tests/test_counter_admin.py @@ -1,13 +1,132 @@ +from django.conf import settings from django.contrib.auth.models import Permission from django.test import TestCase +from django.urls import reverse from model_bakery import baker from club.models import Membership from core.baker_recipes import subscriber_user -from core.models import User +from core.models import Group, User from counter.baker_recipes import product_recipe from counter.forms import CounterEditForm -from counter.models import Counter +from counter.models import Counter, CounterSellers + + +class TestEditCounterSellers(TestCase): + @classmethod + def setUpTestData(cls): + cls.counter = baker.make(Counter, type="BAR") + cls.products = product_recipe.make(_quantity=2, _bulk_create=True) + cls.counter.products.add(*cls.products) + users = subscriber_user.make(_quantity=6, _bulk_create=True) + cls.regular_barmen = users[:2] + cls.tmp_barmen = users[2:4] + cls.not_barmen = users[4:] + CounterSellers.objects.bulk_create( + [ + *baker.prepare( + CounterSellers, + counter=cls.counter, + user=iter(cls.regular_barmen), + is_regular=True, + _quantity=len(cls.regular_barmen), + ), + *baker.prepare( + CounterSellers, + counter=cls.counter, + user=iter(cls.tmp_barmen), + is_regular=False, + _quantity=len(cls.tmp_barmen), + ), + ] + ) + cls.operator = baker.make( + User, groups=[Group.objects.get(id=settings.SITH_GROUP_COUNTER_ADMIN_ID)] + ) + + def test_view_ok(self): + url = reverse("counter:admin", kwargs={"counter_id": self.counter.id}) + self.client.force_login(self.operator) + res = self.client.get(url) + assert res.status_code == 200 + res = self.client.post( + url, + data={ + "sellers_regular": [u.id for u in self.regular_barmen], + "sellers_temporary": [u.id for u in self.tmp_barmen], + "products": [p.id for p in self.products], + }, + ) + self.assertRedirects(res, url) + + def test_add_barmen(self): + form = CounterEditForm( + data={ + "sellers_regular": [*self.regular_barmen, self.not_barmen[0]], + "sellers_temporary": [*self.tmp_barmen, self.not_barmen[1]], + "products": self.products, + }, + instance=self.counter, + user=self.operator, + ) + assert form.is_valid() + form.save() + assert set(self.counter.sellers.filter(countersellers__is_regular=True)) == { + *self.regular_barmen, + self.not_barmen[0], + } + assert set(self.counter.sellers.filter(countersellers__is_regular=False)) == { + *self.tmp_barmen, + self.not_barmen[1], + } + + def test_barman_change_status(self): + """Test when a barman goes from temporary to regular""" + form = CounterEditForm( + data={ + "sellers_regular": [*self.regular_barmen, self.tmp_barmen[0]], + "sellers_temporary": [*self.tmp_barmen[1:]], + "products": self.products, + }, + instance=self.counter, + user=self.operator, + ) + assert form.is_valid() + form.save() + assert set(self.counter.sellers.filter(countersellers__is_regular=True)) == { + *self.regular_barmen, + self.tmp_barmen[0], + } + assert set( + self.counter.sellers.filter(countersellers__is_regular=False) + ) == set(self.tmp_barmen[1:]) + + def test_barman_duplicate(self): + """Test that a barman cannot be regular and temporary at the same time.""" + form = CounterEditForm( + data={ + "sellers_regular": [*self.regular_barmen, self.not_barmen[0]], + "sellers_temporary": [*self.tmp_barmen, self.not_barmen[0]], + "products": self.products, + }, + instance=self.counter, + user=self.operator, + ) + assert not form.is_valid() + assert form.errors == { + "__all__": [ + "Un utilisateur ne peut pas être un barman " + "régulier et temporaire en même temps, " + "mais les utilisateurs suivants ont été définis " + f"comme les deux : {self.not_barmen[0].get_display_name()}" + ], + } + assert set(self.counter.sellers.filter(countersellers__is_regular=True)) == set( + self.regular_barmen + ) + assert set( + self.counter.sellers.filter(countersellers__is_regular=False) + ) == set(self.tmp_barmen) class TestEditCounterProducts(TestCase):