mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
index view only shows grouped orders organized by logged user
This commit is contained in:
parent
e16447dcff
commit
2fdc1b6862
6 changed files with 93 additions and 17 deletions
|
@ -8,3 +8,11 @@ def client_log(client, django_user_model):
|
|||
user = django_user_model.objects.create_user(username=username, password=password)
|
||||
client.login(username=username, password=password)
|
||||
return client
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def other_user(django_user_model):
|
||||
username = "other@user.fr"
|
||||
password = "azertypassword"
|
||||
user = django_user_model.objects.create_user(username=username, password=password)
|
||||
return user
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# Generated by Django 4.2 on 2023-04-18 13:08
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
("order", "0010_rename_grouped_order_groupedorder"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="groupedorder",
|
||||
name="orga",
|
||||
field=models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL
|
||||
),
|
||||
),
|
||||
]
|
|
@ -1,10 +1,11 @@
|
|||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
class GroupedOrder(models.Model):
|
||||
name = models.CharField(max_length=100, null=True) # optionnal
|
||||
orga = models.CharField(max_length=100) # a changer, utiliser ForeignKey de user
|
||||
orga = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
delivery_date = models.DateField("Date de livraison")
|
||||
deadline = models.DateTimeField("Date limite de commande")
|
||||
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
</head>
|
||||
<body>
|
||||
<p>Index des commandes que l'utilisateur·ice connecté·e organise</p>
|
||||
<p>Pour l'instant, index de toutes les commandes groupées qui existent</p>
|
||||
|
||||
{% if grouped_order_list.incoming_grouped_orders or grouped_order_list.crossed_deadline_grouped_orders or grouped_order_list.old_grouped_orders %}
|
||||
{% if grouped_order_list.incoming_grouped_orders %}
|
||||
|
|
|
@ -2,6 +2,7 @@ import datetime
|
|||
|
||||
import pytest
|
||||
from django.contrib import auth
|
||||
from django.contrib.auth.models import User
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
|
@ -17,7 +18,7 @@ def create_grouped_order(days_before_delivery_date,days_before_deadline,name):
|
|||
date = timezone.now().date() + datetime.timedelta(days=days_before_delivery_date)
|
||||
deadline = timezone.now() + datetime.timedelta(days=days_before_deadline)
|
||||
return GroupedOrder.objects.create(
|
||||
name=name, orga="test orga", delivery_date=date, deadline=deadline
|
||||
name=name, orga=orga_user, delivery_date=date, deadline=deadline
|
||||
)
|
||||
|
||||
|
||||
|
@ -57,15 +58,22 @@ class TestGroupedOrderIndexView:
|
|||
According to their delivery date and deadline, grouped orders are placed in the correct section : several gr orders
|
||||
"""
|
||||
future_grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5, days_before_deadline=2, name="future"
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="future",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
crossed_deadline_gr_order = create_grouped_order(
|
||||
days_before_delivery_date=2,
|
||||
days_before_deadline=-1,
|
||||
name="crossed deadline",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
old_gr_order = create_grouped_order(
|
||||
days_before_delivery_date=-1, days_before_deadline=-3, name="old"
|
||||
days_before_delivery_date=-1,
|
||||
days_before_deadline=-3,
|
||||
name="old",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
response = client.get(reverse("order:index"))
|
||||
|
||||
|
@ -129,7 +137,10 @@ class TestGroupedOrderIndexView:
|
|||
According to their delivery date and deadline, grouped orders are placed in correct section : only old gr order
|
||||
"""
|
||||
old_gr_order = create_grouped_order(
|
||||
days_before_delivery_date=-1, days_before_deadline=-3, name="passée"
|
||||
days_before_delivery_date=-1,
|
||||
days_before_deadline=-3,
|
||||
name="passée",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
response = client.get(reverse("order:index"))
|
||||
|
||||
|
@ -166,7 +177,10 @@ class TestGroupedOrderIndexView:
|
|||
According to their delivery date and deadline, grouped orders are placed in correct section : only incoming gr order
|
||||
"""
|
||||
future_grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5, days_before_deadline=2, name="future"
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="future",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
response = client.get(reverse("order:index"))
|
||||
|
||||
|
@ -198,14 +212,45 @@ class TestGroupedOrderIndexView:
|
|||
== future_grouped_order
|
||||
)
|
||||
|
||||
def test_gr_order_not_organized_by_logged_user(self, client_log, other_user):
|
||||
"""
|
||||
If the logged user is not the organizer of a grouped order they don't see it on IndexView
|
||||
"""
|
||||
logged_user = auth.get_user(client_log)
|
||||
future_grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="future",
|
||||
orga_user=other_user,
|
||||
)
|
||||
assert future_grouped_order.orga is not logged_user
|
||||
response = client_log.get(reverse("order:index"))
|
||||
assert response.status_code == 200
|
||||
assert "Pas de commande groupée pour l'instant" in response.content.decode()
|
||||
assert len(response.context["grouped_order_list"]["old_grouped_orders"]) == 0
|
||||
assert (
|
||||
len(
|
||||
response.context["grouped_order_list"][
|
||||
"crossed_deadline_grouped_orders"
|
||||
]
|
||||
)
|
||||
== 0
|
||||
)
|
||||
assert (
|
||||
len(response.context["grouped_order_list"]["incoming_grouped_orders"]) == 0
|
||||
)
|
||||
|
||||
|
||||
class TestGroupedOrderDetailView:
|
||||
def test_order_item(self, client):
|
||||
def test_order_item(self, client, other_user):
|
||||
"""
|
||||
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"
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="gr order test",
|
||||
orga_user=other_user,
|
||||
)
|
||||
item = Item.objects.create(name="test item", grouped_order=grouped_order)
|
||||
detail_url = reverse(
|
||||
|
|
|
@ -9,20 +9,21 @@ from .models import GroupedOrder, Item, Order, OrderedItem
|
|||
|
||||
|
||||
class IndexView(LoginRequiredMixin, generic.ListView):
|
||||
"""Vue de toutes les commandes groupées existantes - plus tard, de toutes les commandes groupées de l'utilisateur connecté"""
|
||||
|
||||
"""No permissions restriction"""
|
||||
"""View showing all the grouped orders organized by the authenticated user"""
|
||||
|
||||
template_name = "order/index.html"
|
||||
context_object_name = "grouped_order_list"
|
||||
|
||||
def get_queryset(self):
|
||||
"""Only grouped orders organized by logged user"""
|
||||
logged_user_grouped_orders = GroupedOrder.objects.filter(orga=self.request.user)
|
||||
|
||||
"""3 grouped_order status : incoming, crossed_deadline, and old"""
|
||||
now = timezone.now()
|
||||
today = now.date()
|
||||
|
||||
"""Return the 5 most recent old grouped orders"""
|
||||
old_grouped_orders = GroupedOrder.objects.filter(
|
||||
old_grouped_orders = logged_user_grouped_orders.filter(
|
||||
# is_to_be_delivered=False
|
||||
delivery_date__lt=today
|
||||
).order_by("-delivery_date")[
|
||||
|
@ -31,13 +32,13 @@ class IndexView(LoginRequiredMixin, generic.ListView):
|
|||
|
||||
"""Return all grouped orders, that have crossed their ordering deadline but the delivery date is still to come"""
|
||||
crossed_dealine_grouped_orders = (
|
||||
GroupedOrder.objects.filter(delivery_date__gte=today)
|
||||
logged_user_grouped_orders.filter(delivery_date__gte=today)
|
||||
.filter(deadline__lt=now)
|
||||
.order_by("-delivery_date")
|
||||
) # delivery date >= today (not delivered) and deadline < today (we cannot order)
|
||||
|
||||
"""Return all incoming grouped orders"""
|
||||
incoming_grouped_orders = GroupedOrder.objects.filter(
|
||||
incoming_grouped_orders = logged_user_grouped_orders.filter(
|
||||
deadline__gte=now
|
||||
).order_by(
|
||||
"deadline"
|
||||
|
@ -50,7 +51,7 @@ class IndexView(LoginRequiredMixin, generic.ListView):
|
|||
|
||||
|
||||
class GroupedOrderDetailView(generic.DetailView):
|
||||
"""Vue de détail d'une commande groupée - possibilité de commander si elle est en cours"""
|
||||
"""Detail view for a grouped order - possibility to order if it is ongoing - No permissions restriction"""
|
||||
|
||||
model = GroupedOrder
|
||||
template_name = "order/grouped_order_detail.html"
|
||||
|
@ -58,7 +59,7 @@ class GroupedOrderDetailView(generic.DetailView):
|
|||
|
||||
|
||||
class GroupedOrderOrgaView(generic.DetailView):
|
||||
"""Vue de supervision d'une commande groupée"""
|
||||
"""Overview of a grouped order, for the organizer"""
|
||||
|
||||
model = GroupedOrder
|
||||
template_name = "order/grouped_order_orga.html"
|
||||
|
|
Loading…
Reference in a new issue