From e28b697795bdbbc814c7add42c0a40ebd4cc977d Mon Sep 17 00:00:00 2001 From: PierreDubrulle Date: Sun, 21 Jan 2024 17:54:15 +0100 Subject: [PATCH] fix cov --- .../test_views/test_views_grouped_order.py | 152 ++++++++++++++++-- 1 file changed, 141 insertions(+), 11 deletions(-) diff --git a/la_chariotte/order/tests/test_views/test_views_grouped_order.py b/la_chariotte/order/tests/test_views/test_views_grouped_order.py index 0e5d817..35753ee 100644 --- a/la_chariotte/order/tests/test_views/test_views_grouped_order.py +++ b/la_chariotte/order/tests/test_views/test_views_grouped_order.py @@ -7,6 +7,7 @@ from django.contrib import auth from django.forms.utils import to_current_timezone from django.urls import reverse from django.utils import timezone +from icalendar import Calendar, vText from la_chariotte.order import models from la_chariotte.order.tests.utils import ( @@ -681,6 +682,7 @@ class TestGroupedOrderOverview: response = client_log.get(overview_url) assert response.status_code == 200 assert "test item" in response.content.decode() + assert {"test@mail.fr"} == response.context["emails_list"] assert "gr order test" in response.content.decode() item.refresh_from_db() assert item.get_total_price() == 8 @@ -1175,6 +1177,55 @@ class TestGroupedOrderDeleteView: 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: def test_duplicate_grouped_order(self, client_log): """The orga of the GO duplicates it. @@ -1335,11 +1386,8 @@ class TestGroupedOrderSheetView: assert orders[2].author.last_name == "lescargot" -class TestExportGroupedOrderEmailAddressesToCSVView: +class TestExportGroupOrderEmailAdressesToDownloadView: 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( days_before_delivery_date=5, days_before_deadline=2, @@ -1359,10 +1407,6 @@ class TestExportGroupedOrderEmailAddressesToCSVView: assert response.url.endswith(email_list_view_url) 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( days_before_delivery_date=5, days_before_deadline=2, @@ -1379,9 +1423,6 @@ class TestExportGroupedOrderEmailAddressesToCSVView: assert response.status_code == 403 def test_email_addresses(self, client_log): - """ - The grouped order orga accesseses the email addresses list - """ grouped_order = create_grouped_order( days_before_delivery_date=5, days_before_deadline=2, @@ -1403,6 +1444,95 @@ class TestExportGroupedOrderEmailAddressesToCSVView: assert response.status_code == 200 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: def test_user_not_logged_gets_redirected(self, client, other_user):