From 0fb4a8b2155c4e3377e055993156716e7d4d27e6 Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Mon, 19 Aug 2024 16:30:05 +0200 Subject: [PATCH 1/3] Fix date conversion when collection context has start/end date queries --- plone/app/event/browser/event_listing.py | 9 +++++++- plone/app/event/tests/test_event_listing.py | 24 +++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/plone/app/event/browser/event_listing.py b/plone/app/event/browser/event_listing.py index 55c0f2e1..e01de705 100644 --- a/plone/app/event/browser/event_listing.py +++ b/plone/app/event/browser/event_listing.py @@ -222,6 +222,13 @@ def _expand_events_start_end(self, start, end): # XXX: This actually fits most needs, but not all. Maybe someone # wants to come up with some edgecases! se = dict(start=None, end=None) + + def safe_dt(val): + # convert value from DateTime to datetime + if hasattr(val, "asdatetime"): + return val.asdatetime() + return val + if start: q = start.get("query") r = start.get("range") @@ -238,7 +245,7 @@ def _expand_events_start_end(self, start, end): r = end.get("range") if r == "min": se["start"] = q - return se["start"], se["end"] + return safe_dt(se["start"]), safe_dt(se["end"]) def formatted_date(self, occ): provider = getMultiAdapter( diff --git a/plone/app/event/tests/test_event_listing.py b/plone/app/event/tests/test_event_listing.py index 5eb94662..abab4e12 100644 --- a/plone/app/event/tests/test_event_listing.py +++ b/plone/app/event/tests/test_event_listing.py @@ -1,3 +1,4 @@ +from DateTime import DateTime from plone.app.event.base import localized_today from plone.app.event.testing import make_fake_response from plone.app.event.testing import PAEventDX_INTEGRATION_TESTING @@ -151,3 +152,26 @@ def test_no_date_filtering(self): "mode_day", ]: self.assertTrue(_class not in out) + + @mock.patch("plone.app.event.browser.event_listing.localized_now", new=PN) + @mock.patch("plone.app.event.base.localized_now", new=PN) + def test_end_date_filtering(self): + """Test date conversion between collection query and 'expand_events' + filtering. + """ + # plone.app.contenttypes ICollection type + self.portal.invokeFactory("Collection", "col_with_date_criterion", title="Col") + collection = self.portal.col_with_date_criterion + collection.query = [ + { + "i": "portal_type", + "o": "plone.app.querystring.operation.selection.any", + "v": ["Event", "plone.app.event.dx.event"], + }, + { + "i": "end", + "o": "plone.app.querystring.operation.date.largerThan", + "v": DateTime(PN()), + }, + ] + self.assertIs(len(self.portal.col_with_date_criterion.results()), 3) From f6a3aa8244bbcac89630a336cb8f148061ca2907 Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Mon, 19 Aug 2024 16:36:19 +0200 Subject: [PATCH 2/3] changenote --- news/404.bugfix | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 news/404.bugfix diff --git a/news/404.bugfix b/news/404.bugfix new file mode 100644 index 00000000..26707eee --- /dev/null +++ b/news/404.bugfix @@ -0,0 +1,2 @@ +Fix date conversion between collection query and ``expand_events`` filtering. +[petschki] From 22ce428cd56187d5327b34b1611359d9064dd56b Mon Sep 17 00:00:00 2001 From: Peter Mathis Date: Mon, 19 Aug 2024 16:40:16 +0200 Subject: [PATCH 3/3] call event_listing view in test to test conversion --- plone/app/event/tests/test_event_listing.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plone/app/event/tests/test_event_listing.py b/plone/app/event/tests/test_event_listing.py index abab4e12..db67bbd8 100644 --- a/plone/app/event/tests/test_event_listing.py +++ b/plone/app/event/tests/test_event_listing.py @@ -174,4 +174,8 @@ def test_end_date_filtering(self): "v": DateTime(PN()), }, ] + + view = self.portal.col_with_date_criterion.restrictedTraverse("@@event_listing") + view() + self.assertIs(len(self.portal.col_with_date_criterion.results()), 3)