index view only shows grouped orders organized by logged user

This commit is contained in:
Laetitia Getti 2023-04-18 16:49:41 +02:00
parent e16447dcff
commit 2fdc1b6862
6 changed files with 93 additions and 17 deletions

View file

@ -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

View file

@ -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
),
),
]

View file

@ -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")

View file

@ -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 %}

View file

@ -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(

View file

@ -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"