mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-07 22:35:36 +00:00
Resolve "This week operator does not return correct results when current date is a Monday"
This commit is contained in:
parent
de70635ce3
commit
f2e830e9e6
3 changed files with 123 additions and 5 deletions
backend
src/baserow/contrib/database/views
tests/baserow/contrib/database/view
changelog/entries/unreleased/bug
|
@ -1688,7 +1688,7 @@ DATE_FILTER_OPERATOR_BOUNDS = {
|
|||
),
|
||||
DateFilterOperators.THIS_WEEK: lambda filter_date: DateFilterBounds(
|
||||
filter_date + relativedelta(weekday=MO(-1)),
|
||||
filter_date + relativedelta(weekday=MO(+1)),
|
||||
filter_date + relativedelta(days=1, weekday=MO(+1)),
|
||||
),
|
||||
DateFilterOperators.THIS_MONTH: lambda filter_date: DateFilterBounds(
|
||||
filter_date.replace(day=1),
|
||||
|
@ -1699,8 +1699,8 @@ DATE_FILTER_OPERATOR_BOUNDS = {
|
|||
filter_date.replace(day=1, month=1) + relativedelta(years=1),
|
||||
),
|
||||
DateFilterOperators.NEXT_WEEK: lambda filter_date: DateFilterBounds(
|
||||
filter_date + relativedelta(weekday=MO(+1)),
|
||||
filter_date + relativedelta(weekday=MO(+2)),
|
||||
filter_date + relativedelta(days=1, weekday=MO(+1)),
|
||||
filter_date + relativedelta(days=1, weekday=MO(+2)),
|
||||
),
|
||||
DateFilterOperators.NEXT_MONTH: lambda filter_date: DateFilterBounds(
|
||||
filter_date.replace(day=1) + relativedelta(months=1),
|
||||
|
@ -1716,7 +1716,7 @@ DATE_FILTER_OPERATOR_BOUNDS = {
|
|||
),
|
||||
DateFilterOperators.NR_WEEKS_AGO: lambda filter_date: DateFilterBounds(
|
||||
filter_date + relativedelta(weekday=MO(-1)),
|
||||
filter_date + relativedelta(weekday=MO(+1)),
|
||||
filter_date + relativedelta(days=1, weekday=MO(+1)),
|
||||
),
|
||||
DateFilterOperators.NR_MONTHS_AGO: lambda filter_date: DateFilterBounds(
|
||||
filter_date.replace(day=1), filter_date.replace(day=1) + relativedelta(months=1)
|
||||
|
@ -1731,7 +1731,7 @@ DATE_FILTER_OPERATOR_BOUNDS = {
|
|||
),
|
||||
DateFilterOperators.NR_WEEKS_FROM_NOW: lambda filter_date: DateFilterBounds(
|
||||
filter_date + relativedelta(weekday=MO(-1)),
|
||||
filter_date + relativedelta(weekday=MO(+1)),
|
||||
filter_date + relativedelta(days=1, weekday=MO(+1)),
|
||||
),
|
||||
DateFilterOperators.NR_MONTHS_FROM_NOW: lambda filter_date: DateFilterBounds(
|
||||
filter_date.replace(day=1), filter_date.replace(day=1) + relativedelta(months=1)
|
||||
|
|
|
@ -6821,3 +6821,113 @@ def test_all_view_filters_can_accept_strings_as_filter_value(data_fixture):
|
|||
handler.get_queryset(view)
|
||||
except Exception as e:
|
||||
pytest.fail(f"Exception raised: {e}")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_week_operator_for_view_multi_date_filters(data_fixture):
|
||||
user = data_fixture.create_user()
|
||||
table = data_fixture.create_database_table(user=user)
|
||||
date_field = data_fixture.create_date_field(table=table)
|
||||
view = data_fixture.create_grid_view(table=table)
|
||||
rows = (
|
||||
RowHandler()
|
||||
.force_create_rows(
|
||||
user=user,
|
||||
table=table,
|
||||
rows_values=[
|
||||
{date_field.db_column: date(2025, 3, 16)},
|
||||
{date_field.db_column: date(2025, 3, 17)}, # MO-1
|
||||
{date_field.db_column: date(2025, 3, 23)},
|
||||
{date_field.db_column: date(2025, 3, 24)}, # MO
|
||||
{date_field.db_column: date(2025, 3, 25)},
|
||||
{date_field.db_column: date(2025, 3, 26)},
|
||||
{date_field.db_column: date(2025, 3, 27)},
|
||||
{date_field.db_column: date(2025, 3, 28)},
|
||||
{date_field.db_column: date(2025, 3, 29)},
|
||||
{date_field.db_column: date(2025, 3, 30)},
|
||||
{date_field.db_column: date(2025, 3, 31)}, # MO+1
|
||||
{date_field.db_column: date(2025, 4, 1)},
|
||||
{date_field.db_column: date(2025, 4, 6)},
|
||||
{date_field.db_column: date(2025, 4, 7)}, # MO+2
|
||||
],
|
||||
)
|
||||
.created_rows
|
||||
)
|
||||
|
||||
view_filter = data_fixture.create_view_filter(
|
||||
view=view,
|
||||
field=date_field,
|
||||
type="date_is",
|
||||
value="Europe/Rome??this_week",
|
||||
)
|
||||
|
||||
handler = ViewHandler()
|
||||
model = table.get_model()
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 3, 24),
|
||||
date(2025, 3, 25),
|
||||
date(2025, 3, 26),
|
||||
date(2025, 3, 27),
|
||||
date(2025, 3, 28),
|
||||
date(2025, 3, 29),
|
||||
date(2025, 3, 30),
|
||||
]
|
||||
|
||||
view_filter.value = "Europe/Rome??one_week_ago"
|
||||
view_filter.save()
|
||||
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 3, 17),
|
||||
date(2025, 3, 18),
|
||||
date(2025, 3, 23),
|
||||
]
|
||||
|
||||
view_filter.value = "Europe/Rome?2?nr_weeks_ago"
|
||||
view_filter.save()
|
||||
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 3, 16),
|
||||
]
|
||||
|
||||
view_filter.value = "Europe/Rome??next_week"
|
||||
view_filter.save()
|
||||
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 3, 31),
|
||||
date(2025, 4, 1),
|
||||
date(2025, 4, 6),
|
||||
]
|
||||
|
||||
view_filter.value = "Europe/Rome??next_week"
|
||||
view_filter.save()
|
||||
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 3, 31),
|
||||
date(2025, 4, 1),
|
||||
date(2025, 4, 6),
|
||||
]
|
||||
|
||||
view_filter.value = "Europe/Rome?2?nr_weeks_from_now"
|
||||
view_filter.save()
|
||||
|
||||
for day in range(24, 30): # MO-SU
|
||||
with freeze_time(f"2025-03-{day}"):
|
||||
qs = handler.apply_filters(view, model.objects.all())
|
||||
[getattr(r, date_field.db_column) for r in qs.all()] == [
|
||||
date(2025, 4, 7),
|
||||
]
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"type": "bug",
|
||||
"message": "Fix issue with 'this_week' and 'next_week' operators in date filters",
|
||||
"domain": "database",
|
||||
"issue_number": 3526,
|
||||
"bullet_points": [],
|
||||
"created_at": "2025-03-25"
|
||||
}
|
Loading…
Add table
Reference in a new issue