Skip to content

Commit 111cb56

Browse files
committed
Replace assertContains and assertExcludes
1 parent 3c8179a commit 111cb56

File tree

1 file changed

+61
-115
lines changed

1 file changed

+61
-115
lines changed

test/test_datequery.py

Lines changed: 61 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -29,122 +29,68 @@
2929
from beets.test.helper import ItemInDBTestCase
3030

3131

32-
def _date(string):
33-
return datetime.strptime(string, "%Y-%m-%dT%H:%M:%S")
34-
35-
36-
def _datepattern(datetimedate):
37-
return datetimedate.strftime("%Y-%m-%dT%H:%M:%S")
38-
39-
40-
class DateIntervalTest(unittest.TestCase):
41-
def test_year_precision_intervals(self):
42-
self.assertContains("2000..2001", "2000-01-01T00:00:00")
43-
self.assertContains("2000..2001", "2001-06-20T14:15:16")
44-
self.assertContains("2000..2001", "2001-12-31T23:59:59")
45-
self.assertExcludes("2000..2001", "1999-12-31T23:59:59")
46-
self.assertExcludes("2000..2001", "2002-01-01T00:00:00")
47-
48-
self.assertContains("2000..", "2000-01-01T00:00:00")
49-
self.assertContains("2000..", "2099-10-11T00:00:00")
50-
self.assertExcludes("2000..", "1999-12-31T23:59:59")
51-
52-
self.assertContains("..2001", "2001-12-31T23:59:59")
53-
self.assertExcludes("..2001", "2002-01-01T00:00:00")
54-
55-
self.assertContains("-1d..1d", _datepattern(datetime.now()))
56-
self.assertExcludes("-2d..-1d", _datepattern(datetime.now()))
57-
58-
def test_day_precision_intervals(self):
59-
self.assertContains("2000-06-20..2000-06-20", "2000-06-20T00:00:00")
60-
self.assertContains("2000-06-20..2000-06-20", "2000-06-20T10:20:30")
61-
self.assertContains("2000-06-20..2000-06-20", "2000-06-20T23:59:59")
62-
self.assertExcludes("2000-06-20..2000-06-20", "2000-06-19T23:59:59")
63-
self.assertExcludes("2000-06-20..2000-06-20", "2000-06-21T00:00:00")
64-
65-
def test_month_precision_intervals(self):
66-
self.assertContains("1999-12..2000-02", "1999-12-01T00:00:00")
67-
self.assertContains("1999-12..2000-02", "2000-02-15T05:06:07")
68-
self.assertContains("1999-12..2000-02", "2000-02-29T23:59:59")
69-
self.assertExcludes("1999-12..2000-02", "1999-11-30T23:59:59")
70-
self.assertExcludes("1999-12..2000-02", "2000-03-01T00:00:00")
71-
72-
def test_hour_precision_intervals(self):
73-
# test with 'T' separator
74-
self.assertExcludes(
75-
"2000-01-01T12..2000-01-01T13", "2000-01-01T11:59:59"
76-
)
77-
self.assertContains(
78-
"2000-01-01T12..2000-01-01T13", "2000-01-01T12:00:00"
79-
)
80-
self.assertContains(
81-
"2000-01-01T12..2000-01-01T13", "2000-01-01T12:30:00"
82-
)
83-
self.assertContains(
84-
"2000-01-01T12..2000-01-01T13", "2000-01-01T13:30:00"
85-
)
86-
self.assertContains(
87-
"2000-01-01T12..2000-01-01T13", "2000-01-01T13:59:59"
88-
)
89-
self.assertExcludes(
90-
"2000-01-01T12..2000-01-01T13", "2000-01-01T14:00:00"
91-
)
92-
self.assertExcludes(
93-
"2000-01-01T12..2000-01-01T13", "2000-01-01T14:30:00"
94-
)
95-
96-
# test non-range query
97-
self.assertContains("2008-12-01T22", "2008-12-01T22:30:00")
98-
self.assertExcludes("2008-12-01T22", "2008-12-01T23:30:00")
99-
100-
def test_minute_precision_intervals(self):
101-
self.assertExcludes(
102-
"2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:29:59"
103-
)
104-
self.assertContains(
105-
"2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:30:00"
106-
)
107-
self.assertContains(
108-
"2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:30:30"
109-
)
110-
self.assertContains(
111-
"2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:31:59"
112-
)
113-
self.assertExcludes(
114-
"2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:32:00"
115-
)
116-
117-
def test_second_precision_intervals(self):
118-
self.assertExcludes(
119-
"2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:49"
120-
)
121-
self.assertContains(
122-
"2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:50"
123-
)
124-
self.assertContains(
125-
"2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:55"
126-
)
127-
self.assertExcludes(
128-
"2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:56"
129-
)
130-
131-
def test_unbounded_endpoints(self):
132-
self.assertContains("..", date=datetime.max)
133-
self.assertContains("..", date=datetime.min)
134-
self.assertContains("..", "1000-01-01T00:00:00")
135-
136-
def assertContains(self, interval_pattern, date_pattern=None, date=None):
137-
if date is None:
138-
date = _date(date_pattern)
139-
(start, end) = _parse_periods(interval_pattern)
140-
interval = DateInterval.from_periods(start, end)
141-
assert interval.contains(date)
142-
143-
def assertExcludes(self, interval_pattern, date_pattern):
144-
date = _date(date_pattern)
145-
(start, end) = _parse_periods(interval_pattern)
32+
class TestDateInterval:
33+
now = datetime.now().replace(microsecond=0, second=0).isoformat()
34+
35+
@pytest.mark.parametrize(
36+
"pattern, datestr, include",
37+
[
38+
# year precision
39+
("2000..2001", "2000-01-01T00:00:00", True),
40+
("2000..2001", "2001-06-20T14:15:16", True),
41+
("2000..2001", "2001-12-31T23:59:59", True),
42+
("2000..2001", "1999-12-31T23:59:59", False),
43+
("2000..2001", "2002-01-01T00:00:00", False),
44+
("2000..", "2000-01-01T00:00:00", True),
45+
("2000..", "2099-10-11T00:00:00", True),
46+
("2000..", "1999-12-31T23:59:59", False),
47+
("..2001", "2001-12-31T23:59:59", True),
48+
("..2001", "2002-01-01T00:00:00", False),
49+
("-1d..1d", now, True),
50+
("-2d..-1d", now, False),
51+
# month precision
52+
("2000-06-20..2000-06-20", "2000-06-20T00:00:00", True),
53+
("2000-06-20..2000-06-20", "2000-06-20T10:20:30", True),
54+
("2000-06-20..2000-06-20", "2000-06-20T23:59:59", True),
55+
("2000-06-20..2000-06-20", "2000-06-19T23:59:59", False),
56+
("2000-06-20..2000-06-20", "2000-06-21T00:00:00", False),
57+
# day precision
58+
("1999-12..2000-02", "1999-12-01T00:00:00", True),
59+
("1999-12..2000-02", "2000-02-15T05:06:07", True),
60+
("1999-12..2000-02", "2000-02-29T23:59:59", True),
61+
("1999-12..2000-02", "1999-11-30T23:59:59", False),
62+
("1999-12..2000-02", "2000-03-01T00:00:00", False),
63+
# hour precision with 'T' separator
64+
("2000-01-01T12..2000-01-01T13", "2000-01-01T11:59:59", False),
65+
("2000-01-01T12..2000-01-01T13", "2000-01-01T12:00:00", True),
66+
("2000-01-01T12..2000-01-01T13", "2000-01-01T12:30:00", True),
67+
("2000-01-01T12..2000-01-01T13", "2000-01-01T13:30:00", True),
68+
("2000-01-01T12..2000-01-01T13", "2000-01-01T13:59:59", True),
69+
("2000-01-01T12..2000-01-01T13", "2000-01-01T14:00:00", False),
70+
("2000-01-01T12..2000-01-01T13", "2000-01-01T14:30:00", False),
71+
# hour precision non-range query
72+
("2008-12-01T22", "2008-12-01T22:30:00", True),
73+
("2008-12-01T22", "2008-12-01T23:30:00", False),
74+
# minute precision
75+
("2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:29:59", False),
76+
("2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:30:00", True),
77+
("2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:30:30", True),
78+
("2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:31:59", True),
79+
("2000-01-01T12:30..2000-01-01T12:31", "2000-01-01T12:32:00", False),
80+
# second precision
81+
("2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:49", False),
82+
("2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:50", True),
83+
("2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:55", True),
84+
("2000-01-01T12:30:50..2000-01-01T12:30:55", "2000-01-01T12:30:56", False), # unbounded # noqa: E501
85+
("..", datetime.max.isoformat(), True),
86+
("..", datetime.min.isoformat(), True),
87+
("..", "1000-01-01T00:00:00", True),
88+
],
89+
) # fmt: skip
90+
def test_intervals(self, pattern, datestr, include):
91+
(start, end) = _parse_periods(pattern)
14692
interval = DateInterval.from_periods(start, end)
147-
assert not interval.contains(date)
93+
assert interval.contains(datetime.fromisoformat(datestr)) == include
14894

14995

15096
def _parsetime(s):

0 commit comments

Comments
 (0)