Skip to content

Commit 7d72def

Browse files
authored
Bug search event restapi (#148)
* test * test * test * fix * fix * fix * black * black * largerthan
1 parent 92e600b commit 7d72def

File tree

3 files changed

+141
-8
lines changed

3 files changed

+141
-8
lines changed

src/redturtle/volto/restapi/services/querystringsearch/get.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,21 @@ def is_event_search(self, query):
173173
if not query:
174174
return False
175175

176-
indexes = [x["i"] for x in query]
176+
indexes = {x["i"]: x for x in query}
177177

178178
portal_type_check = False
179-
indexes_check = "start" in indexes
179+
indexes_check = False
180+
if "start" in indexes:
181+
# TODO: do we have other cases to handle?
182+
custom_ops = [
183+
"plone.app.querystring.operation.date.lessThan",
184+
"plone.app.querystring.operation.date.largerThan",
185+
]
186+
if indexes["start"].get("o") in custom_ops:
187+
# this is a custom search, not an "event" search
188+
indexes_check = False
189+
else:
190+
indexes_check = True
180191

181192
for param in query:
182193
i = param.get("i", "")
@@ -220,6 +231,7 @@ def parse_event_dates(self, parsed_query):
220231

221232
query_start = parsed_query.get("start", {})
222233
query_end = parsed_query.get("end", {})
234+
223235
if not query_start and not query_end:
224236
return start, end
225237

@@ -232,6 +244,7 @@ def parse_event_dates(self, parsed_query):
232244
end = self.get_datetime_value(value[1])
233245
return start, end
234246
start = self.get_datetime_value(value)
247+
235248
if query_end:
236249
range = query_end.get("range", "")
237250
value = query_end.get("query", "")

src/redturtle/volto/tests/test_querystringsearch.py

Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# -*- coding: utf-8 -*-
2+
from datetime import datetime
3+
from datetime import timedelta
24
from plone import api
35
from plone.app.testing import setRoles
46
from plone.app.testing import SITE_OWNER_NAME
57
from plone.app.testing import SITE_OWNER_PASSWORD
68
from plone.app.testing import TEST_USER_ID
9+
from plone.dexterity.utils import createContentInContainer
710
from plone.restapi.testing import RelativeSession
811
from redturtle.volto.testing import REDTURTLE_VOLTO_API_FUNCTIONAL_TESTING
912
from transaction import commit
@@ -79,3 +82,120 @@ def test_if_absolutePath_is_invalid_and_is_not_a_objectbrowser_call_do_not_filte
7982
result = response.json()
8083
self.assertEqual(response.status_code, 200)
8184
self.assertEqual(result["items_total"], 2)
85+
86+
def test_search_event_no_event_search_lessthan(self):
87+
start_date = datetime.strptime("1/11/2024 10:00:00", "%d/%m/%Y %H:%M:%S")
88+
end_date = start_date + timedelta(days=1, hours=1)
89+
createContentInContainer(
90+
self.portal,
91+
"Event",
92+
id="test-event",
93+
title="Test Event",
94+
start=start_date,
95+
end=end_date,
96+
location="Vienna",
97+
)
98+
commit()
99+
100+
response = self.api_session.post(
101+
"/@querystring-search",
102+
json={
103+
"query": [
104+
{
105+
"i": "portal_type",
106+
"o": "plone.app.querystring.operation.selection.any",
107+
"v": ["Event"],
108+
},
109+
{
110+
"i": "start",
111+
"o": "plone.app.querystring.operation.date.lessThan",
112+
"v": "2024-11-02",
113+
},
114+
],
115+
},
116+
)
117+
result = response.json()
118+
self.assertEqual(response.status_code, 200)
119+
self.assertEqual(result["items_total"], 1)
120+
121+
response = self.api_session.post(
122+
"/@querystring-search",
123+
json={
124+
"query": [
125+
{
126+
"i": "portal_type",
127+
"o": "plone.app.querystring.operation.selection.any",
128+
"v": ["Event"],
129+
},
130+
{
131+
"i": "start",
132+
"o": "plone.app.querystring.operation.date.lessThan",
133+
"v": "2024-10-29",
134+
},
135+
],
136+
},
137+
)
138+
result = response.json()
139+
self.assertEqual(response.status_code, 200)
140+
self.assertEqual(result["items_total"], 0)
141+
142+
def test_search_event_no_event_search_largerthan(self):
143+
start_date = datetime.strptime("1/11/2024 10:00:00", "%d/%m/%Y %H:%M:%S")
144+
end_date = start_date + timedelta(days=1, hours=1)
145+
createContentInContainer(
146+
self.portal,
147+
"Event",
148+
id="test-event",
149+
title="Test Event",
150+
start=start_date,
151+
end=end_date,
152+
location="Vienna",
153+
)
154+
commit()
155+
156+
response = self.api_session.post(
157+
"/@querystring-search",
158+
json={
159+
"query": [
160+
{
161+
"i": "portal_type",
162+
"o": "plone.app.querystring.operation.selection.any",
163+
"v": ["Event"],
164+
},
165+
{
166+
"i": "start",
167+
"o": "plone.app.querystring.operation.date.largerThan",
168+
"v": "2024-11-02",
169+
},
170+
],
171+
},
172+
)
173+
result = response.json()
174+
self.assertEqual(response.status_code, 200)
175+
self.assertEqual(result["items_total"], 0)
176+
177+
response = self.api_session.post(
178+
"/@querystring-search",
179+
json={
180+
"query": [
181+
{
182+
"i": "portal_type",
183+
"o": "plone.app.querystring.operation.selection.any",
184+
"v": ["Event"],
185+
},
186+
{
187+
"i": "start",
188+
"o": "plone.app.querystring.operation.date.largerThan",
189+
"v": "2024-10-29",
190+
},
191+
],
192+
},
193+
)
194+
result = response.json()
195+
self.assertEqual(response.status_code, 200)
196+
self.assertEqual(result["items_total"], 1)
197+
198+
def test_search_event_event_search(self):
199+
# TODO
200+
# {"metadata_fields":"_all","b_size":24,"limit":"9","query":[{"i":"portal_type","o":"plone.app.querystring.operation.selection.any","v":["Event"]},{"i":"path","o":"plone.app.querystring.operation.string.relativePath","v":"novita/eventi"},{"i":"start","o":"plone.app.querystring.operation.date.today","v":""}],"sort_on":"start","sort_order":"descending","b_start":0}
201+
pass

src/redturtle/volto/tests/test_recurrence.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,21 @@ def setUp(self):
1717
self.request = self.layer["request"]
1818
set_browserlayer(self.request)
1919
setRoles(self.portal, TEST_USER_ID, ["Manager"])
20-
self.start_date = datetime.strptime("01/01/2024 10:00:00", "%d/%m/%Y %H:%M:%S")
21-
self.end_date = self.start_date + timedelta(hours=1)
2220

23-
self.event = createContentInContainer(
21+
def test_get_occurrences_from_catalog(self):
22+
start_date = datetime.strptime("01/01/2024 10:00:00", "%d/%m/%Y %H:%M:%S")
23+
end_date = start_date + timedelta(hours=1)
24+
createContentInContainer(
2425
self.portal,
2526
"Event",
2627
id="test-event",
2728
title="Test Event",
28-
start=self.start_date,
29-
end=self.end_date,
29+
start=start_date,
30+
end=end_date,
3031
location="Vienna",
3132
recurrence="RRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO;COUNT=50",
3233
)
3334

34-
def test_get_occurrences_from_catalog(self):
3535
catalog = self.portal.portal_catalog
3636

3737
start_date_search = datetime.strptime(

0 commit comments

Comments
 (0)