11from datetime import date , datetime
22
33import pytest
4+ from freezegun import freeze_time
45
5- from sqlmesh .utils .date import UTC , make_inclusive , to_datetime , to_timestamp
6+ from sqlmesh .utils .date import (
7+ UTC ,
8+ is_catagorical_relative_expression ,
9+ make_inclusive ,
10+ to_datetime ,
11+ to_timestamp ,
12+ )
613
714
815def test_to_datetime () -> None :
@@ -21,6 +28,31 @@ def test_to_datetime() -> None:
2128 assert to_datetime ("0" ) == datetime (1970 , 1 , 1 , tzinfo = UTC )
2229
2330
31+ @pytest .mark .parametrize (
32+ "expression, result" ,
33+ [
34+ ("1 second ago" , datetime (2023 , 1 , 20 , 12 , 29 , 59 , tzinfo = UTC )),
35+ ("1 minute ago" , datetime (2023 , 1 , 20 , 12 , 29 , 00 , tzinfo = UTC )),
36+ ("1 hour ago" , datetime (2023 , 1 , 20 , 11 , 30 , 00 , tzinfo = UTC )),
37+ ("1 day ago" , datetime (2023 , 1 , 19 , 00 , 00 , 00 , tzinfo = UTC )),
38+ ("1 week ago" , datetime (2023 , 1 , 13 , 00 , 00 , 00 , tzinfo = UTC )),
39+ ("1 month ago" , datetime (2022 , 12 , 20 , 00 , 00 , 00 , tzinfo = UTC )),
40+ ("1 year ago" , datetime (2022 , 1 , 20 , 00 , 00 , 00 , tzinfo = UTC )),
41+ ("1 decade ago" , datetime (2013 , 1 , 20 , 00 , 00 , 00 , tzinfo = UTC )),
42+ ("3 days 2 hours ago" , datetime (2023 , 1 , 17 , 10 , 30 , 00 , tzinfo = UTC )),
43+ ("2 years 5 second ago" , datetime (2021 , 1 , 20 , 12 , 29 , 55 , tzinfo = UTC )),
44+ ("24 hours ago" , datetime (2023 , 1 , 19 , 12 , 30 , 00 , tzinfo = UTC )),
45+ ("1 year 5 days ago" , datetime (2022 , 1 , 15 , 00 , 00 , 00 , tzinfo = UTC )),
46+ ("yesterday" , datetime (2023 , 1 , 19 , 00 , 00 , 00 , tzinfo = UTC )),
47+ ("today" , datetime (2023 , 1 , 20 , 00 , 00 , 00 , tzinfo = UTC )),
48+ ("tomorrow" , datetime (2023 , 1 , 21 , 00 , 00 , 00 , tzinfo = UTC )),
49+ ],
50+ )
51+ def test_to_datetime_with_expressions (expression , result ) -> None :
52+ with freeze_time ("2023-01-20 12:30:30" ):
53+ assert to_datetime (expression ) == result
54+
55+
2456def test_to_timestamp () -> None :
2557 assert to_timestamp ("2020-01-01" ) == 1577836800000
2658
@@ -55,3 +87,29 @@ def test_make_inclusive(start_in, end_in, start_out, end_out) -> None:
5587 to_datetime (start_out ),
5688 to_datetime (end_out ),
5789 )
90+
91+
92+ @pytest .mark .parametrize (
93+ "expression, result" ,
94+ [
95+ ("1 second ago" , False ),
96+ ("1 minute ago" , False ),
97+ ("1 hour ago" , False ),
98+ ("1 day ago" , True ),
99+ ("1 week ago" , True ),
100+ ("1 month ago" , True ),
101+ ("1 year ago" , True ),
102+ ("1 decade ago" , True ),
103+ ("3 hours ago" , False ),
104+ ("24 hours ago" , False ),
105+ ("1 day 5 hours ago" , False ),
106+ ("1 year 5 minutes ago" , False ),
107+ ("2023-01-01" , False ),
108+ ("2023-01-01 12:00:00" , False ),
109+ ("yesterday" , True ),
110+ ("today" , True ),
111+ ("tomorrow" , True ),
112+ ],
113+ )
114+ def test_is_catagorical_relative_expression (expression , result ):
115+ assert is_catagorical_relative_expression (expression ) == result
0 commit comments