Veranstaltungssuche findet keine Events, wenn auf einen Tag eingeschränkt #280

This commit is contained in:
Daniel Grams 2021-08-31 09:38:33 +02:00
parent 3e7b12dd49
commit c0dd763651
8 changed files with 71 additions and 8 deletions

View File

@ -380,7 +380,9 @@ class FindEventForm(FlaskForm):
csrf = False
date_from = CustomDateField(lazy_gettext("From"), validators=[Optional()])
date_to = CustomDateField(lazy_gettext("to"), validators=[Optional()])
date_to = CustomDateField(
lazy_gettext("to"), set_end_of_day=True, validators=[Optional()]
)
keyword = StringField(lazy_gettext("Keyword"), validators=[Optional()])
category_id = SelectField(
lazy_gettext("Category"), validators=[Optional()], coerce=int

View File

@ -13,7 +13,9 @@ class FindEventDateForm(FlaskForm):
csrf = False
date_from = CustomDateField(lazy_gettext("From"), validators=[Optional()])
date_to = CustomDateField(lazy_gettext("to"), validators=[Optional()])
date_to = CustomDateField(
lazy_gettext("to"), set_end_of_day=True, validators=[Optional()]
)
keyword = StringField(lazy_gettext("Keyword"), validators=[Optional()])
category_id = SelectField(
lazy_gettext("Category"), validators=[Optional()], coerce=int

View File

@ -12,7 +12,9 @@ class PlaningForm(FlaskForm):
csrf = False
date_from = CustomDateField(lazy_gettext("From"), validators=[Optional()])
date_to = CustomDateField(lazy_gettext("to"), validators=[Optional()])
date_to = CustomDateField(
lazy_gettext("to"), set_end_of_day=True, validators=[Optional()]
)
category_id = SelectField(
lazy_gettext("Category"), validators=[Optional()], coerce=int
)

View File

@ -7,7 +7,7 @@ from wtforms.fields.core import StringField
from wtforms.validators import Length, StopValidation
from wtforms.widgets import CheckboxInput, ListWidget, html_params
from project.dateutils import berlin_tz
from project.dateutils import berlin_tz, date_set_end_of_day
class MultiCheckboxField(SelectMultipleField):
@ -88,8 +88,20 @@ class CustomDateWidget:
class CustomDateField(DateTimeField):
set_end_of_day = False
widget = CustomDateWidget()
def __init__(
self,
label=None,
validators=None,
format="%Y-%m-%d %H:%M:%S",
set_end_of_day=False,
**kwargs
):
super(CustomDateField, self).__init__(label, validators, format, **kwargs)
self.set_end_of_day = set_end_of_day
def process_formdata(self, valuelist):
if valuelist:
try:
@ -99,7 +111,12 @@ class CustomDateField(DateTimeField):
return
date = datetime.strptime(date_str, "%Y-%m-%d")
self.data = berlin_tz.localize(date)
localized_date = berlin_tz.localize(date)
if self.set_end_of_day:
localized_date = date_set_end_of_day(localized_date)
self.data = localized_date
except Exception:
raise ValueError("Not a valid date value. Looking for YYYY-MM-DD.")

View File

@ -61,7 +61,7 @@ class EventSearchParams(object):
@date_to_str.setter
def date_to_str(self, value):
self._date_to_str = value
self._date_to = form_input_to_date(value)
self._date_to = form_input_to_date(value, 23, 59, 59)
@property
def coordinate(self):

View File

@ -61,3 +61,21 @@ def test_search(client, seeder, utils):
organizer_id = seeder.upsert_default_event_organizer(admin_unit_id)
url = utils.get_url("api_v1_event_date_search", organizer_id=organizer_id)
response = utils.get_ok(url)
def test_search_oneDay(client, seeder, utils):
from project.dateutils import create_berlin_date
user_id, admin_unit_id = seeder.setup_base()
start = create_berlin_date(2020, 10, 3, 10)
end = create_berlin_date(2020, 10, 3, 11)
name = "Spezialveranstaltung"
event_id = seeder.create_event(admin_unit_id, name=name, start=start, end=end)
url = utils.get_url(
"api_v1_event_date_search", date_from="2020-10-03", date_to="2020-10-03"
)
response = utils.get_ok(url)
assert len(response.json["items"]) == 1
assert response.json["items"][0]["event"]["id"] == event_id

View File

@ -190,6 +190,7 @@ class Seeder(object):
end=None,
draft=False,
name="Name",
start=None,
):
from project.models import Event, EventAttendanceMode, PublicStatus
from project.services.event import insert_event, upsert_event_category
@ -199,8 +200,8 @@ class Seeder(object):
event.admin_unit_id = admin_unit_id
event.categories = [upsert_event_category("Other")]
event.name = name
event.description = "Beschreibung"
event.start = self.get_now_by_minute()
event.description = ("Beschreibung",)
event.start = start if start else self.get_now_by_minute()
event.end = end
event.event_place_id = self.upsert_default_event_place(admin_unit_id)
event.organizer_id = self.upsert_default_event_organizer(admin_unit_id)

View File

@ -43,6 +43,27 @@ def test_event_dates(client, seeder, utils):
utils.get_ok(url)
def test_event_dates_oneDay(client, seeder, utils):
from project.dateutils import create_berlin_date
user_id, admin_unit_id = seeder.setup_base()
au_short_name = "meinecrew"
start = create_berlin_date(2020, 10, 3, 10)
end = create_berlin_date(2020, 10, 3, 11)
name = "Spezialveranstaltung"
seeder.create_event(admin_unit_id, name=name, start=start, end=end)
url = utils.get_url(
"widget_event_dates",
au_short_name=au_short_name,
date_from="2020-10-03",
date_to="2020-10-03",
)
response = utils.get_ok(url)
utils.assert_response_contains(response, name)
def test_event_date(client, seeder, utils, app, db):
user_id, admin_unit_id = seeder.setup_base(log_in=False)
seeder.create_event(admin_unit_id)