DatabaseMetaData datafication tests

This commit is contained in:
Sean Corfield 2020-05-31 00:56:44 -07:00
parent db95d370d8
commit 0952503860

View file

@ -9,7 +9,7 @@
[next.jdbc.datafy] [next.jdbc.datafy]
[next.jdbc.specs :as specs] [next.jdbc.specs :as specs]
[next.jdbc.test-fixtures :refer [with-test-db db ds [next.jdbc.test-fixtures :refer [with-test-db db ds
derby?]]) derby? postgres? sqlite?]])
(:import (java.sql DatabaseMetaData))) (:import (java.sql DatabaseMetaData)))
(set! *warn-on-reflection* true) (set! *warn-on-reflection* true)
@ -28,22 +28,67 @@
:class}) :class})
(deftest connection-datafy-tests (deftest connection-datafy-tests
(testing "basic datafication" (testing "connection datafication"
(if (derby?) (with-open [con (jdbc/get-connection (ds))]
(is (= #{:exception :cause} ; at least one property not supported (if (derby?)
(set (keys (d/datafy (jdbc/get-connection (ds))))))) (is (= #{:exception :cause} ; at least one property not supported
(let [data (set (keys (d/datafy (jdbc/get-connection (ds)))))] (set (keys (d/datafy con)))))
(when-let [diff (seq (set/difference data basic-connection-keys))] (let [data (set (keys (d/datafy con)))]
(println (:dbtype (db)) (sort diff))) (when-let [diff (seq (set/difference data basic-connection-keys))]
(is (= basic-connection-keys (println (:dbtype (db)) :connection (sort diff)))
(set/intersection basic-connection-keys data)))))) (is (= basic-connection-keys
(set/intersection basic-connection-keys data)))))))
(testing "nav to metadata yields object" (testing "nav to metadata yields object"
(when-not (derby?) (when-not (derby?)
(is (instance? DatabaseMetaData (with-open [con (jdbc/get-connection (ds))]
(d/nav (d/datafy (jdbc/get-connection (ds))) (is (instance? DatabaseMetaData
:metaData (d/nav (d/datafy con) :metaData nil)))))))
nil))))))
(deftest database-metadata-datafy-tests) (def ^:private basic-database-metadata-keys
"Generic JDBC Connection fields."
#{:JDBCMajorVersion :JDBCMinorVersion :SQLKeywords :SQLStateType :URL
:catalogSeparator :catalogTerm :catalogs
:clientInfoProperties :connection
:databaseMajorVersion :databaseMinorVersion
:databaseProductName :databaseProductVersion
:defaultTransactionIsolation
:driverMajorVersion :driverMinorVersion :driverName :driverVersion
:extraNameCharacters :identifierQuoteString
:maxBinaryLiteralLength :maxCatalogNameLength :maxCharLiteralLength
:maxColumnNameLength :maxColumnsInGroupBy :maxColumnsInIndex
:maxColumnsInOrderBy :maxColumnsInSelect :maxColumnsInTable
:maxConnections
:maxCursorNameLength :maxIndexLength
:maxProcedureNameLength :maxRowSize :maxSchemaNameLength
:maxStatementLength :maxStatements :maxTableNameLength
:maxTablesInSelect :maxUserNameLength :numericFunctions
:procedureTerm :resultSetHoldability :rowIdLifetime
:schemaTerm :schemas :searchStringEscape :stringFunctions
:systemFunctions :tableTypes :timeDateFunctions
:typeInfo :userName
;; boolean properties
:catalogAtStart :readOnly
;; added by bean itself
:class})
(deftest database-metadata-datafy-tests
(testing "database metadata datafication"
(with-open [con (jdbc/get-connection (ds))]
(if (or (postgres?) (sqlite?))
(is (= #{:exception :cause} ; at least one property not supported
(set (keys (d/datafy (.getMetaData con))))))
(let [data (set (keys (d/datafy (.getMetaData con))))]
(when-let [diff (seq (set/difference data basic-database-metadata-keys))]
(println (:dbtype (db)) :db-meta (sort diff)))
(is (= basic-database-metadata-keys
(set/intersection basic-database-metadata-keys data)))))))
(testing "nav to catalogs yields object"
(when-not (or (postgres?) (sqlite?))
(with-open [con (jdbc/get-connection (ds))]
(let [data (d/datafy (.getMetaData con))]
(doseq [k [:catalogs :clientInfoProperties :schemas :tableTypes :typeInfo]]
(let [rs (d/nav data k nil)]
(is (vector? rs))
(is (every? map? rs)))))))))
(deftest result-set-metadata-datafy-tests) (deftest result-set-metadata-datafy-tests)