views.honeysql/test/views/honeysql/vexec_tests.clj
Gered eb00afa136 update vexec to take a map of options (used to specify namespace)
this change is mainly to keep consistent with views.sql's vexec args
2016-06-01 17:04:30 -04:00

54 lines
2.3 KiB
Clojure

(ns views.honeysql.vexec-tests
(:use
clojure.test
views.honeysql.test-fixtures
views.honeysql.core)
(:require
[clojure.java.jdbc :as jdbc]
[views.core :as views]
[honeysql.core :as hsql]))
(defn vexec-redefs-fixture [f]
(reset! redefs-called {})
(with-redefs
[jdbc/insert! (->redef-fn :jdbc/insert! :jdbc/insert!-return-value)
jdbc/execute! (->redef-fn :jdbc/execute! :jdbc/execute!-return-value)
views/put-hints! (->redef-fn :views/put-hints!)]
(f)))
(use-fixtures :each reset-test-view-system-fixture vexec-redefs-fixture)
(deftest vexec-runs-query-and-puts-hints
(let [sql {:insert-into :example
:values [{:field1 "test" :field2 "N" :field3 nil}]}
result (vexec! test-view-system test-db sql)]
(is (called-with-args? :jdbc/insert! test-db (:insert-into sql) (first (:values sql))))
(is (= :jdbc/insert!-return-value result))
(is (called-with-args? :views/put-hints! test-view-system [(views/hint nil #{:example} hint-type)]))))
(deftest namespace-is-passed-along-to-hints-via-vexec
(let [sql {:insert-into :example
:values [{:field1 "test" :field2 "N" :field3 nil}]}
result (vexec! test-view-system test-db sql {:namespace :foobar})]
(is (called-with-args? :jdbc/insert! test-db (:insert-into sql) (first (:values sql))))
(is (= :jdbc/insert!-return-value result))
(is (called-with-args? :views/put-hints! test-view-system [(views/hint :foobar #{:example} hint-type)]))))
(deftest vexec-runs-update-queries
(let [sql {:update :example
:set {:field1 "foo" :field2 "bar" :field3 "baz"}
:where [:= :id 42]}
result (vexec! test-view-system test-db sql)]
(is (called-with-args? :jdbc/execute! test-db (hsql/format sql)))
(is (= :jdbc/execute!-return-value result))
(is (called-with-args? :views/put-hints! test-view-system [(views/hint nil #{:example} hint-type)]))))
(deftest vexec-runs-delete-queries
(let [sql {:delete-from :example
:where [:= :id 42]}
result (vexec! test-view-system test-db sql)]
(is (called-with-args? :jdbc/execute! test-db (hsql/format sql)))
(is (= :jdbc/execute!-return-value result))
(is (called-with-args? :views/put-hints! test-view-system [(views/hint nil #{:example} hint-type)]))))