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.specs :as specs]
[next.jdbc.test-fixtures :refer [with-test-db db ds
derby?]])
derby? postgres? sqlite?]])
(:import (java.sql DatabaseMetaData)))
(set! *warn-on-reflection* true)
@ -28,22 +28,67 @@
:class})
(deftest connection-datafy-tests
(testing "basic datafication"
(if (derby?)
(is (= #{:exception :cause} ; at least one property not supported
(set (keys (d/datafy (jdbc/get-connection (ds)))))))
(let [data (set (keys (d/datafy (jdbc/get-connection (ds)))))]
(when-let [diff (seq (set/difference data basic-connection-keys))]
(println (:dbtype (db)) (sort diff)))
(is (= basic-connection-keys
(set/intersection basic-connection-keys data))))))
(testing "connection datafication"
(with-open [con (jdbc/get-connection (ds))]
(if (derby?)
(is (= #{:exception :cause} ; at least one property not supported
(set (keys (d/datafy con)))))
(let [data (set (keys (d/datafy con)))]
(when-let [diff (seq (set/difference data basic-connection-keys))]
(println (:dbtype (db)) :connection (sort diff)))
(is (= basic-connection-keys
(set/intersection basic-connection-keys data)))))))
(testing "nav to metadata yields object"
(when-not (derby?)
(is (instance? DatabaseMetaData
(d/nav (d/datafy (jdbc/get-connection (ds)))
:metaData
nil))))))
(with-open [con (jdbc/get-connection (ds))]
(is (instance? DatabaseMetaData
(d/nav (d/datafy con) :metaData 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)