Skip to content

Commit

Permalink
Ignore Unknown Values of the _summary Search Param
Browse files Browse the repository at this point in the history
Also make use of multiple _elements parameters.

Closes: #1863
  • Loading branch information
alexanderkiel committed Jul 3, 2024
1 parent 8a8d08d commit 5bc36e1
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 10 deletions.
6 changes: 4 additions & 2 deletions modules/interaction/src/blaze/interaction/search/params.clj
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
[blaze.interaction.util :as iu]
[blaze.page-store :as page-store]
[blaze.page-store.spec]
[blaze.util :as u]
[clojure.spec.alpha :as s]))

(defn- clauses [page-store {token "__token" :as query-params}]
Expand All @@ -30,7 +31,8 @@
(defn- summary?
"Returns true if a summary result is requested."
[{summary "_summary" :as query-params}]
(or (zero? (fhir-util/page-size query-params)) (= "count" summary)))
(or (zero? (fhir-util/page-size query-params))
(some? (some #{"count"} (u/to-seq summary)))))

(defn decode
"Returns a CompletableFuture that will complete with decoded params or
Expand All @@ -46,7 +48,7 @@
{:clauses clauses
:include-defs include-defs
:summary? (summary? query-params)
:summary (get query-params "_summary")
:summary (some #{"count"} (u/to-seq (get query-params "_summary")))
:elements (fhir-util/elements query-params)
:page-size (fhir-util/page-size query-params)
:page-type (fhir-util/page-type query-params)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,28 @@
(testing "three elements"
(given @(params/decode page-store :blaze.preference.handling/strict
{"_elements" "a,b,c"})
:elements := [:a :b :c]))))
:elements := [:a :b :c]))

(testing "two elements parameters"
(given @(params/decode page-store :blaze.preference.handling/strict
{"_elements" ["a" "b"]})
:elements := [:a :b])))

(testing "decoding _summary"
(testing "count"
(given @(params/decode page-store :blaze.preference.handling/strict
{"_summary" "count"})
:summary? := true
:summary := "count"))

(testing "count and invalid counts"
(given @(params/decode page-store :blaze.preference.handling/strict
{"_summary" ["count" "counts"]})
:summary? := true
:summary := "count"))

(testing "true"
(given @(params/decode page-store :blaze.preference.handling/strict
{"_summary" "true"})
:summary? := false
:summary := nil))))
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
[blaze.fhir.test-util :refer [structure-definition-repo]]
[blaze.module.test-util :refer [with-system]]
[blaze.rest-api :as-alias rest-api]
[blaze.rest-api.capabilities-handler]
[blaze.rest-api.header-spec]
[blaze.rest-api.spec]
[blaze.test-util :as tu :refer [given-thrown]]
Expand Down Expand Up @@ -166,7 +167,8 @@
@(handler
{:query-params {"_elements" (str/join "," (map name ks))}
:blaze/base-url "base-url-131713"})]
(= (set (conj ks :fhir/type)) (set (keys body)))))))
(or (empty? ks)
(= (set (conj ks :fhir/type)) (set (keys body))))))))

(testing "cache validation"
(doseq [if-none-match ["W/\"518da6fc\"" "W/\"518da6fc\", \"foo\""]]
Expand Down
4 changes: 2 additions & 2 deletions modules/rest-util/src/blaze/handler/fhir/util.clj
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@

(defn elements
"Returns a vector of keywords created from the comma separated values of
the first valid `_elements` query param or `[]` otherwise."
all `_elements` query params."
{:arglists '([query-params])}
[{v "_elements"}]
(mapv keyword (some-> v (str/split #"\s*,\s*"))))
(into [] (comp (mapcat #(str/split % #"\s*,\s*")) (remove str/blank?) (map keyword)) (u/to-seq v)))

(defn- incorrect-date-msg [name value]
(format "The value `%s` of the query param `%s` is no valid date." value name))
Expand Down
14 changes: 10 additions & 4 deletions modules/rest-util/test/blaze/handler/fhir/util_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
[blaze.handler.fhir.util-spec]
[blaze.module.test-util :refer [with-system]]
[blaze.test-util :as tu :refer [satisfies-prop]]
[clojure.set :as set]
[clojure.spec.alpha :as s]
[clojure.spec.test.alpha :as st]
[clojure.string :as str]
Expand Down Expand Up @@ -142,11 +143,16 @@
{}))

(testing "_elements is present"
(tu/satisfies-prop 1000
(prop/for-all [fields fields-gen]
(let [query-params {"_elements" (fields :string)}]
(tu/satisfies-prop 100
(prop/for-all [fields (gen/vector fields-gen)]
(let [values (mapv :string fields)
values (cond
(< 1 (count values)) values
(empty? values) ""
:else (first values))
query-params {"_elements" values}]
(= (set (fhir-util/elements query-params))
(set (fields :vector))))))))
(apply set/union (map (comp set :vector) fields))))))))

(deftest date-test
(testing "missing"
Expand Down

0 comments on commit 5bc36e1

Please sign in to comment.