mirror of
https://github.com/metosin/reitit.git
synced 2025-12-18 08:51:12 +00:00
test: openapi3 + malli + mutually recursive schemas
This commit is contained in:
parent
4b33c6d203
commit
1a73ba952e
1 changed files with 56 additions and 0 deletions
|
|
@ -614,3 +614,59 @@
|
||||||
keys))))
|
keys))))
|
||||||
(testing "spec is valid"
|
(testing "spec is valid"
|
||||||
(is (nil? (validate spec))))))))))
|
(is (nil? (validate spec))))))))))
|
||||||
|
|
||||||
|
(deftest recursive-test
|
||||||
|
;; Recursive schemas only properly supported for malli
|
||||||
|
;; See https://github.com/metosin/schema-tools/issues/41
|
||||||
|
(let [app (ring/ring-handler
|
||||||
|
(ring/router
|
||||||
|
[["/parameters"
|
||||||
|
{:post {:description "parameters"
|
||||||
|
:coercion malli/coercion
|
||||||
|
:parameters {:request
|
||||||
|
{:body
|
||||||
|
[:schema
|
||||||
|
{:registry {"friend" [:map
|
||||||
|
[:age int?]
|
||||||
|
[:pet [:ref "pet"]]]
|
||||||
|
"pet" [:map
|
||||||
|
[:name :string]
|
||||||
|
[:friends [:vector [:ref "friend"]]]]}}
|
||||||
|
"friend"]}}
|
||||||
|
:handler (fn [req]
|
||||||
|
{:status 200
|
||||||
|
:body (-> req :parameters :request)})}}]
|
||||||
|
["/openapi.json"
|
||||||
|
{:get {:handler (openapi/create-openapi-handler)
|
||||||
|
:openapi {:info {:title "" :version "0.0.1"}}
|
||||||
|
:no-doc true}}]]
|
||||||
|
{:validate reitit.ring.spec/validate
|
||||||
|
:data {:middleware [openapi/openapi-feature
|
||||||
|
rrc/coerce-request-middleware
|
||||||
|
rrc/coerce-response-middleware]}}))
|
||||||
|
spec (-> {:request-method :get
|
||||||
|
:uri "/openapi.json"}
|
||||||
|
app
|
||||||
|
:body)]
|
||||||
|
(is (= {:info {:title "" :version "0.0.1"}
|
||||||
|
:openapi "3.1.0"
|
||||||
|
:x-id #{:reitit.openapi/default}
|
||||||
|
:paths {"/parameters"
|
||||||
|
{:post
|
||||||
|
{:description "parameters"
|
||||||
|
:requestBody
|
||||||
|
{:content
|
||||||
|
{"application/json"
|
||||||
|
{:schema {:$ref "#/definitions/friend"
|
||||||
|
:definitions {"friend" {:properties {:age {:type "integer"}
|
||||||
|
:pet {:$ref "#/definitions/pet"}}
|
||||||
|
:required [:age :pet]
|
||||||
|
:type "object"}
|
||||||
|
"pet" {:properties {:friends {:items {:$ref "#/definitions/friend"}
|
||||||
|
:type "array"}
|
||||||
|
:name {:type "string"}}
|
||||||
|
:required [:name :friends]
|
||||||
|
:type "object"}}}}}}}}}}
|
||||||
|
spec))
|
||||||
|
(testing "spec is valid"
|
||||||
|
(is (nil? (validate spec))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue