Skip to content

Commit

Permalink
Test fixes [ci drivers]
Browse files Browse the repository at this point in the history
  • Loading branch information
camsaul committed Oct 4, 2019
1 parent eed9cf8 commit 06b5036
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 34 deletions.
2 changes: 1 addition & 1 deletion test/metabase/query_processor_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@
"Return the result `:cols` from query `results`, or throw an Exception if they're missing."
{:style/indent 0}
[results]
(or (some-> (data results) :cols vec)
(or (some->> (data results) :cols (mapv #(into {} %)))
(throw (ex-info "Query does not have any :cols in results." results))))

(defn rows-and-cols
Expand Down
70 changes: 37 additions & 33 deletions test/metabase/query_processor_test/order_by_test.clj
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
(ns metabase.query-processor-test.order-by-test
"Tests for the `:order-by` clause."
(:require [clojure.math.numeric-tower :as math]
(:require [clojure.test :refer :all]
[metabase
[driver :as driver]
[query-processor-test :as qp.test]]
[query-processor-test :as qp.test :refer :all]]
[metabase.test.data :as data]
[metabase.test.data.datasets :as datasets]))

Expand Down Expand Up @@ -77,35 +77,39 @@
:breakout [$price]
:order-by [[:asc [:aggregation 0]]]}))))

(deftest order-by-average-aggregation-test
(datasets/test-drivers qp.test/non-timeseries-drivers
(let [{:keys [rows cols]} (qp.test/rows-and-cols
(qp.test/format-rows-by [int 1.0]
(data/run-mbql-query venues
{:aggregation [[:avg $category_id]]
:breakout [$price]
:order-by [[:asc [:aggregation 0]]]})))]
;; it appears to be the cast that H2 always floors the average it returns
(is (= [[3 22.0]
[2 (if (= driver/*driver* :h2) 28.0 28.3)]
[1 (if (= driver/*driver* :h2) 32.0 32.8)]
[4 (if (= driver/*driver* :h2) 53.0 53.5)]]
rows))
(is (= [(qp.test/breakout-col :venues :price)
(qp.test/aggregate-col :avg :venues :category_id)]
cols)))))

;;; order-by aggregate ["avg" field-id]
(qp.test/expect-with-non-timeseries-dbs
{:rows [[3 22]
[2 28]
[1 32]
[4 53]]
:cols [(qp.test/breakout-col :venues :price)
(qp.test/aggregate-col :avg :venues :category_id)]}
(qp.test/rows-and-cols
(qp.test/format-rows-by [int int]
(data/run-mbql-query venues
{:aggregation [[:avg $category_id]]
:breakout [$price]
:order-by [[:asc [:aggregation 0]]]}))))

;;; ### order-by aggregate ["stddev" field-id]
;; SQRT calculations are always NOT EXACT (normal behavior) so round everything to the nearest int.
;; Databases might use different versions of SQRT implementations
(datasets/expect-with-drivers (qp.test/non-timeseries-drivers-with-feature :standard-deviation-aggregations)
{:rows [[3 (if (= :mysql driver/*driver*) 25 26)]
[1 24]
[2 21]
[4 (if (= :mysql driver/*driver*) 14 15)]]
:cols [(qp.test/breakout-col :venues :price)
(qp.test/aggregate-col :stddev (qp.test/col :venues :category_id))]}
(qp.test/rows-and-cols
(qp.test/format-rows-by [int (comp int math/round)]
(data/run-mbql-query venues
{:aggregation [[:stddev $category_id]]
:breakout [$price]
:order-by [[:desc [:aggregation 0]]]}))))
(deftest order-by-standard-deviation-aggregation-test
(datasets/test-drivers (qp.test/non-timeseries-drivers-with-feature :standard-deviation-aggregations)
(let [{:keys [rows cols]} (qp.test/rows-and-cols
(qp.test/format-rows-by [int 0.0]
(data/run-mbql-query venues
{:aggregation [[:stddev $category_id]]
:breakout [$price]
:order-by [[:desc [:aggregation 0]]]})))]
;; standard deviation calculations are always NOT EXACT (normal behavior) so round results to nearest whole
;; number.
(is (= [[3 (if (= driver/*driver* :mysql) 25.0 26.0)]
[1 24.0]
[2 21.0]
[4 (if (= driver/*driver* :mysql) 14.0 15.0)]]
rows))
(is (= [(qp.test/breakout-col :venues :price)
(qp.test/aggregate-col :stddev (qp.test/col :venues :category_id))]
cols)))))

0 comments on commit 06b5036

Please sign in to comment.