From 347f5b75cc725149d002406d92686117f86a82d0 Mon Sep 17 00:00:00 2001 From: Daniel Grams Date: Sun, 26 Nov 2023 13:11:50 +0100 Subject: [PATCH] Planning external calendars #561 --- project/views/js.py | 13 ++++++++++++- tests/views/test_js.py | 17 ++++++++++++++++- 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/project/views/js.py b/project/views/js.py index 2fffbc4..07f513d 100644 --- a/project/views/js.py +++ b/project/views/js.py @@ -1,3 +1,4 @@ +import json from datetime import datetime import icalendar @@ -16,6 +17,7 @@ from project.api.custom_widget.schemas import CustomWidgetSchema from project.dateutils import form_input_to_date from project.maputils import find_gmaps_places, get_gmaps_place from project.models import AdminUnit, CustomWidget, EventOrganizer, EventPlace +from project.services.admin import upsert_settings from project.services.place import get_event_places from project.services.user import find_user_by_email from project.utils import decode_response_content, get_place_str @@ -200,7 +202,16 @@ def js_icalevents(): start_date = form_input_to_date(date_from).date() end_date = form_input_to_date(date_to).date() - response = requests.get(url) + settings = upsert_settings() + planning_external_calendars_str = ( + settings.planning_external_calendars + if settings.planning_external_calendars + else "[]" + ) + external_calendars = json.loads(planning_external_calendars_str) + external_calendar = next((c for c in external_calendars if c["url"] == url)) + + response = requests.get(external_calendar["url"]) ical_string = decode_response_content(response) calendar = icalendar.Calendar.from_ical(ical_string) events = recurring_ical_events.of(calendar).between(start_date, end_date) diff --git a/tests/views/test_js.py b/tests/views/test_js.py index be84e58..73651ed 100644 --- a/tests/views/test_js.py +++ b/tests/views/test_js.py @@ -301,12 +301,27 @@ def test_js_widget_loader_custom_widget(client, seeder: Seeder, utils: UtilActio def test_js_icalevents( - client, seeder: Seeder, utils: UtilActions, shared_datadir, requests_mock + client, app, db, seeder: Seeder, utils: UtilActions, shared_datadir, requests_mock ): user_id, admin_unit_id = seeder.setup_base() url = utils.get_url("planning") utils.get(url) + with app.app_context(): + import json + + from project.services.admin import upsert_settings + + settings = upsert_settings() + settings.planning_external_calendars = json.dumps( + [ + { + "url": "http://test.de", + } + ] + ) + db.session.commit() + params = (client, utils, shared_datadir) _assert_icalevents(params, "feiertage-deutschland.ics") _assert_icalevents(params, "recurring-events-changed-duration.ics")