|
7 | 7 | (ns navi.core-test
|
8 | 8 | (:require [clojure.test :refer [deftest testing is]]
|
9 | 9 | [navi.core :as core])
|
10 |
| - (:import [java.util Map LinkedHashMap] |
11 |
| - [io.swagger.v3.oas.models Operation PathItem] |
| 10 | + (:import [io.swagger.v3.oas.models Operation PathItem] |
12 | 11 | [io.swagger.v3.oas.models.media Content StringSchema IntegerSchema JsonSchema
|
13 | 12 | NumberSchema ObjectSchema ArraySchema MediaType UUIDSchema Schema]
|
14 | 13 | [io.swagger.v3.oas.models.parameters Parameter PathParameter HeaderParameter QueryParameter RequestBody]
|
15 |
| - [io.swagger.v3.oas.models.responses ApiResponses ApiResponse])) |
| 14 | + [io.swagger.v3.oas.models.responses ApiResponses ApiResponse] |
| 15 | + [java.util Map LinkedHashMap])) |
16 | 16 |
|
17 | 17 | (deftest map-to-malli-spec
|
18 | 18 | (testing "surrounding values of a clojure map to a malli map spec"
|
|
80 | 80 | (let [props (doto (LinkedHashMap.)
|
81 | 81 | (.put "x" (IntegerSchema.))
|
82 | 82 | (.put "y" (StringSchema.)))
|
83 |
| - obj (doto (ObjectSchema.) |
84 |
| - (.setRequired ["y" "x"]) |
85 |
| - (.setProperties props)) |
| 83 | + obj (doto (ObjectSchema.) |
| 84 | + (.setRequired ["y" "x"]) |
| 85 | + (.setProperties props)) |
86 | 86 | props-json (doto (LinkedHashMap.)
|
87 | 87 | (.put "x" (doto (Schema.)
|
88 | 88 | (.addType "integer")))
|
89 | 89 | (.put "y" (doto (Schema.)
|
90 | 90 | (.addType "string"))))
|
91 |
| - obj-json (doto (Schema.) |
92 |
| - (.addType "object") |
93 |
| - (.setRequired ["y" "x"]) |
94 |
| - (.setProperties props-json))] |
| 91 | + obj-json (doto (Schema.) |
| 92 | + (.addType "object") |
| 93 | + (.setRequired ["y" "x"]) |
| 94 | + (.setProperties props-json))] |
95 | 95 | (is (= [:map {:closed false} [:x int?] [:y string?]]
|
96 | 96 | (core/schema->spec obj)))
|
97 | 97 | (is (= [:map {:closed false} [:x int?] [:y string?]]
|
|
134 | 134 | (core/response->data response)))))
|
135 | 135 | (testing "default media type"
|
136 | 136 | (let [media (doto (MediaType.)
|
137 |
| - (.setSchema (StringSchema.))) |
| 137 | + (.setSchema (StringSchema.))) |
138 | 138 | content (doto (Content.)
|
139 | 139 | (.put "default" media))
|
140 | 140 | response (doto (ApiResponse.)
|
141 |
| - (.setContent content)) ] |
| 141 | + (.setContent content))] |
142 | 142 | (is (= {:content {:default {:schema string?}}}
|
143 | 143 | (core/response->data response)))))
|
144 | 144 | (testing "json object response"
|
145 | 145 | (let [media (doto (MediaType.)
|
146 |
| - (.setSchema (ObjectSchema.))) |
| 146 | + (.setSchema (ObjectSchema.))) |
147 | 147 | content (doto (Content.)
|
148 | 148 | (.put "application/json" media))
|
149 | 149 | response (doto (ApiResponse.)
|
150 |
| - (.setContent content)) ] |
| 150 | + (.setContent content))] |
151 | 151 | (is (= {:content {"application/json" {:schema [:map {:closed false}]}}}
|
152 |
| - (core/response->data response))))) |
153 |
| - ) |
| 152 | + (core/response->data response)))))) |
154 | 153 |
|
155 | 154 | (deftest parameters-to-malli-spec
|
156 | 155 | (testing "path"
|
|
174 | 173 | (is (= {:header [[:x int?]]}
|
175 | 174 | (core/param->data param)))))
|
176 | 175 | (testing "required request body"
|
177 |
| - (let [media (doto (MediaType.) |
178 |
| - (.setSchema (ObjectSchema.))) |
| 176 | + (let [media (doto (MediaType.) |
| 177 | + (.setSchema (ObjectSchema.))) |
179 | 178 | content (doto (Content.)
|
180 | 179 | (.put "application/json" media))
|
181 |
| - param (doto (RequestBody.) |
182 |
| - (.setRequired true) |
183 |
| - (.setContent content))] |
| 180 | + param (doto (RequestBody.) |
| 181 | + (.setRequired true) |
| 182 | + (.setContent content))] |
184 | 183 | (is (= {:body [:map {:closed false}]}
|
185 | 184 | (core/param->data param)))))
|
186 | 185 | (testing "optional request body"
|
187 |
| - (let [media (doto (MediaType.) |
188 |
| - (.setSchema (ObjectSchema.))) |
| 186 | + (let [media (doto (MediaType.) |
| 187 | + (.setSchema (ObjectSchema.))) |
189 | 188 | content (doto (Content.)
|
190 | 189 | (.put "application/json" media))
|
191 |
| - param (doto (RequestBody.) |
192 |
| - (.setRequired false) |
193 |
| - (.setContent content))] |
| 190 | + param (doto (RequestBody.) |
| 191 | + (.setRequired false) |
| 192 | + (.setContent content))] |
194 | 193 | (is (= {:body [:or nil? [:map {:closed false}]]}
|
195 | 194 | (core/param->data param)))))
|
196 | 195 | (testing "implicitly optional request body"
|
197 |
| - (let [media (doto (MediaType.) |
198 |
| - (.setSchema (ObjectSchema.))) |
| 196 | + (let [media (doto (MediaType.) |
| 197 | + (.setSchema (ObjectSchema.))) |
199 | 198 | content (doto (Content.)
|
200 | 199 | (.put "application/json" media))
|
201 |
| - param (doto (RequestBody.) |
202 |
| - (.setContent content))] |
| 200 | + param (doto (RequestBody.) |
| 201 | + (.setContent content))] |
203 | 202 | (is (= {:body [:or nil? [:map {:closed false}]]}
|
204 | 203 | (core/param->data param))))))
|
205 | 204 |
|
206 | 205 | (deftest openapi-operation-to-malli-spec
|
207 | 206 | (testing "OpenAPI operation to reitit ring handler"
|
208 |
| - (let [param (doto (PathParameter.) |
209 |
| - (.setName "x") |
210 |
| - (.setSchema (IntegerSchema.))) |
211 |
| - hparam (doto (HeaderParameter.) |
212 |
| - (.setName "y") |
213 |
| - (.setSchema (StringSchema.))) |
214 |
| - response (doto (ApiResponse.) |
215 |
| - (.setContent (doto (Content.) |
216 |
| - (.put "application/json" |
217 |
| - (doto (MediaType.) |
218 |
| - (.setSchema (ObjectSchema.))))))) |
| 207 | + (let [param (doto (PathParameter.) |
| 208 | + (.setName "x") |
| 209 | + (.setSchema (IntegerSchema.))) |
| 210 | + hparam (doto (HeaderParameter.) |
| 211 | + (.setName "y") |
| 212 | + (.setSchema (StringSchema.))) |
| 213 | + response (doto (ApiResponse.) |
| 214 | + (.setContent (doto (Content.) |
| 215 | + (.put "application/json" |
| 216 | + (doto (MediaType.) |
| 217 | + (.setSchema (ObjectSchema.))))))) |
219 | 218 | responses (doto (ApiResponses.)
|
220 | 219 | (.put "200" response))
|
221 | 220 | operation (doto (Operation.)
|
222 | 221 | (.setParameters [param hparam])
|
223 | 222 | (.setResponses responses)
|
224 | 223 | (.setOperationId "TestOp"))
|
225 |
| - handlers {"TestOp" "a handler"}] |
226 |
| - (is (= {:handler "a handler" |
| 224 | + handlers {"TestOp" "a handler"}] |
| 225 | + (is (= {:handler "a handler" |
227 | 226 | :parameters {:path [:map [:x int?]]
|
228 | 227 | :header [:map [:y {:optional true} string?]]}
|
229 | 228 | :responses {200 {:content {"application/json" {:schema [:map {:closed false}]}}}}}
|
230 | 229 | (core/operation->data operation handlers))))))
|
231 | 230 |
|
232 | 231 | (deftest openapi-path-to-malli-spec
|
233 | 232 | (testing "OpenAPI path to reitit route"
|
234 |
| - (let [param (doto (PathParameter.) |
235 |
| - (.setName "x") |
236 |
| - (.setSchema (IntegerSchema.))) |
| 233 | + (let [param (doto (PathParameter.) |
| 234 | + (.setName "x") |
| 235 | + (.setSchema (IntegerSchema.))) |
237 | 236 | operation (doto (Operation.)
|
238 | 237 | (.setParameters [param])
|
239 | 238 | (.setOperationId "TestOp"))
|
240 |
| - handlers {"TestOp" "a handler"} |
| 239 | + handlers {"TestOp" "a handler"} |
241 | 240 | path-item (doto (PathItem.)
|
242 | 241 | (.setGet operation))]
|
243 |
| - (is (= {:get {:handler "a handler" |
| 242 | + (is (= {:get {:handler "a handler" |
244 | 243 | :parameters {:path [:map [:x int?]]}}}
|
245 | 244 | (core/path-item->data path-item handlers))))))
|
0 commit comments