This commit is contained in:
PierreDubrulle 2024-01-21 17:54:15 +01:00 committed by Alexis Metaireau
parent d726284e00
commit e28b697795

View file

@ -7,6 +7,7 @@ from django.contrib import auth
from django.forms.utils import to_current_timezone from django.forms.utils import to_current_timezone
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
from icalendar import Calendar, vText
from la_chariotte.order import models from la_chariotte.order import models
from la_chariotte.order.tests.utils import ( from la_chariotte.order.tests.utils import (
@ -681,6 +682,7 @@ class TestGroupedOrderOverview:
response = client_log.get(overview_url) response = client_log.get(overview_url)
assert response.status_code == 200 assert response.status_code == 200
assert "test item" in response.content.decode() assert "test item" in response.content.decode()
assert {"test@mail.fr"} == response.context["emails_list"]
assert "gr order test" in response.content.decode() assert "gr order test" in response.content.decode()
item.refresh_from_db() item.refresh_from_db()
assert item.get_total_price() == 8 assert item.get_total_price() == 8
@ -1175,6 +1177,55 @@ class TestGroupedOrderDeleteView:
assert models.GroupedOrder.objects.count() == 1 assert models.GroupedOrder.objects.count() == 1
class TestGroupedOrderEventView:
def test_get_event(self, client_log):
# Setup
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),
)
event_url = reverse(
"order:grouped_order_event",
kwargs={
"code": grouped_order.code,
},
)
response = client_log.get(event_url)
# Check the response
assert response.status_code == 200
assert response["Content-Type"] == "text/calendar"
assert (
response["Content-Disposition"]
== f"attachment; filename={grouped_order.name}.ics"
)
# Parse the iCal data
cal = Calendar.from_ical(response.content.decode())
# Check the event details
for component in cal.walk():
if component.name == "VEVENT":
assert component.get("summary") == grouped_order.name
assert component.get("dtstart").dt == grouped_order.delivery_date
assert component.get(
"dtend"
).dt == grouped_order.delivery_date + datetime.timedelta(days=1)
if grouped_order.description is None:
assert (
component.get("description").to_ical().decode("utf-8") == "None"
)
else:
assert (
component.get("description").to_ical().decode("utf-8")
== grouped_order.description
)
assert (
component.get("organizer") == "MAILTO:" + grouped_order.orga.email
)
class TestGroupedOrderDuplicateView: class TestGroupedOrderDuplicateView:
def test_duplicate_grouped_order(self, client_log): def test_duplicate_grouped_order(self, client_log):
"""The orga of the GO duplicates it. """The orga of the GO duplicates it.
@ -1335,11 +1386,8 @@ class TestGroupedOrderSheetView:
assert orders[2].author.last_name == "lescargot" assert orders[2].author.last_name == "lescargot"
class TestExportGroupedOrderEmailAddressesToCSVView: class TestExportGroupOrderEmailAdressesToDownloadView:
def test_user_not_logged_gets_redirected(self, client, other_user): def test_user_not_logged_gets_redirected(self, client, other_user):
"""
A user that is not logged accesses the email list. They get redirected to the login view
"""
grouped_order = create_grouped_order( grouped_order = create_grouped_order(
days_before_delivery_date=5, days_before_delivery_date=5,
days_before_deadline=2, days_before_deadline=2,
@ -1359,10 +1407,6 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
assert response.url.endswith(email_list_view_url) assert response.url.endswith(email_list_view_url)
def test_user_not_orga_forbidden(self, client_log, other_user): def test_user_not_orga_forbidden(self, client_log, other_user):
"""
A user that is not orga cannot accesses the email list.
They get a 403 forbidden error
"""
grouped_order = create_grouped_order( grouped_order = create_grouped_order(
days_before_delivery_date=5, days_before_delivery_date=5,
days_before_deadline=2, days_before_deadline=2,
@ -1379,9 +1423,6 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
assert response.status_code == 403 assert response.status_code == 403
def test_email_addresses(self, client_log): def test_email_addresses(self, client_log):
"""
The grouped order orga accesseses the email addresses list
"""
grouped_order = create_grouped_order( grouped_order = create_grouped_order(
days_before_delivery_date=5, days_before_delivery_date=5,
days_before_deadline=2, days_before_deadline=2,
@ -1403,6 +1444,95 @@ class TestExportGroupedOrderEmailAddressesToCSVView:
assert response.status_code == 200 assert response.status_code == 200
assert email in response.content.decode() assert email in response.content.decode()
def test_export_format_csv(self, client_log):
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),
)
item = models.Item.objects.create(
name="test item 1", grouped_order=grouped_order, price=2
)
overview_url = reverse(
"order:grouped_order_overview",
kwargs={
"code": grouped_order.code,
},
)
order_url = reverse(
"order:order",
kwargs={
"code": grouped_order.code,
},
)
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": "",
},
)
email_list_view_url = (
reverse(
"order:email_list",
kwargs={
"code": grouped_order.code,
},
)
+ "?format=csv"
)
response = client_log.get(email_list_view_url)
assert response.status_code == 200
assert response["Content-Type"] == "text/csv"
content = response.content.decode()
assert "order_name,email" in content
assert "order_name,email\r\ngr order test,test@mail.fr\r\n" in content
def test_export_format_default(self, client_log):
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),
)
item = models.Item.objects.create(
name="test item 1", grouped_order=grouped_order, price=2
)
order_url = reverse(
"order:order",
kwargs={
"code": grouped_order.code,
},
)
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": "",
},
)
email_list_view_url = reverse(
"order:email_list",
kwargs={
"code": grouped_order.code,
},
)
response = client_log.get(email_list_view_url)
assert response.status_code == 200
assert response["Content-Type"] == "text/html; charset=utf-8"
content = response.content.decode()
assert "test@mail.fr" in content
class TestExportGroupedOrderToCSVView: class TestExportGroupedOrderToCSVView:
def test_user_not_logged_gets_redirected(self, client, other_user): def test_user_not_logged_gets_redirected(self, client, other_user):