From f03258bee28d832e2839af02ee6611659cf4a3f2 Mon Sep 17 00:00:00 2001 From: Laetitia Getti Date: Mon, 15 May 2023 15:25:44 +0200 Subject: [PATCH] compute grouped order total price when displayed --- la_chariotte/order/tests/test_views.py | 46 +++++++++++++++++++++++++- la_chariotte/order/views.py | 5 ++- la_chariotte/templates/base.html | 1 + 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views.py index dfbc8ba..c341071 100644 --- a/la_chariotte/order/tests/test_views.py +++ b/la_chariotte/order/tests/test_views.py @@ -267,7 +267,6 @@ class TestGroupedOrderDetailView: order = Order.objects.first() assert order.ordered_items.count() == 2 assert order.articles_nb == 5 - assert order.grouped_order.total_price == 9 def test_order_item__no_articles_ordered(self, client, other_user): """ @@ -320,6 +319,51 @@ class TestGroupedOrderDetailView: class TestGroupedOrderOverview: + def test_get_overview(self, client_log): + """ + From the OrderDetailView, we order an item using the order form, and it creates an Order with an Ordered_item inside + """ + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=2, + name="gr order test", + orga_user=auth.get_user(client_log), + ) + item = Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=2 + ) + + overview_url = reverse( + "order:grouped_order_overview", + kwargs={ + "pk": grouped_order.pk, + }, + ) + # some items are ordered + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + client_log.post( + order_url, + { + f"quantity_{item.pk}": 4, + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + }, + ) + response = client_log.get(overview_url) + assert response.status_code == 200 + assert "test item" in response.content.decode() + assert "gr order test" in response.content.decode() + item.refresh_from_db() + assert item.get_total_price() == 8 + assert "8" in response.content.decode() + def test_user_not_logged_redirect(self, client, other_user): """ A user that is not logged cannot see the GroupedOrderOverview. They get redirected to the login view diff --git a/la_chariotte/order/views.py b/la_chariotte/order/views.py index 175591e..50031da 100644 --- a/la_chariotte/order/views.py +++ b/la_chariotte/order/views.py @@ -70,6 +70,10 @@ class GroupedOrderOverview(UserPassesTestMixin, generic.DetailView): """Accessible only if the requesting user is the grouped order organizer""" return self.get_object().orga == self.request.user + def get(self, request, *args, **kwargs): + self.get_object().compute_total_price() + return super().get(self, request, *args, **kwargs) + class GroupedOrderCreateView(LoginRequiredMixin, generic.CreateView): """View for creating a new grouped order""" @@ -157,7 +161,6 @@ def order(request, grouped_order_id): ) else: compute_order_price(order) - order.grouped_order.compute_total_price() # Always return an HttpResponseRedirect after successfully dealing # with POST data. This prevents data from being posted twice if a # user hits the Back button. diff --git a/la_chariotte/templates/base.html b/la_chariotte/templates/base.html index f4cea2a..372e293 100644 --- a/la_chariotte/templates/base.html +++ b/la_chariotte/templates/base.html @@ -31,6 +31,7 @@