@@ -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