1919from dbt .tests .adapter .utils .test_dateadd import BaseDateAdd
2020from dbt .tests .adapter .utils .test_last_day import BaseLastDay
2121from dbt .tests .adapter .utils .test_date_trunc import BaseDateTrunc
22+ from dbt .tests .adapter .utils .test_datediff import BaseDateDiff
2223
2324from dbt .tests .adapter .utils .fixture_dateadd import models__test_dateadd_yml
25+ from dbt .tests .adapter .utils .fixture_datediff import models__test_datediff_yml
2426
2527seeds__data_date_trunc_csv = """updated_at,day,month
26282018-01-05 12:00:00,2017-12-31 00:00:00,2018-01-01 00:00:00
5658"""
5759
5860
61+ seeds__data_datediff_csv = """first_date,second_date,datepart,result
62+ 2018-01-01 01:00:00,2018-01-02 01:00:00,day,1
63+ 2018-01-01 01:00:00,2018-02-01 01:00:00,month,1
64+ 2018-01-01 01:00:00,2019-01-01 01:00:00,year,1
65+ 2018-01-01 01:00:00,2018-01-01 02:00:00,hour,1
66+ 2018-01-01 01:00:00,2018-01-01 02:01:00,minute,61
67+ 2018-01-01 01:00:00,2018-01-01 02:00:01,second,3601
68+ 2019-12-31 00:00:00,2019-12-27 00:00:00,week,-1
69+ 2019-12-31 00:00:00,2019-12-30 00:00:00,week,0
70+ 2019-12-31 00:00:00,2020-01-02 00:00:00,week,0
71+ 2019-12-31 00:00:00,2020-01-06 02:00:00,week,1
72+ ,2018-01-01 02:00:00,hour,
73+ 2018-01-01 02:00:00,,hour,
74+ """
75+
76+
77+ models__test_datediff_sql = """
78+ with data as (
79+
80+ select * from {{ ref('data_datediff') }}
81+
82+ )
83+
84+ select
85+
86+ case
87+ when datepart = 'second' then {{ datediff('first_date', 'second_date', 'second') }}
88+ when datepart = 'minute' then {{ datediff('first_date', 'second_date', 'minute') }}
89+ when datepart = 'hour' then {{ datediff('first_date', 'second_date', 'hour') }}
90+ when datepart = 'day' then {{ datediff('first_date', 'second_date', 'day') }}
91+ when datepart = 'week' then {{ datediff('first_date', 'second_date', 'week') }}
92+ when datepart = 'month' then {{ datediff('first_date', 'second_date', 'month') }}
93+ when datepart = 'year' then {{ datediff('first_date', 'second_date', 'year') }}
94+ else null
95+ end as actual,
96+ result as expected
97+
98+ from data
99+
100+ """
101+
102+
59103class TestDateAdd (BaseDateAdd ):
60104
61105 @pytest .fixture (scope = "class" )
@@ -81,3 +125,19 @@ def seeds(self):
81125
82126class TestLastDay (BaseLastDay ):
83127 pass
128+
129+
130+ class TestDateDiff (BaseDateDiff ):
131+
132+ @pytest .fixture (scope = "class" )
133+ def seeds (self ):
134+ return {"data_datediff.csv" : seeds__data_datediff_csv }
135+
136+ @pytest .fixture (scope = "class" )
137+ def models (self ):
138+ return {
139+ "test_datediff.yml" : models__test_datediff_yml ,
140+ "test_datediff.sql" : self .interpolate_macro_namespace (
141+ models__test_datediff_sql , "datediff"
142+ ),
143+ }
0 commit comments