From eaa365dccd76f8e98afd5dff25170f3b0b85c6c4 Mon Sep 17 00:00:00 2001 From: Laetitia Getti Date: Thu, 27 Jul 2023 12:09:01 +0200 Subject: [PATCH] ordering test files --- .../test_views_grouped_order.py} | 382 +----------------- .../order/tests/test_views/test_views_item.py | 82 ++++ .../tests/test_views/test_views_order.py | 275 +++++++++++++ la_chariotte/order/tests/utils.py | 56 +++ 4 files changed, 417 insertions(+), 378 deletions(-) rename la_chariotte/order/tests/{test_views.py => test_views/test_views_grouped_order.py} (79%) create mode 100644 la_chariotte/order/tests/test_views/test_views_item.py create mode 100644 la_chariotte/order/tests/test_views/test_views_order.py create mode 100644 la_chariotte/order/tests/utils.py diff --git a/la_chariotte/order/tests/test_views.py b/la_chariotte/order/tests/test_views/test_views_grouped_order.py similarity index 79% rename from la_chariotte/order/tests/test_views.py rename to la_chariotte/order/tests/test_views/test_views_grouped_order.py index 0f41260..ad1eed7 100644 --- a/la_chariotte/order/tests/test_views.py +++ b/la_chariotte/order/tests/test_views/test_views_grouped_order.py @@ -1,3 +1,4 @@ +# fmt: off import datetime import pytest @@ -6,56 +7,13 @@ from django.urls import reverse from django.utils import timezone from la_chariotte.order import models +from la_chariotte.order.tests.utils import (create_grouped_order, + order_items_in_grouped_order) +# fmt: on pytestmark = pytest.mark.django_db -def create_grouped_order( - days_before_delivery_date, days_before_deadline, name, orga_user -): - """ - Creates a grouped order. - """ - date = timezone.now().date() + datetime.timedelta(days=days_before_delivery_date) - deadline = timezone.now() + datetime.timedelta(days=days_before_deadline) - return models.GroupedOrder.objects.create( - name=name, orga=orga_user, delivery_date=date, deadline=deadline - ) - - -def order_items_in_grouped_order(grouped_order): - """Creates 2 OrderedItems and orders in the given grouped order. Returns the order""" - item_1 = grouped_order.item_set.create(name="test item", price="2") - item_2 = grouped_order.item_set.create(name="test item 2", price="9") - author_1 = models.OrderAuthor.objects.create( - first_name="bob", last_name="lescargot", phone="000", email="bob@escargot.fr" - ) - author_2 = models.OrderAuthor.objects.create( - first_name="bob", last_name="alescargot", phone="000", email="bob2@escargot.fr" - ) - author_3 = models.OrderAuthor.objects.create( - first_name="bobby", - last_name="alescargot", - phone="000", - email="bob3@escargot.fr", - ) - order = grouped_order.order_set.create(author=author_1) - order_2 = grouped_order.order_set.create(author=author_2) - order_3 = grouped_order.order_set.create(author=author_3) - models.OrderedItem.objects.create(order=order, item=item_1, nb=3) - models.OrderedItem.objects.create(order=order, item=item_2, nb=2) - models.OrderedItem.objects.create(order=order_2, item=item_1, nb=1) - models.OrderedItem.objects.create(order=order_3, item=item_2, nb=1) - item_1.compute_ordered_nb() - item_2.compute_ordered_nb() - order.compute_order_price() - order_2.compute_order_price() - order_3.compute_order_price() - grouped_order.compute_total_price() - grouped_order.save() - return order - - class TestGroupedOrderIndexView: def test_anonymous_user_redirection(self, client): """ @@ -805,267 +763,6 @@ class TestGroupedOrderOverview: assert "Cette commande groupée est terminée" in response.content.decode() -class TestOrder: - def test_order_deadline_passed(self, client, other_user): - """A user orders when the deadline is passed. They get a 403 error""" - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=-1, - name="gr order test", - orga_user=other_user, - ) - item = models.Item.objects.create( - name="test item 1", grouped_order=grouped_order, price=2 - ) - - # some items are ordered - order_url = reverse( - "order:order", - kwargs={ - "grouped_order_id": grouped_order.pk, - }, - ) - response = client.post( - order_url, - { - f"quantity_{item.pk}": [4, 0], - "first_name": "Prénom", - "last_name": "Nom", - "phone": "0645632569", - "email": "test@mail.fr", - "note": "", - }, - ) - assert response.status_code == 403 - - def test_order_deadline_passed__orga(self, client_log): - """The orga user orders when the deadline is passed, but the delivery is to come. It works""" - - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=-1, - name="gr order test", - orga_user=auth.get_user(client_log), - ) - item = models.Item.objects.create( - name="test item 1", grouped_order=grouped_order, price=2 - ) - - # some items are ordered - order_url = reverse( - "order:order", - kwargs={ - "grouped_order_id": grouped_order.pk, - }, - ) - response = client_log.post( - order_url, - { - f"quantity_{item.pk}": [4, 0], - "first_name": "Prénom", - "last_name": "Nom", - "phone": "0645632569", - "email": "test@mail.fr", - "note": "", - }, - ) - assert response.status_code == 302 - - def test_order_delivery_passed__orga(self, client_log): - """The orga user orders when the deadline and the delivery are passed. The get a 403 error""" - - grouped_order = create_grouped_order( - days_before_delivery_date=-2, - days_before_deadline=-4, - name="gr order test", - orga_user=auth.get_user(client_log), - ) - item = models.Item.objects.create( - name="test item 1", grouped_order=grouped_order, price=2 - ) - - # some items are ordered - order_url = reverse( - "order:order", - kwargs={ - "grouped_order_id": grouped_order.pk, - }, - ) - response = client_log.post( - order_url, - { - f"quantity_{item.pk}": [4, 0], - "first_name": "Prénom", - "last_name": "Nom", - "phone": "0645632569", - "email": "test@mail.fr", - "note": "", - }, - ) - assert response.status_code == 403 - - def test_order_too_many_items_ordered(self, client, other_user): - """If a user orderd more articles than what is available, - the form is displayed again with an error. - The OrderedItems, OrderAuthor and Order are deleted.""" - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=2, - name="gr order test", - orga_user=other_user, - ) - item = models.Item.objects.create( - name="test item 1", grouped_order=grouped_order, price=1 - ) - item2 = models.Item.objects.create( - name="test item 2", grouped_order=grouped_order, price=5, max_limit=20 - ) - detail_url = reverse( - "order:grouped_order_detail", - kwargs={ - "pk": grouped_order.pk, - }, - ) - response = client.get(detail_url) - assert response.status_code == 200 - assert "test item" in response.content.decode() - assert "gr order test" in response.content.decode() - assert item.ordered_nb == 0 - assert item2.ordered_nb == 0 - order_url = reverse( - "order:order", - kwargs={ - "grouped_order_id": grouped_order.pk, - }, - ) - response = client.post( - order_url, - { - f"quantity_{item.pk}": [0, 4], - f"quantity_{item2.pk}": [0, 25], - "first_name": "Prénom", - "last_name": "Nom", - "phone": "0645632569", - "email": "test@mail.fr", - "note": "", - }, - ) - assert response.status_code == 200 - assert ( - response.context["error_message"] - == "Trop de test item 2 commandés pour la quantité disponible" - ) - item.refresh_from_db() - item2.refresh_from_db() - assert item.ordered_nb == 0 - assert item2.ordered_nb == 0 - assert not models.OrderAuthor.objects.first() - assert not models.Order.objects.first() - assert not models.OrderedItem.objects.first() - - def test_negative_nb_ordered(self, client, other_user): - """If a user orders a negative nb of articles for an item, - we consider they ordered 0. - (but it is also blocked by fronted)""" - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=2, - name="gr order test", - orga_user=other_user, - ) - item = models.Item.objects.create( - name="test item 1", grouped_order=grouped_order, price=1 - ) - item2 = models.Item.objects.create( - name="test item 2", grouped_order=grouped_order, price=5, max_limit=20 - ) - detail_url = reverse( - "order:grouped_order_detail", - kwargs={ - "pk": grouped_order.pk, - }, - ) - response = client.get(detail_url) - assert response.status_code == 200 - assert "test item" in response.content.decode() - assert "gr order test" in response.content.decode() - assert item.ordered_nb == 0 - assert item2.ordered_nb == 0 - order_url = reverse( - "order:order", - kwargs={ - "grouped_order_id": grouped_order.pk, - }, - ) - response = client.post( - order_url, - { - f"quantity_{item.pk}": [4, 0], - f"quantity_{item2.pk}": [-2, 0], - "first_name": "Prénom", - "last_name": "Nom", - "phone": "0645632569", - "email": "test@mail.fr", - "note": "", - }, - ) - assert response.status_code == 302 - order = models.Order.objects.get(grouped_order=grouped_order.pk) - assert response.url == reverse( - "order:order_confirm", - kwargs={ - "grouped_order_id": grouped_order.pk, - "pk": order.pk, - }, - ) - item.refresh_from_db() - item2.refresh_from_db() - assert models.OrderAuthor.objects.first().first_name == "Prénom" - assert models.OrderAuthor.objects.first().email == "test@mail.fr" - assert models.OrderAuthor.objects.first().phone == "0645632569" - assert item.ordered_nb == 4 - assert item2.ordered_nb == 0 - assert order.ordered_items.count() == 1 - - def test_delete_order(self, client_log): - """The orga user deletes an order. The grouped order is updated""" - 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), - ) - order = order_items_in_grouped_order(grouped_order) - author = order.author - order_price = order.price - item = order.ordered_items.first().item - assert ( - models.OrderedItem.objects.all().count() == 4 - ) # 4 orderedItem, 2 are in the order 'order' - assert grouped_order.order_set.all().count() == 3 - assert grouped_order.total_price == 35 - assert item.ordered_nb == 4 - delete_url = reverse( - "order:order_delete", - kwargs={"grouped_order_id": grouped_order.id, "pk": order.id}, - ) - response = client_log.post(delete_url) - assert response.status_code == 302 - assert response.url == reverse( - "order:grouped_order_overview", - kwargs={ - "pk": grouped_order.pk, - }, - ) - client_log.get(response.url) - grouped_order.refresh_from_db() - item.refresh_from_db() - assert models.OrderedItem.objects.all().count() == 2 - assert grouped_order.order_set.all().count() == 2 - assert grouped_order.total_price == 35 - order_price - assert item.ordered_nb == 1 - - class TestGroupedOrderCreateView: def test_create_grouped_order(self, client_log): """ @@ -1510,77 +1207,6 @@ class TestGroupedOrderDuplicateView: assert models.GroupedOrder.objects.count() == 1 -class TestItemCreateView: - def test_create_item(self, client_log): - """A user that has created a grouped order adds an item to it.""" - 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), - ) - create_item_view_url = reverse( - "order:item_create", - kwargs={ - "pk": grouped_order.pk, - }, - ) - response = client_log.post( - create_item_view_url, {"name": "titre item", "price": 2} - ) - assert response.status_code == 302 - assert response.url == reverse( - "order:manage_items", - kwargs={ - "pk": grouped_order.pk, - }, - ) - assert models.Item.objects.first().name == "titre item" - response = client_log.get(response.url) - assert "titre item" in response.content.decode() - - def test_create_item__anonymous_user(self, client, other_user): - """ - A user that is not logged cannot create an item. They get a redirected to loginview. - """ - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=2, - name="gr order test", - orga_user=other_user, - ) - create_item_view_url = reverse( - "order:item_create", - kwargs={ - "pk": grouped_order.pk, - }, - ) - response = client.post(create_item_view_url, {"name": "titre item"}) - assert response.status_code == 302 - assert ( - response.url == f"{reverse('accounts:login')}?next={create_item_view_url}" - ) - - def test_create_item__not_orga(self, client_log, other_user): - """ - A user that is not orga cannot create an item. They get a 403 error. - """ - grouped_order = create_grouped_order( - days_before_delivery_date=5, - days_before_deadline=2, - name="gr order test", - orga_user=other_user, - ) - create_item_view_url = reverse( - "order:item_create", - kwargs={ - "pk": grouped_order.pk, - }, - ) - response = client_log.post(create_item_view_url, {"name": "titre item"}) - assert response.status_code == 403 - - class TestGroupedOrderSheetView: def test_get__not_orga(self, client_log, other_user): """A user that is not organizer of the GO accesses the sheet view. diff --git a/la_chariotte/order/tests/test_views/test_views_item.py b/la_chariotte/order/tests/test_views/test_views_item.py new file mode 100644 index 0000000..3f3386b --- /dev/null +++ b/la_chariotte/order/tests/test_views/test_views_item.py @@ -0,0 +1,82 @@ +import datetime + +import pytest +from django.contrib import auth +from django.urls import reverse +from django.utils import timezone + +from la_chariotte.order import models +from la_chariotte.order.tests.utils import create_grouped_order + +pytestmark = pytest.mark.django_db + + +class TestItemCreateView: + def test_create_item(self, client_log): + """A user that has created a grouped order adds an item to it.""" + 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), + ) + create_item_view_url = reverse( + "order:item_create", + kwargs={ + "pk": grouped_order.pk, + }, + ) + response = client_log.post( + create_item_view_url, {"name": "titre item", "price": 2} + ) + assert response.status_code == 302 + assert response.url == reverse( + "order:manage_items", + kwargs={ + "pk": grouped_order.pk, + }, + ) + assert models.Item.objects.first().name == "titre item" + response = client_log.get(response.url) + assert "titre item" in response.content.decode() + + def test_create_item__anonymous_user(self, client, other_user): + """ + A user that is not logged cannot create an item. They get a redirected to loginview. + """ + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=2, + name="gr order test", + orga_user=other_user, + ) + create_item_view_url = reverse( + "order:item_create", + kwargs={ + "pk": grouped_order.pk, + }, + ) + response = client.post(create_item_view_url, {"name": "titre item"}) + assert response.status_code == 302 + assert ( + response.url == f"{reverse('accounts:login')}?next={create_item_view_url}" + ) + + def test_create_item__not_orga(self, client_log, other_user): + """ + A user that is not orga cannot create an item. They get a 403 error. + """ + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=2, + name="gr order test", + orga_user=other_user, + ) + create_item_view_url = reverse( + "order:item_create", + kwargs={ + "pk": grouped_order.pk, + }, + ) + response = client_log.post(create_item_view_url, {"name": "titre item"}) + assert response.status_code == 403 diff --git a/la_chariotte/order/tests/test_views/test_views_order.py b/la_chariotte/order/tests/test_views/test_views_order.py new file mode 100644 index 0000000..0bde19a --- /dev/null +++ b/la_chariotte/order/tests/test_views/test_views_order.py @@ -0,0 +1,275 @@ +# fmt: off +import datetime + +import pytest +from django.contrib import auth +from django.urls import reverse +from django.utils import timezone + +from la_chariotte.order import models +from la_chariotte.order.tests.utils import (create_grouped_order, + order_items_in_grouped_order) + +# fmt: on +pytestmark = pytest.mark.django_db + + +class TestOrder: + def test_order_deadline_passed(self, client, other_user): + """A user orders when the deadline is passed. They get a 403 error""" + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=-1, + name="gr order test", + orga_user=other_user, + ) + item = models.Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=2 + ) + + # some items are ordered + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + response = client.post( + order_url, + { + f"quantity_{item.pk}": [4, 0], + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + "note": "", + }, + ) + assert response.status_code == 403 + + def test_order_deadline_passed__orga(self, client_log): + """The orga user orders when the deadline is passed, but the delivery is to come. It works""" + + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=-1, + name="gr order test", + orga_user=auth.get_user(client_log), + ) + item = models.Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=2 + ) + + # some items are ordered + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + response = client_log.post( + order_url, + { + f"quantity_{item.pk}": [4, 0], + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + "note": "", + }, + ) + assert response.status_code == 302 + + def test_order_delivery_passed__orga(self, client_log): + """The orga user orders when the deadline and the delivery are passed. The get a 403 error""" + + grouped_order = create_grouped_order( + days_before_delivery_date=-2, + days_before_deadline=-4, + name="gr order test", + orga_user=auth.get_user(client_log), + ) + item = models.Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=2 + ) + + # some items are ordered + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + response = client_log.post( + order_url, + { + f"quantity_{item.pk}": [4, 0], + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + "note": "", + }, + ) + assert response.status_code == 403 + + def test_order_too_many_items_ordered(self, client, other_user): + """If a user orderd more articles than what is available, + the form is displayed again with an error. + The OrderedItems, OrderAuthor and Order are deleted.""" + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=2, + name="gr order test", + orga_user=other_user, + ) + item = models.Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=1 + ) + item2 = models.Item.objects.create( + name="test item 2", grouped_order=grouped_order, price=5, max_limit=20 + ) + detail_url = reverse( + "order:grouped_order_detail", + kwargs={ + "pk": grouped_order.pk, + }, + ) + response = client.get(detail_url) + assert response.status_code == 200 + assert "test item" in response.content.decode() + assert "gr order test" in response.content.decode() + assert item.ordered_nb == 0 + assert item2.ordered_nb == 0 + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + response = client.post( + order_url, + { + f"quantity_{item.pk}": [0, 4], + f"quantity_{item2.pk}": [0, 25], + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + "note": "", + }, + ) + assert response.status_code == 200 + assert ( + response.context["error_message"] + == "Trop de test item 2 commandés pour la quantité disponible" + ) + item.refresh_from_db() + item2.refresh_from_db() + assert item.ordered_nb == 0 + assert item2.ordered_nb == 0 + assert not models.OrderAuthor.objects.first() + assert not models.Order.objects.first() + assert not models.OrderedItem.objects.first() + + def test_negative_nb_ordered(self, client, other_user): + """If a user orders a negative nb of articles for an item, + we consider they ordered 0. + (but it is also blocked by fronted)""" + grouped_order = create_grouped_order( + days_before_delivery_date=5, + days_before_deadline=2, + name="gr order test", + orga_user=other_user, + ) + item = models.Item.objects.create( + name="test item 1", grouped_order=grouped_order, price=1 + ) + item2 = models.Item.objects.create( + name="test item 2", grouped_order=grouped_order, price=5, max_limit=20 + ) + detail_url = reverse( + "order:grouped_order_detail", + kwargs={ + "pk": grouped_order.pk, + }, + ) + response = client.get(detail_url) + assert response.status_code == 200 + assert "test item" in response.content.decode() + assert "gr order test" in response.content.decode() + assert item.ordered_nb == 0 + assert item2.ordered_nb == 0 + order_url = reverse( + "order:order", + kwargs={ + "grouped_order_id": grouped_order.pk, + }, + ) + response = client.post( + order_url, + { + f"quantity_{item.pk}": [4, 0], + f"quantity_{item2.pk}": [-2, 0], + "first_name": "Prénom", + "last_name": "Nom", + "phone": "0645632569", + "email": "test@mail.fr", + "note": "", + }, + ) + assert response.status_code == 302 + order = models.Order.objects.get(grouped_order=grouped_order.pk) + assert response.url == reverse( + "order:order_confirm", + kwargs={ + "grouped_order_id": grouped_order.pk, + "pk": order.pk, + }, + ) + item.refresh_from_db() + item2.refresh_from_db() + assert models.OrderAuthor.objects.first().first_name == "Prénom" + assert models.OrderAuthor.objects.first().email == "test@mail.fr" + assert models.OrderAuthor.objects.first().phone == "0645632569" + assert item.ordered_nb == 4 + assert item2.ordered_nb == 0 + assert order.ordered_items.count() == 1 + + def test_delete_order(self, client_log): + """The orga user deletes an order. The grouped order is updated""" + 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), + ) + order = order_items_in_grouped_order(grouped_order) + author = order.author + order_price = order.price + item = order.ordered_items.first().item + assert ( + models.OrderedItem.objects.all().count() == 4 + ) # 4 orderedItem, 2 are in the order 'order' + assert grouped_order.order_set.all().count() == 3 + assert grouped_order.total_price == 35 + assert item.ordered_nb == 4 + delete_url = reverse( + "order:order_delete", + kwargs={"grouped_order_id": grouped_order.id, "pk": order.id}, + ) + response = client_log.post(delete_url) + assert response.status_code == 302 + assert response.url == reverse( + "order:grouped_order_overview", + kwargs={ + "pk": grouped_order.pk, + }, + ) + client_log.get(response.url) + grouped_order.refresh_from_db() + item.refresh_from_db() + assert models.OrderedItem.objects.all().count() == 2 + assert grouped_order.order_set.all().count() == 2 + assert grouped_order.total_price == 35 - order_price + assert item.ordered_nb == 1 diff --git a/la_chariotte/order/tests/utils.py b/la_chariotte/order/tests/utils.py new file mode 100644 index 0000000..51cbf2e --- /dev/null +++ b/la_chariotte/order/tests/utils.py @@ -0,0 +1,56 @@ +import datetime + +import pytest +from django.contrib import auth +from django.urls import reverse +from django.utils import timezone + +from la_chariotte.order import models + +pytestmark = pytest.mark.django_db + + +def create_grouped_order( + days_before_delivery_date, days_before_deadline, name, orga_user +): + """ + Creates a grouped order. + """ + date = timezone.now().date() + datetime.timedelta(days=days_before_delivery_date) + deadline = timezone.now() + datetime.timedelta(days=days_before_deadline) + return models.GroupedOrder.objects.create( + name=name, orga=orga_user, delivery_date=date, deadline=deadline + ) + + +def order_items_in_grouped_order(grouped_order): + """Creates 2 OrderedItems and orders in the given grouped order. Returns the order""" + item_1 = grouped_order.item_set.create(name="test item", price="2") + item_2 = grouped_order.item_set.create(name="test item 2", price="9") + author_1 = models.OrderAuthor.objects.create( + first_name="bob", last_name="lescargot", phone="000", email="bob@escargot.fr" + ) + author_2 = models.OrderAuthor.objects.create( + first_name="bob", last_name="alescargot", phone="000", email="bob2@escargot.fr" + ) + author_3 = models.OrderAuthor.objects.create( + first_name="bobby", + last_name="alescargot", + phone="000", + email="bob3@escargot.fr", + ) + order = grouped_order.order_set.create(author=author_1) + order_2 = grouped_order.order_set.create(author=author_2) + order_3 = grouped_order.order_set.create(author=author_3) + models.OrderedItem.objects.create(order=order, item=item_1, nb=3) + models.OrderedItem.objects.create(order=order, item=item_2, nb=2) + models.OrderedItem.objects.create(order=order_2, item=item_1, nb=1) + models.OrderedItem.objects.create(order=order_3, item=item_2, nb=1) + item_1.compute_ordered_nb() + item_2.compute_ordered_nb() + order.compute_order_price() + order_2.compute_order_price() + order_3.compute_order_price() + grouped_order.compute_total_price() + grouped_order.save() + return order