diff --git a/la_chariotte/helpers/fixtures.py b/la_chariotte/helpers/fixtures.py index 2d5e026..6bdf32f 100644 --- a/la_chariotte/helpers/fixtures.py +++ b/la_chariotte/helpers/fixtures.py @@ -23,6 +23,18 @@ def other_user(django_user_model): return user +@pytest.fixture +def authenticated_user(django_user_model): + username = "toto@gmail.com" + password = "tata" + first_name = "boule" + last_name = "bill" + user = django_user_model.objects.create_user( + username=username, password=password, first_name=first_name, last_name=last_name + ) + return user + + @pytest.fixture def simple_grouped_order(other_user): date = timezone.now().date() + datetime.timedelta(days=30) @@ -39,6 +51,23 @@ def simple_grouped_order(other_user): return grouped_order +@pytest.fixture +def connected_grouped_order(client, authenticated_user): + client.force_login(authenticated_user) + date = timezone.now().date() + datetime.timedelta(days=30) + deadline = timezone.now() + datetime.timedelta(days=5) + grouped_order = GroupedOrder.objects.create( + name="Test grouped order", + orga=authenticated_user, + delivery_date=date, + deadline=deadline, + ) + grouped_order.create_code_from_pk() + grouped_order.save() + item = Item.objects.create(name="test item", grouped_order=grouped_order, price=2) + return grouped_order + + @pytest.fixture(autouse=True) def password_hasher_setup(settings): # Use a weaker password hasher during tests, for speed diff --git a/la_chariotte/order/models.py b/la_chariotte/order/models.py index 8ec6aaa..5c153b8 100644 --- a/la_chariotte/order/models.py +++ b/la_chariotte/order/models.py @@ -9,6 +9,7 @@ from django.utils import timezone from la_chariotte.settings import AUTH_USER_MODEL + class GroupedOrder(models.Model): name = models.CharField( max_length=100, null=True, verbose_name="Titre de la commande" @@ -93,8 +94,8 @@ class GroupedOrder(models.Model): class OrderAuthor(models.Model): - """Used when a user orders (with or without an account)""" + first_name = models.CharField(verbose_name="Prénom") last_name = models.CharField(verbose_name="Nom") phone = models.CharField( @@ -106,7 +107,6 @@ class OrderAuthor(models.Model): help_text="Pour que l'organisateur·ice vous contacte en cas de besoin", ) - def __str__(self): # pragma: no cover return f"{self.first_name} {self.last_name}" diff --git a/la_chariotte/order/tests/test_views/test_views_grouped_order.py b/la_chariotte/order/tests/test_views/test_views_grouped_order.py index c702458..19aa23a 100644 --- a/la_chariotte/order/tests/test_views/test_views_grouped_order.py +++ b/la_chariotte/order/tests/test_views/test_views_grouped_order.py @@ -4,6 +4,7 @@ from io import StringIO import pytest from django.contrib import auth +from django.contrib.auth import get_user from django.urls import reverse from django.utils import timezone @@ -213,13 +214,33 @@ class TestJoinGroupedOrderView: join_url = reverse("dashboard") response = client.post(join_url, {"code": "123456"}) - assert ( - "nous ne trouvons aucune commande avec ce code" in response.content.decode() + "Désolé, nous ne trouvons aucune commande avec ce code" + in response.content.decode() ) class TestGroupedOrderDetailView: + def test_order_item_with_authenticated_user(self, client, connected_grouped_order): + detail_url = reverse( + "order:grouped_order_detail", + kwargs={ + "code": connected_grouped_order.code, + }, + ) + response = client.get(detail_url) + + assert response.status_code == 200 + + order_author = response.context[0]["order_author"] + current_user = get_user(client) + + assert order_author is not None + + assert order_author.first_name == current_user.first_name + assert order_author.email == current_user.username + assert order_author.last_name == current_user.last_name + def test_order_item(self, client, other_user): """ From the OrderDetailView, we order an item using the order form, and it creates an models.Order with an Ordered_item inside @@ -300,7 +321,7 @@ class TestGroupedOrderDetailView: # OrderedItems are not created when the ordered quantity is 0 assert models.OrderedItem.objects.count() == 2 - def test_order_item__no_articles_ordered(self, client, other_user): + def test_order_item__no_articles_ordered(self, client, authenticated_user): """ From the OrderDetailView, we order without having changed any item quantity. An error is raised. @@ -310,7 +331,7 @@ class TestGroupedOrderDetailView: days_before_delivery_date=5, days_before_deadline=2, name="gr order test", - orga_user=other_user, + orga_user=authenticated_user, ) item = models.Item.objects.create( name="test item 1", grouped_order=grouped_order, price=1 @@ -336,10 +357,10 @@ class TestGroupedOrderDetailView: order_url, { f"quantity_{item.pk}": [0, 0], - "first_name": "Prénom test", - "last_name": "Nom test", + "first_name": {authenticated_user.first_name}, + "last_name": {authenticated_user.last_name}, "phone": "0645632569", - "email": "test@mail.fr", + "email": {authenticated_user.email}, "note": "test note", }, ) @@ -348,12 +369,11 @@ class TestGroupedOrderDetailView: response.context["error_message"] == "Veuillez commander au moins un produit" ) - assert response.context["author"].first_name == "Prénom test" + assert response.context["author"].first_name == authenticated_user.first_name content = response.content.decode() - assert "Prénom test" in content - assert "Nom test" in content - assert "0645632569" in content - assert "test@mail.fr" in content + assert authenticated_user.first_name in content + assert authenticated_user.last_name in content + assert authenticated_user.email in content assert "test note" in content assert not models.Order.objects.first() assert not models.OrderAuthor.objects.first() diff --git a/la_chariotte/order/views/grouped_order.py b/la_chariotte/order/views/grouped_order.py index e039f11..284d57b 100644 --- a/la_chariotte/order/views/grouped_order.py +++ b/la_chariotte/order/views/grouped_order.py @@ -111,7 +111,11 @@ class GroupedOrderDetailView(generic.DetailView): remaining_qty = {item.id: item.get_remaining_nb() for item in items} prices_dict = {item.id: item.price for item in items} if self.request.user.is_authenticated: - order_author = OrderAuthor.objects.create(first_name=self.request.user.first_name, last_name=self.request.user.last_name, email=self.request.user.username) + order_author = OrderAuthor.objects.create( + first_name=self.request.user.first_name, + last_name=self.request.user.last_name, + email=self.request.user.username, + ) order_author.save() else: order_author = None