Skip to content

Commit d1561d5

Browse files
authored
Fix store_date and foc_date range filters not applying in issue list view (#547)
The IssueViewFilter declared date range filters as `store_date_range` and `foc_date_range`, but DateFromToRangeFilter generates GET params named `{field_name}_after` / `{field_name}_before`. The template was sending `store_date_after` / `store_date_before`, so the params never matched and the filter was silently ignored. Renamed the fields to `store_date` and `foc_date` to align with the template, and added regression tests covering after/before/same-date scenarios for both fields.
1 parent 1779b53 commit d1561d5

2 files changed

Lines changed: 223 additions & 3 deletions

File tree

comicsdb/filters/issue.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ class IssueViewFilter(df.FilterSet):
132132
series_type = df.NumberFilter(
133133
label="Series Type", field_name="series__series_type__id", lookup_expr="exact"
134134
)
135-
store_date_range = df.DateFromToRangeFilter("store_date")
136-
foc_date_range = df.DateFromToRangeFilter("foc_date")
135+
store_date = df.DateFromToRangeFilter("store_date")
136+
foc_date = df.DateFromToRangeFilter("foc_date")
137137
series_year_began = df.NumberFilter(
138138
label="Series Beginning Year", field_name="series__year_began", lookup_expr="exact"
139139
)
@@ -148,4 +148,4 @@ class IssueViewFilter(df.FilterSet):
148148

149149
class Meta:
150150
model = Issue
151-
fields = ["q", "store_date", "foc_date"]
151+
fields = ["q"]

tests/comicsdb/test_issue_views.py

Lines changed: 220 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1855,3 +1855,223 @@ def test_issue_list_has_active_filters_indicator(
18551855
resp = client.get(reverse("issue:list") + "?page=1")
18561856
assert resp.status_code == HTML_OK_CODE
18571857
assert resp.context["has_active_filters"] is False
1858+
1859+
1860+
def test_issue_filter_by_store_date_after(
1861+
auto_login_user, create_user, dc_comics, single_issue_type
1862+
):
1863+
"""Test store_date_after filter returns issues on or after the given date."""
1864+
client, user = auto_login_user()
1865+
1866+
series = Series.objects.create(
1867+
name="Batman",
1868+
publisher=dc_comics,
1869+
series_type=single_issue_type,
1870+
year_began=2026,
1871+
status=Series.Status.ONGOING,
1872+
volume=1,
1873+
created_by=user,
1874+
edited_by=user,
1875+
)
1876+
1877+
early_issue = Issue.objects.create(
1878+
series=series,
1879+
number="1",
1880+
cover_date=date(2026, 6, 1),
1881+
store_date=date(2026, 6, 1),
1882+
created_by=user,
1883+
edited_by=user,
1884+
)
1885+
later_issue = Issue.objects.create(
1886+
series=series,
1887+
number="2",
1888+
cover_date=date(2026, 7, 1),
1889+
store_date=date(2026, 7, 1),
1890+
created_by=user,
1891+
edited_by=user,
1892+
)
1893+
1894+
resp = client.get(reverse("issue:list") + "?store_date_after=2026-07-01")
1895+
assert resp.status_code == HTML_OK_CODE
1896+
assert later_issue in resp.context["issue_list"]
1897+
assert early_issue not in resp.context["issue_list"]
1898+
assert resp.context["issue_list"].count() == 1
1899+
1900+
1901+
def test_issue_filter_by_store_date_before(
1902+
auto_login_user, create_user, dc_comics, single_issue_type
1903+
):
1904+
"""Test store_date_before filter returns issues on or before the given date."""
1905+
client, user = auto_login_user()
1906+
1907+
series = Series.objects.create(
1908+
name="Batman",
1909+
publisher=dc_comics,
1910+
series_type=single_issue_type,
1911+
year_began=2026,
1912+
status=Series.Status.ONGOING,
1913+
volume=1,
1914+
created_by=user,
1915+
edited_by=user,
1916+
)
1917+
1918+
early_issue = Issue.objects.create(
1919+
series=series,
1920+
number="1",
1921+
cover_date=date(2026, 6, 1),
1922+
store_date=date(2026, 6, 1),
1923+
created_by=user,
1924+
edited_by=user,
1925+
)
1926+
Issue.objects.create(
1927+
series=series,
1928+
number="2",
1929+
cover_date=date(2026, 8, 1),
1930+
store_date=date(2026, 8, 1),
1931+
created_by=user,
1932+
edited_by=user,
1933+
)
1934+
1935+
resp = client.get(reverse("issue:list") + "?store_date_before=2026-07-01")
1936+
assert resp.status_code == HTML_OK_CODE
1937+
assert early_issue in resp.context["issue_list"]
1938+
assert resp.context["issue_list"].count() == 1
1939+
1940+
1941+
def test_issue_filter_by_store_date_range_same_date(
1942+
auto_login_user, create_user, dc_comics, single_issue_type
1943+
):
1944+
"""Test store_date_after and store_date_before with the same date returns only exact matches."""
1945+
client, user = auto_login_user()
1946+
1947+
series = Series.objects.create(
1948+
name="Batman",
1949+
publisher=dc_comics,
1950+
series_type=single_issue_type,
1951+
year_began=2026,
1952+
status=Series.Status.ONGOING,
1953+
volume=1,
1954+
created_by=user,
1955+
edited_by=user,
1956+
)
1957+
1958+
target_issue = Issue.objects.create(
1959+
series=series,
1960+
number="1",
1961+
cover_date=date(2026, 7, 1),
1962+
store_date=date(2026, 7, 1),
1963+
created_by=user,
1964+
edited_by=user,
1965+
)
1966+
Issue.objects.create(
1967+
series=series,
1968+
number="2",
1969+
cover_date=date(2026, 6, 1),
1970+
store_date=date(2026, 6, 1),
1971+
created_by=user,
1972+
edited_by=user,
1973+
)
1974+
Issue.objects.create(
1975+
series=series,
1976+
number="3",
1977+
cover_date=date(2026, 8, 1),
1978+
store_date=date(2026, 8, 1),
1979+
created_by=user,
1980+
edited_by=user,
1981+
)
1982+
1983+
resp = client.get(
1984+
reverse("issue:list") + "?store_date_after=2026-07-01&store_date_before=2026-07-01"
1985+
)
1986+
assert resp.status_code == HTML_OK_CODE
1987+
assert target_issue in resp.context["issue_list"]
1988+
assert resp.context["issue_list"].count() == 1
1989+
1990+
1991+
def test_issue_filter_by_foc_date_after(auto_login_user, create_user, dc_comics, single_issue_type):
1992+
"""Test foc_date_after filter returns issues with FOC date on or after the given date."""
1993+
client, user = auto_login_user()
1994+
1995+
series = Series.objects.create(
1996+
name="Batman",
1997+
publisher=dc_comics,
1998+
series_type=single_issue_type,
1999+
year_began=2026,
2000+
status=Series.Status.ONGOING,
2001+
volume=1,
2002+
created_by=user,
2003+
edited_by=user,
2004+
)
2005+
2006+
early_issue = Issue.objects.create(
2007+
series=series,
2008+
number="1",
2009+
cover_date=date(2026, 6, 1),
2010+
foc_date=date(2026, 5, 1),
2011+
created_by=user,
2012+
edited_by=user,
2013+
)
2014+
later_issue = Issue.objects.create(
2015+
series=series,
2016+
number="2",
2017+
cover_date=date(2026, 8, 1),
2018+
foc_date=date(2026, 7, 1),
2019+
created_by=user,
2020+
edited_by=user,
2021+
)
2022+
2023+
resp = client.get(reverse("issue:list") + "?foc_date_after=2026-07-01")
2024+
assert resp.status_code == HTML_OK_CODE
2025+
assert later_issue in resp.context["issue_list"]
2026+
assert early_issue not in resp.context["issue_list"]
2027+
assert resp.context["issue_list"].count() == 1
2028+
2029+
2030+
def test_issue_filter_by_foc_date_range_same_date(
2031+
auto_login_user, create_user, dc_comics, single_issue_type
2032+
):
2033+
"""Test foc_date_after and foc_date_before with the same date returns only exact matches."""
2034+
client, user = auto_login_user()
2035+
2036+
series = Series.objects.create(
2037+
name="Batman",
2038+
publisher=dc_comics,
2039+
series_type=single_issue_type,
2040+
year_began=2026,
2041+
status=Series.Status.ONGOING,
2042+
volume=1,
2043+
created_by=user,
2044+
edited_by=user,
2045+
)
2046+
2047+
target_issue = Issue.objects.create(
2048+
series=series,
2049+
number="1",
2050+
cover_date=date(2026, 7, 1),
2051+
foc_date=date(2026, 7, 1),
2052+
created_by=user,
2053+
edited_by=user,
2054+
)
2055+
Issue.objects.create(
2056+
series=series,
2057+
number="2",
2058+
cover_date=date(2026, 6, 1),
2059+
foc_date=date(2026, 6, 1),
2060+
created_by=user,
2061+
edited_by=user,
2062+
)
2063+
Issue.objects.create(
2064+
series=series,
2065+
number="3",
2066+
cover_date=date(2026, 8, 1),
2067+
foc_date=date(2026, 8, 1),
2068+
created_by=user,
2069+
edited_by=user,
2070+
)
2071+
2072+
resp = client.get(
2073+
reverse("issue:list") + "?foc_date_after=2026-07-01&foc_date_before=2026-07-01"
2074+
)
2075+
assert resp.status_code == HTML_OK_CODE
2076+
assert target_issue in resp.context["issue_list"]
2077+
assert resp.context["issue_list"].count() == 1

0 commit comments

Comments
 (0)