test: validate generated openapi specs in all tests

This commit is contained in:
Joel Kaasinen 2023-03-07 09:10:37 +02:00
parent 8e099febdd
commit 16145dbdce

View file

@ -356,16 +356,19 @@
(let [app (ring/ring-handler (let [app (ring/ring-handler
(ring/router (ring/router
[["/parameters" [["/parameters"
{:post {:coercion @coercion {:post {:decription "parameters"
:coercion @coercion
:parameters {:query (->schema :q) :parameters {:query (->schema :q)
:body (->schema :b) :body (->schema :b)
:header (->schema :h) :header (->schema :h)
:cookie (->schema :c) :cookie (->schema :c)
:path (->schema :p)} :path (->schema :p)}
:responses {200 {:body (->schema :ok)}} :responses {200 {:description "success"
:body (->schema :ok)}}
:handler identity}}] :handler identity}}]
["/openapi.json" ["/openapi.json"
{:get {:handler (openapi/create-openapi-handler) {:get {:handler (openapi/create-openapi-handler)
:openapi {:info {:title "" :version "0.0.1"}}
:no-doc true}}]])) :no-doc true}}]]))
spec (-> {:request-method :get spec (-> {:request-method :get
:uri "/openapi.json"} :uri "/openapi.json"}
@ -406,7 +409,9 @@
:required ["ok"]}} :required ["ok"]}}
(-> spec (-> spec
(get-in [:paths "/parameters" :post :responses 200 :content "application/json"]) (get-in [:paths "/parameters" :post :responses 200 :content "application/json"])
normalize)))))))) normalize))))
(testing "spec is valid"
(is (nil? (validate spec))))))))
(deftest per-content-type-test (deftest per-content-type-test
(doseq [[coercion ->schema] (doseq [[coercion ->schema]
@ -417,16 +422,19 @@
(let [app (ring/ring-handler (let [app (ring/ring-handler
(ring/router (ring/router
[["/parameters" [["/parameters"
{:post {:coercion @coercion {:post {:description "parameters"
:coercion @coercion
:parameters {:request {:content {"application/json" (->schema :b) :parameters {:request {:content {"application/json" (->schema :b)
"application/edn" (->schema :c)}}} "application/edn" (->schema :c)}}}
:responses {200 {:content {"application/json" (->schema :ok) :responses {200 {:description "success"
:content {"application/json" (->schema :ok)
"application/edn" (->schema :edn)}}} "application/edn" (->schema :edn)}}}
:handler (fn [req] :handler (fn [req]
{:status 200 {:status 200
:body (-> req :parameters :request)})}}] :body (-> req :parameters :request)})}}]
["/openapi.json" ["/openapi.json"
{:get {:handler (openapi/create-openapi-handler) {:get {:handler (openapi/create-openapi-handler)
:openapi {:info {:title "" :version "0.0.1"}}
:no-doc true}}]] :no-doc true}}]]
{:data {:middleware [rrc/coerce-request-middleware {:data {:middleware [rrc/coerce-request-middleware
rrc/coerce-response-middleware]}})) rrc/coerce-response-middleware]}}))
@ -483,7 +491,9 @@
(try (try
(app (assoc query :body-params {:z 1})) (app (assoc query :body-params {:z 1}))
(catch clojure.lang.ExceptionInfo e (catch clojure.lang.ExceptionInfo e
(select-keys (ex-data e) [:type :in])))))))))))) (select-keys (ex-data e) [:type :in]))))))))
(testing "spec is valid"
(is (nil? (validate spec))))))))
(deftest default-content-type-test (deftest default-content-type-test
(doseq [[coercion ->schema] (doseq [[coercion ->schema]
@ -496,17 +506,20 @@
(let [app (ring/ring-handler (let [app (ring/ring-handler
(ring/router (ring/router
[["/parameters" [["/parameters"
{:post {:coercion @coercion {:post {:description "parameters"
:coercion @coercion
:content-types [content-type] ;; TODO should this be under :openapi ? :content-types [content-type] ;; TODO should this be under :openapi ?
:parameters {:request {:content {"application/transit" (->schema :transit)} :parameters {:request {:content {"application/transit" (->schema :transit)}
:body (->schema :default)}} :body (->schema :default)}}
:responses {200 {:content {"application/transit" (->schema :transit)} :responses {200 {:description "success"
:content {"application/transit" (->schema :transit)}
:body (->schema :default)}} :body (->schema :default)}}
:handler (fn [req] :handler (fn [req]
{:status 200 {:status 200
:body (-> req :parameters :request)})}}] :body (-> req :parameters :request)})}}]
["/openapi.json" ["/openapi.json"
{:get {:handler (openapi/create-openapi-handler) {:get {:handler (openapi/create-openapi-handler)
:openapi {:info {:title "" :version "0.0.1"}}
:no-doc true}}]] :no-doc true}}]]
{:data {:middleware [rrc/coerce-request-middleware {:data {:middleware [rrc/coerce-request-middleware
rrc/coerce-response-middleware]}})) rrc/coerce-response-middleware]}}))
@ -523,4 +536,6 @@
(is (match? (matchers/in-any-order [content-type "application/transit"]) (is (match? (matchers/in-any-order [content-type "application/transit"])
(-> spec (-> spec
(get-in [:paths "/parameters" :post :responses 200 :content]) (get-in [:paths "/parameters" :post :responses 200 :content])
keys)))))))))) keys))))
(testing "spec is valid"
(is (nil? (validate spec))))))))))