Skip to content

Commit cb0bbfb

Browse files
authored
Merge pull request #84 from metosin/openapi-description
feat: use schema description as openapi parameter description
2 parents 991dd1b + 39a9daf commit cb0bbfb

File tree

2 files changed

+58
-20
lines changed

2 files changed

+58
-20
lines changed

src/schema_tools/openapi/core.cljc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@
234234
(-transform [{:keys [schema data]} opts]
235235
(or (:openapi data)
236236
(merge
237-
(transform schema (merge opts (select-keys data [:name :description])))
237+
(transform schema (merge opts (select-keys data [:name])))
238+
(select-keys data [:description])
238239
(impl/unlift-keys data "openapi"))))
239240

240241
#?(:clj java.util.regex.Pattern
@@ -353,7 +354,8 @@
353354
(:title new-spec)
354355
(:type new-spec))
355356
:in in
356-
:description ""
357+
:description (or (:description spec)
358+
"")
357359
:required (case in
358360
:path true
359361
(not nilable?))
@@ -366,7 +368,8 @@
366368
{:name (or (schema-name schema nil)
367369
(key-name k))
368370
:in (name in)
369-
:description ""
371+
:description (or (:description schema)
372+
"")
370373
:required (case in
371374
:path true
372375
(contains? (set required) k))

test/cljc/schema_tools/openapi/core_test.cljc

Lines changed: 52 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@
197197
(def Id s/Int)
198198
(def Name s/Str)
199199
(def Street s/Str)
200-
(s/defschema City (s/maybe (s/enum :tre :hki)))
200+
(s/defschema City (st/schema (s/maybe (s/enum :tre :hki))
201+
{:openapi/description "a city"}))
201202
(s/defschema Filters [s/Str])
202203
(s/defschema Address
203204
{:street Street
@@ -230,9 +231,10 @@
230231
:schema {:type "string"}}
231232
{:name "city"
232233
:in "query"
233-
:description ""
234+
:description "a city"
234235
:required false
235-
:schema {:oneOf [{:enum [:tre :hki], :type "string"} ;from set
236+
:schema {:description "a city"
237+
:oneOf [{:enum [:tre :hki], :type "string"} ;from set
236238
{:type "null"}]}}
237239
{:name "street"
238240
:in "query"
@@ -264,7 +266,8 @@
264266
{:type "object"
265267
:properties
266268
{"street" {:type "string"}
267-
"city" {:oneOf [{:enum [:tre :hki] :type "string"}
269+
"city" {:description "a city"
270+
:oneOf [{:enum [:tre :hki] :type "string"}
268271
{:type "null"}]}}
269272
:required ["street" "city"]
270273
:additionalProperties false
@@ -298,10 +301,10 @@
298301
:schema {:type "integer" :format "int32"}}
299302
{:name "city"
300303
:in "query"
301-
:description ""
304+
:description "a city"
302305
:required true
303-
:schema
304-
{:oneOf [{:enum [:tre :hki] :type "string"} {:type "null"}]}}
306+
:schema {:description "a city"
307+
:oneOf [{:enum [:tre :hki] :type "string"} {:type "null"}]}}
305308
{:name "name"
306309
:in "query"
307310
:description ""
@@ -324,10 +327,10 @@
324327
:schema {:type "string"}}
325328
{:name "city"
326329
:in "cookie"
327-
:description ""
330+
:description "a city"
328331
:required true
329-
:schema
330-
{:oneOf [{:enum [:tre :hki] :type "string"} {:type "null"}]}}]}
332+
:schema {:description "a city"
333+
:oneOf [{:enum [:tre :hki] :type "string"} {:type "null"}]}}]}
331334
(openapi/openapi-spec
332335
{:parameters
333336
[{:name "name"
@@ -365,7 +368,8 @@
365368
"address" {:type "object"
366369
:properties
367370
{"street" {:type "string"},
368-
"city" {:oneOf [{:enum [:tre :hki] :type "string"}
371+
"city" {:description "a city"
372+
:oneOf [{:enum [:tre :hki] :type "string"}
369373
{:type "null"}]}}
370374
:required ["street" "city"]
371375
:additionalProperties false
@@ -377,7 +381,8 @@
377381
{:type "object"
378382
:properties
379383
{"street" {:type "string"}
380-
"city" {:oneOf [{:enum [:tre :hki] :type "string"}
384+
"city" {:description "a city"
385+
:oneOf [{:enum [:tre :hki] :type "string"}
381386
{:type "null"}]}}
382387
:required ["street" "city"]
383388
:additionalProperties false
@@ -427,7 +432,8 @@
427432
:properties
428433
{"street" {:type "string"}
429434
"city"
430-
{:oneOf [{:enum [:tre :hki] :type "string"}
435+
{:description "a city"
436+
:oneOf [{:enum [:tre :hki] :type "string"}
431437
{:type "null"}]}}
432438
:required ["street" "city"]
433439
:additionalProperties false
@@ -441,7 +447,8 @@
441447
:properties
442448
{"street" {:type "string"}
443449
"city"
444-
{:oneOf [{:enum [:tre :hki] :type "string"}
450+
{:description "a city"
451+
:oneOf [{:enum [:tre :hki] :type "string"}
445452
{:type "null"}]}}
446453
:required ["street" "city"]
447454
:additionalProperties false
@@ -481,7 +488,8 @@
481488
:properties
482489
{"street" {:type "string"}
483490
"city"
484-
{:oneOf [{:enum [:tre :hki] :type "string"}
491+
{:description "a city"
492+
:oneOf [{:enum [:tre :hki] :type "string"}
485493
{:type "null"}]}}
486494
:required ["street" "city"]
487495
:additionalProperties false
@@ -516,7 +524,7 @@
516524
{:description "The number of allowed requests in the current period",
517525
:schema {:type "integer"}},
518526
:City
519-
{:description "",
527+
{:description "a city",
520528
:required false,
521529
:schema
522530
{:enum [:tre :hki] :type "string"}}
@@ -537,7 +545,8 @@
537545
:properties
538546
{"street" {:type "string"}
539547
"city"
540-
{:oneOf [{:enum [:tre :hki] :type "string"}
548+
{:description "a city"
549+
:oneOf [{:enum [:tre :hki] :type "string"}
541550
{:type "null"}]}}
542551
:required ["street" "city"]
543552
:additionalProperties false
@@ -626,3 +635,29 @@
626635
:openapi/format "password"
627636
:openapi/random-value "42"})
628637
nil))))
638+
639+
(deftest description-test
640+
(is (= [{:name "string"
641+
:in :query
642+
:description "xyz"
643+
:required true
644+
:schema {:type "string" :description "xyz"}}]
645+
(openapi/extract-parameter :query (st/schema s/Str {:openapi/description "xyz"}))))
646+
(is (= [{:name "string"
647+
:in :query
648+
:description "xyz"
649+
:required true
650+
:schema {:type "string" :description "xyz"}}]
651+
(openapi/extract-parameter :query (st/schema s/Str {:description "xyz"}))))
652+
(is (= [{:name "a"
653+
:in "query"
654+
:description "xyz"
655+
:required true
656+
:schema {:type "string" :description "xyz"}}
657+
{:name "b"
658+
:in "query"
659+
:description "abc"
660+
:required true
661+
:schema {:type "string" :description "abc"}}]
662+
(openapi/extract-parameter :query {:a (st/schema s/Str {:openapi/description "xyz"})
663+
:b (st/schema s/Str {:description "abc"})}))))

0 commit comments

Comments
 (0)