mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-02 20:01:51 +02:00
tests on GroupedOrderDetailView
This commit is contained in:
parent
1b10530c5c
commit
8648fee786
5 changed files with 55 additions and 9 deletions
|
@ -12,7 +12,7 @@ class Grouped_order(models.Model):
|
||||||
"""Returns True if the grouped order is open for new Orders - False if it's too late"""
|
"""Returns True if the grouped order is open for new Orders - False if it's too late"""
|
||||||
return self.deadline >= timezone.now()
|
return self.deadline >= timezone.now()
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self): # pragma: no cover
|
||||||
return (
|
return (
|
||||||
self.name
|
self.name
|
||||||
if self.name
|
if self.name
|
||||||
|
@ -28,7 +28,7 @@ class Order(models.Model):
|
||||||
max_length=100, verbose_name="Personne qui passe la commande"
|
max_length=100, verbose_name="Personne qui passe la commande"
|
||||||
) # a changer, utiliser ForeignKey de user
|
) # a changer, utiliser ForeignKey de user
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self): # pragma: no cover
|
||||||
return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}"
|
return f"Commande de {self.author} pour la commande groupée {self.grouped_order.pk}"
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class Item(models.Model):
|
||||||
) # à transformer en manytomany quand il y aura un catalogue
|
) # à transformer en manytomany quand il y aura un catalogue
|
||||||
ordered_nb = models.IntegerField(default=0)
|
ordered_nb = models.IntegerField(default=0)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self): # pragma: no cover
|
||||||
return f"{self.name} dans la commande groupée {self.grouped_order.pk}"
|
return f"{self.name} dans la commande groupée {self.grouped_order.pk}"
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,5 +52,5 @@ class OrderedItem(models.Model):
|
||||||
)
|
)
|
||||||
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="orders")
|
item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="orders")
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self): # pragma: no cover
|
||||||
return f"{self.nb} {self.item}, dans la commande {self.order.pk}"
|
return f"{self.nb} {self.item}, dans la commande {self.order.pk}"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<br>
|
<br>
|
||||||
<p>{{ grouped_order }}
|
<p>{{ grouped_order }}
|
||||||
<p>Organisateur·ice : {{ grouped_order.orga }}</p>
|
<p>Organisateur·ice : {{ grouped_order.orga }}</p>
|
||||||
<p>Date de livraison : {{ grouped_order.date }}</p>
|
<p>Date de livraison : {{ grouped_order.delivery_date }}</p>
|
||||||
|
|
||||||
les produits disponibles pour cette commande groupée :
|
les produits disponibles pour cette commande groupée :
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<label for="item{{ forloop.counter }}">{{ item.name }}</label><br>
|
<label for="item{{ forloop.counter }}">{{ item.name }}</label><br>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</fieldset>
|
</fieldset>
|
||||||
<input type="submit" value="Vote">
|
<input type="submit" value="Order">
|
||||||
</form>
|
</form>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<br>
|
<br>
|
||||||
<p>{{ grouped_order }}
|
<p>{{ grouped_order }}
|
||||||
<p>Organisateur·ice : {{ grouped_order.orga }}</p>
|
<p>Organisateur·ice : {{ grouped_order.orga }}</p>
|
||||||
<p>Date de livraison : {{ grouped_order.date }}</p>
|
<p>Date de livraison : {{ grouped_order.delivery_date }}</p>
|
||||||
|
|
||||||
les produits commandés pour cette commande groupée :
|
les produits commandés pour cette commande groupée :
|
||||||
<ul>
|
<ul>
|
||||||
|
|
|
@ -4,7 +4,7 @@ import pytest
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from la_chariotte.order.models import Grouped_order
|
from la_chariotte.order.models import Grouped_order, Item, Order
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
|
@ -130,3 +130,48 @@ class TestGroupedOrderIndexView:
|
||||||
response.context["grouped_order_list"]["incoming_grouped_orders"][0]
|
response.context["grouped_order_list"]["incoming_grouped_orders"][0]
|
||||||
== future_grouped_order
|
== future_grouped_order
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestGroupedOrderDetailView:
|
||||||
|
def test_order_item(self, client):
|
||||||
|
"""
|
||||||
|
From the OrderDetailView, we order an item using the order form, and it creates an Order woth and Ordered_item inside
|
||||||
|
"""
|
||||||
|
grouped_order = create_grouped_order(
|
||||||
|
days_before_delivery_date=5, days_before_deadline=2, name="gr order test"
|
||||||
|
)
|
||||||
|
item = Item.objects.create(name="test item", grouped_order=grouped_order)
|
||||||
|
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
|
||||||
|
order_url = reverse(
|
||||||
|
"order:order",
|
||||||
|
kwargs={
|
||||||
|
"grouped_order_id": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
response = client.post(
|
||||||
|
order_url,
|
||||||
|
{
|
||||||
|
"item": item.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse(
|
||||||
|
"order:grouped_order_orga",
|
||||||
|
kwargs={
|
||||||
|
"pk": grouped_order.pk,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
item.refresh_from_db()
|
||||||
|
assert item.ordered_nb == 1
|
||||||
|
order = Order.objects.first()
|
||||||
|
assert order.ordered_items.count() == 1
|
||||||
|
|
|
@ -73,6 +73,7 @@ def order(
|
||||||
order = Order.objects.create(author="Auteur teur", grouped_order=grouped_order)
|
order = Order.objects.create(author="Auteur teur", grouped_order=grouped_order)
|
||||||
OrderedItem.objects.create(nb=1, order=order, item=selected_item)
|
OrderedItem.objects.create(nb=1, order=order, item=selected_item)
|
||||||
compute_ordered_nb(selected_item)
|
compute_ordered_nb(selected_item)
|
||||||
|
selected_item.save()
|
||||||
# Always return an HttpResponseRedirect after successfully dealing
|
# Always return an HttpResponseRedirect after successfully dealing
|
||||||
# with POST data. This prevents data from being posted twice if a
|
# with POST data. This prevents data from being posted twice if a
|
||||||
# user hits the Back button.
|
# user hits the Back button.
|
||||||
|
@ -82,7 +83,7 @@ def order(
|
||||||
|
|
||||||
|
|
||||||
def compute_ordered_nb(item):
|
def compute_ordered_nb(item):
|
||||||
"""Calcule le nombre de produits de ce produit commandés (pour cette commande groupée)"""
|
"""Calcule le nombre de produits de ce type commandés (pour cette commande groupée)"""
|
||||||
ordered_nb = 0
|
ordered_nb = 0
|
||||||
for order in item.orders.all():
|
for order in item.orders.all():
|
||||||
ordered_nb += order.nb
|
ordered_nb += order.nb
|
||||||
|
|
Loading…
Reference in a new issue