Skip to content
Snippets Groups Projects
Unverified Commit 3d264fe2 authored by Cal Herries's avatar Cal Herries Committed by GitHub
Browse files

Use fields instead of literals for datetime-diff tests (#26917)

* Replace literals for datetime-diff-time-zones-test

* Actually use fields

* Fix typo

* Rename dataset

* Add type/DateTimeWithTZ column, since redshift doesn't like type/DateTimeWithZoneOffset
parent af174655
No related branches found
No related tags found
No related merge requests found
...@@ -708,15 +708,58 @@ ...@@ -708,15 +708,58 @@
(mt/formatted-rows [int int int]) (mt/formatted-rows [int int int])
first))))))) first)))))))
(mt/defdataset diff-time-zone-cases
[["times"
[{:field-name "a_dt", :base-type :type/DateTime}
{:field-name "a_dt_ltz", :base-type :type/DateTimeWithLocalTZ}
{:field-name "a_dt_tz", :base-type :type/DateTimeWithTZ}
{:field-name "a_dt_tz_offset", :base-type :type/DateTimeWithZoneOffset}
{:field-name "a_dt_tz_id", :base-type :type/DateTimeWithZoneID}
{:field-name "a_dt_tz_text", :base-type :type/Text}
{:field-name "a_dt_tz_id_text", :base-type :type/Text}
{:field-name "b_dt", :base-type :type/DateTime}
{:field-name "b_dt_ltz", :base-type :type/DateTimeWithLocalTZ}
{:field-name "b_dt_tz", :base-type :type/DateTimeWithTZ}
{:field-name "b_dt_tz_offset", :base-type :type/DateTimeWithZoneOffset}
{:field-name "b_dt_tz_id", :base-type :type/DateTimeWithZoneID}
{:field-name "b_dt_tz_text", :base-type :type/Text}
{:field-name "b_dt_tz_id_text", :base-type :type/Text}]
(let [times ["2022-10-02T01:00:00+01:00[Africa/Lagos]"
"2022-10-02T00:00:00Z[UTC]"
"2022-10-02T01:00:00+01:00[Africa/Lagos]"
"2022-10-03T00:00:00Z[UTC]"
"2022-10-03T00:00:00+01:00[Africa/Lagos]"
"2022-10-09T00:00:00Z[UTC]"
"2022-10-09T00:00:00+01:00[Africa/Lagos]"
"2022-11-02T00:00:00Z[UTC]"
"2022-11-02T00:00:00+01:00[Africa/Lagos]"
"2023-10-02T00:00:00Z[UTC]"
"2023-10-02T00:00:00+01:00[Africa/Lagos]"]]
(for [a times b times]
[(t/local-date-time (u.date/parse a)) ; a_dt
(t/offset-date-time (u.date/parse a)) ; a_dt_ltz
(u.date/parse a) ; a_dt_tz
(t/offset-date-time (u.date/parse a)) ; a_dt_tz_offset
(u.date/parse a) ; a_dt_tz_id
(t/format :iso-offset-date-time (u.date/parse a)) ; a_dt_tz_text
a ; a_dt_tz_id_text
(t/local-date-time (u.date/parse b)) ; b_dt
(t/offset-date-time (u.date/parse b)) ; b_dt_ltz
(u.date/parse b) ; b_dt_tz
(t/offset-date-time (u.date/parse b)) ; b_dt_tz_offset
(u.date/parse b) ; b_dt_tz_id
(t/format :iso-offset-date-time (u.date/parse b)) ; b_dt_tz_text
b]))]]) ; b_dt_tz_id_text
(deftest datetime-diff-time-zones-test (deftest datetime-diff-time-zones-test
(mt/test-drivers (mt/normal-drivers-with-feature :datetime-diff) (mt/test-drivers (mt/normal-drivers-with-feature :datetime-diff)
(mt/dataset sample-dataset (mt/dataset diff-time-zone-cases
(let [diffs (fn [x y] (let [diffs (fn [x y]
(let [units [:second :minute :hour :day :week :month :year]] (let [units [:second :minute :hour :day :week :month :year]]
(->> (mt/run-mbql-query orders (->> (mt/run-mbql-query times
{:limit 1 {:filter [:and [:= x $a_dt_tz_text] [:= y $b_dt_tz_text]]
:expressions (into {} (for [unit units] :expressions (into {} (for [unit units]
[(name unit) [:datetime-diff x y unit]])) [(name unit) [:datetime-diff $a_dt_tz $b_dt_tz unit]]))
:fields (into [] (for [unit units] :fields (into [] (for [unit units]
[:expression (name unit)]))}) [:expression (name unit)]))})
(mt/formatted-rows (repeat (count units) int)) (mt/formatted-rows (repeat (count units) int))
...@@ -726,74 +769,74 @@ ...@@ -726,74 +769,74 @@
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] ; UTC-1 all year (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] ; UTC-1 all year
(is (partial= {:second 86400 :minute 1440 :hour 24 :day 1} (is (partial= {:second 86400 :minute 1440 :hour 24 :day 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00 <- datetime in report-timezone offset (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00 <- datetime in report-timezone offset
"2022-10-03T00:00:00+00:00")))) ; 2022-10-02T23:00:00-01:00 "2022-10-03T00:00:00Z")))) ; 2022-10-02T23:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:second 86400 :minute 1440 :hour 24 :day 1} (is (partial= {:second 86400 :minute 1440 :hour 24 :day 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00Z
"2022-10-03T00:00:00+00:00"))))) ; 2022-10-03T00:00:00+00:00 "2022-10-03T00:00:00Z"))))) ; 2022-10-03T00:00:00Z
(testing "hour under a day" (testing "hour under a day"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:second 82800 :minute 1380 :hour 23 :day 1} (is (partial= {:second 82800 :minute 1380 :hour 23 :day 1}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-01T23:00:00-01:00
"2022-10-03T00:00:00+01:00")))) ; 2022-10-02T22:00:00-01:00 "2022-10-03T00:00:00+01:00")))) ; 2022-10-02T22:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:second 82800 :minute 1380 :hour 23 :day 0} (is (partial= {:second 82800 :minute 1380 :hour 23 :day 0}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-02T00:00:00Z
"2022-10-03T00:00:00+01:00"))))) ; 2022-10-02T23:00:00+00:00 "2022-10-03T00:00:00+01:00"))))) ; 2022-10-02T23:00:00Z
(testing "hour under a week" (testing "hour under a week"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:hour 167 :day 7 :week 1} (is (partial= {:hour 167 :day 7 :week 1}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-01T23:00:00-01:00
"2022-10-09T00:00:00+01:00")))) ; 2022-10-08T22:00:00-01:00 "2022-10-09T00:00:00+01:00")))) ; 2022-10-08T22:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:hour 167 :day 6 :week 0} (is (partial= {:hour 167 :day 6 :week 0}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-02T00:00:00Z
"2022-10-09T00:00:00+01:00"))))) ; 2022-10-08T23:00:00+00:00 "2022-10-09T00:00:00+01:00"))))) ; 2022-10-08T23:00:00Z
(testing "week" (testing "week"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:hour 168 :day 7 :week 1} (is (partial= {:hour 168 :day 7 :week 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00
"2022-10-09T00:00:00+00:00")))) ; 2022-10-08T23:00:00-01:00 "2022-10-09T00:00:00Z")))) ; 2022-10-08T23:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:hour 168 :day 7 :week 1} (is (partial= {:hour 168 :day 7 :week 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00Z
"2022-10-09T00:00:00+00:00"))))) ; 2022-10-09T00:00:00+00:00 "2022-10-09T00:00:00Z"))))) ; 2022-10-09T00:00:00Z
(testing "hour under a month" (testing "hour under a month"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:hour 743 :day 31 :week 4 :month 1} (is (partial= {:hour 743 :day 31 :week 4 :month 1}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-01T23:00:00-01:00
"2022-11-02T00:00:00+01:00")))) ; 2022-11-01T22:00:00-01:00 "2022-11-02T00:00:00+01:00")))) ; 2022-11-01T22:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:hour 743 :day 30 :week 4 :month 0} (is (partial= {:hour 743 :day 30 :week 4 :month 0}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-02T00:00:00Z
"2022-11-02T00:00:00+01:00"))))) ; 2022-11-01T23:00:00+00:00 "2022-11-02T00:00:00+01:00"))))) ; 2022-11-01T23:00:00Z
(testing "month" (testing "month"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:hour 744 :day 31 :month 1 :year 0} (is (partial= {:hour 744 :day 31 :month 1 :year 0}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00
"2022-11-02T00:00:00+00:00")))) ; 2022-11-01T23:00:00-01:00 "2022-11-02T00:00:00Z")))) ; 2022-11-01T23:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:hour 744 :day 31 :month 1 :year 0} (is (partial= {:hour 744 :day 31 :month 1 :year 0}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00Z
"2022-11-02T00:00:00+00:00"))))) ; 2022-11-02T00:00:00+00:00 "2022-11-02T00:00:00Z"))))) ; 2022-11-02T00:00:00Z
(testing "year" (testing "year"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:day 365, :week 52, :month 12, :year 1} (is (partial= {:day 365, :week 52, :month 12, :year 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-01T23:00:00-01:00
"2023-10-02T00:00:00+00:00")))) ; 2023-10-01T23:00:00-01:00 "2023-10-02T00:00:00Z")))) ; 2023-10-01T23:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:day 365, :week 52, :month 12, :year 1} (is (partial= {:day 365, :week 52, :month 12, :year 1}
(diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T01:00:00+01:00" ; 2022-10-02T00:00:00Z
"2023-10-02T00:00:00+00:00"))))) ; 2023-10-02T00:00:00+00:00 "2023-10-02T00:00:00Z"))))) ; 2023-10-02T00:00:00Z
(testing "hour under a year" (testing "hour under a year"
(mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"] (mt/with-temporary-setting-values [driver/report-timezone "Atlantic/Cape_Verde"]
(is (partial= {:day 365 :month 12 :year 1} (is (partial= {:day 365 :month 12 :year 1}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-01T23:00:00-01:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-01T23:00:00-01:00
"2023-10-02T00:00:00+01:00")))) ; 2023-10-01T22:00:00-01:00 "2023-10-02T00:00:00+01:00")))) ; 2023-10-01T22:00:00-01:00
(mt/with-temporary-setting-values [driver/report-timezone "UTC"] (mt/with-temporary-setting-values [driver/report-timezone "UTC"]
(is (partial= {:day 364 :month 11 :year 0} (is (partial= {:day 364 :month 11 :year 0}
(diffs "2022-10-02T00:00:00+00:00" ; 2022-10-02T00:00:00+00:00 (diffs "2022-10-02T00:00:00Z" ; 2022-10-02T00:00:00Z
"2023-10-02T00:00:00+01:00"))))))))) ; 2023-10-01T23:00:00+00:00 "2023-10-02T00:00:00+01:00"))))))))) ; 2023-10-01T23:00:00Z
(deftest datetime-diff-expressions-test (deftest datetime-diff-expressions-test
(mt/test-drivers (mt/normal-drivers-with-feature :datetime-diff) (mt/test-drivers (mt/normal-drivers-with-feature :datetime-diff)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment