mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-02 20:01:51 +02:00
we cannot order when there is no item available
This commit is contained in:
parent
e4fabc4671
commit
04d3ab69a2
4 changed files with 150 additions and 3 deletions
|
@ -137,7 +137,7 @@ class Item(models.Model):
|
||||||
|
|
||||||
def get_remaining_nb(self):
|
def get_remaining_nb(self):
|
||||||
"""Returns the number of remaining articles for this item in this grouped order"""
|
"""Returns the number of remaining articles for this item in this grouped order"""
|
||||||
if self.max_limit:
|
if self.max_limit is not None:
|
||||||
return self.max_limit - self.ordered_nb
|
return self.max_limit - self.ordered_nb
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -65,7 +65,7 @@
|
||||||
<td>{{ item.name }}</td>
|
<td>{{ item.name }}</td>
|
||||||
<td>{{ item.price }} €</td>
|
<td>{{ item.price }} €</td>
|
||||||
<td><input name="quantity_{{ item.id }}" size="2" type="number" value="0" min="0"></input>
|
<td><input name="quantity_{{ item.id }}" size="2" type="number" value="0" min="0"></input>
|
||||||
{% if item.get_remaining_nb %}<span class="is-italic"> {{ item.get_remaining_nb }} disponibles</span>{% endif %}</td>
|
{% if item.get_remaining_nb is not null %}<span class="is-italic"> {{ item.get_remaining_nb }} {% if item.get_remaining_nb <= 1 %}disponible{% else %}disponibles{% endif %}</span>{% endif %}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
|
@ -395,6 +395,153 @@ class TestGroupedOrderDetailView:
|
||||||
assert "gr order test" in response.content.decode()
|
assert "gr order test" in response.content.decode()
|
||||||
assert "Cette commande groupée est terminée" in response.content.decode()
|
assert "Cette commande groupée est terminée" in response.content.decode()
|
||||||
|
|
||||||
|
def test_order_too_many_items(self, client, other_user):
|
||||||
|
"""a user orders more items than what is available. They get an error"""
|
||||||
|
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, max_limit=1
|
||||||
|
)
|
||||||
|
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,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": 2,
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert (
|
||||||
|
response.context["error_message"]
|
||||||
|
== "Trop de test item 1 commandés pour la quantité disponible"
|
||||||
|
)
|
||||||
|
assert not models.Order.objects.first()
|
||||||
|
assert not models.OrderAuthor.objects.first()
|
||||||
|
|
||||||
|
def test_order_no_item_available(self, client, other_user):
|
||||||
|
"""a user an item that is not available. They get an error"""
|
||||||
|
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, max_limit=0
|
||||||
|
)
|
||||||
|
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,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": 1,
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 200
|
||||||
|
assert (
|
||||||
|
response.context["error_message"]
|
||||||
|
== "Trop de test item 1 commandés pour la quantité disponible"
|
||||||
|
)
|
||||||
|
assert not models.Order.objects.first()
|
||||||
|
assert not models.OrderAuthor.objects.first()
|
||||||
|
|
||||||
|
def test_order_no_item_available_anymore(self, client, other_user):
|
||||||
|
"""a user an item that is not available anymore. They get an error"""
|
||||||
|
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, max_limit=2
|
||||||
|
)
|
||||||
|
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,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": 2,
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 302 # success : first order
|
||||||
|
response = client.post(
|
||||||
|
order_url,
|
||||||
|
{
|
||||||
|
f"quantity_{item.pk}": 1,
|
||||||
|
"first_name": "Prénom",
|
||||||
|
"last_name": "Nom",
|
||||||
|
"phone": "0645632569",
|
||||||
|
"email": "test@mail.fr",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert response.status_code == 200 # error
|
||||||
|
assert (
|
||||||
|
response.context["error_message"]
|
||||||
|
== "Trop de test item 1 commandés pour la quantité disponible"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestGroupedOrderOverview:
|
class TestGroupedOrderOverview:
|
||||||
def test_get_overview(self, client_log):
|
def test_get_overview(self, client_log):
|
||||||
|
|
|
@ -245,7 +245,7 @@ def validate_item_ordered_nb(item, ordered_nb):
|
||||||
or if the ordered nb is negative"""
|
or if the ordered nb is negative"""
|
||||||
if ordered_nb < 0:
|
if ordered_nb < 0:
|
||||||
return f"Veuillez commander un nombre positif de {item.name}"
|
return f"Veuillez commander un nombre positif de {item.name}"
|
||||||
if item.get_remaining_nb() and item.get_remaining_nb() - ordered_nb < 0:
|
if item.get_remaining_nb() is not None and item.get_remaining_nb() - ordered_nb < 0:
|
||||||
return f"Trop de {item.name} commandés pour la quantité disponible"
|
return f"Trop de {item.name} commandés pour la quantité disponible"
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue