| 30 | |
| 31 | |
| 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 |