54 lines
2.3 KiB
Clojure
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)]))))
|