Skip to content

Commit acec24d

Browse files
committed
fix(#7): do not allow a few packages with same name
1 parent 946bc3a commit acec24d

File tree

3 files changed

+59
-24
lines changed

3 files changed

+59
-24
lines changed

dev/user.clj

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
(ns user
22
(:require [aidbox-sdk.generator :as gen]
3+
[aidbox-sdk.schema.verify :refer [fhir-version-pattern]]
34
[clojure.data]
4-
[clojure.java.io :as io]))
5+
[clojure.java.io :as io]
6+
[clojure.string :as str]))
57

68
(def source' (io/file "resources/schemas"))
79

@@ -71,5 +73,4 @@
7173

7274
(gen/build-all! source' target)
7375

74-
;;
75-
)
76+
:rcf)

src/aidbox_sdk/schema/verify.clj

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,10 @@
1717
(= (:minor v1-groups) (:minor v2-groups)))
1818
false)))
1919

20+
(defn simplify-package-meta [package]
21+
(select-keys package [:name :version]))
22+
23+
2024
;; FIXME: is it reliable to use first element of the list?
2125
;; ! seems like it's not for original packages (without Aidbox processing).
2226
(defn extract-meta-from-package
@@ -36,14 +40,30 @@
3640

3741
(> (count cores) 1)
3842
(throw (ex-info "Found more then one core package"
39-
{:packages (mapv :name cores)}))
43+
{:packages (mapv #(simplify-package-meta %) cores)}))
4044

4145
:else
4246
core)))
4347

4448
(defn find-extra-packages
45-
"Finds extra packages in the list of packages."
49+
"Finds extra packages in the list of packages.
50+
Throws an exception if there are a few packages with same name."
4651
[packages]
52+
(let [extra (remove #(= "fhir.core" (:type %)) packages)
53+
54+
duplicates (reduce (fn [duplicates [k v]]
55+
(if (= (count v) 1)
56+
duplicates
57+
(assoc duplicates k v)))
58+
{} (group-by :name extra))]
59+
(cond
60+
(> (count duplicates) 0)
61+
(throw (ex-info "Found more then one package with same name"
62+
{:packages (keys duplicates)}))
63+
64+
:else
65+
extra))
66+
4767
(remove #(= "fhir.core" (:type %)) packages))
4868

4969
(defn find-core-package-mismatch
@@ -77,7 +97,7 @@
7797
found
7898
(->> packages
7999
(filterv #(= (:name %) dep-name))
80-
(mapv #(select-keys % [:name :version])))]
100+
(mapv #(simplify-package-meta %)))]
81101

82102
(if (and (= (count found) 1)
83103
(every? #(= (:version %) dep-version) found))
@@ -104,7 +124,7 @@
104124
(let [all (map extract-meta-from-package packages)
105125
core (find-core-package all)
106126
extra (find-extra-packages all)]
107-
(println "✅ Core package found:" (:name core))
127+
(println "✅ Core package found:" (simplify-package-meta core))
108128

109129
(println "Checking core version match...")
110130
(let [core-mismatch (find-core-package-mismatch (:version core) extra)]

test/aidbox_sdk/schema/verify_test.clj

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
(ns aidbox-sdk.schema.verify-test
2-
(:require [aidbox-sdk.schema.verify :as sut]
2+
(:require [aidbox-sdk.schema.verify :as sut :refer [simplify-package-meta]]
33
[matcher-combinators.test :refer [match? thrown-match?]]
44
[clojure.test :refer [deftest is testing]]))
55

@@ -48,18 +48,34 @@
4848
(sut/find-core-package [us-core-package]))))
4949

5050
(testing "throws an exception if more then one core package found"
51-
(is (thrown-match? clojure.lang.ExceptionInfo
52-
{:packages [(:name r4-core-package) "hl7.fhir.r5.core"]}
53-
(sut/find-core-package [r4-core-package
54-
{:name "hl7.fhir.r5.core"
55-
:version "5.0.0"
56-
:type "fhir.core"}]))))
51+
(let [r5-core-package {:name "hl7.fhir.r5.core"
52+
:version "5.0.0"
53+
:type "fhir.core"}]
54+
(is (thrown-match? clojure.lang.ExceptionInfo
55+
{:packages [(simplify-package-meta r4-core-package)
56+
(simplify-package-meta r5-core-package)]}
57+
(sut/find-core-package [r4-core-package
58+
r5-core-package])))))
5759

5860
(testing "returns a core package iff there is only one"
5961
(is (match? (sut/find-core-package [r4-core-package
6062
us-core-package])
6163
r4-core-package))))
6264

65+
(deftest find-extra-packages-test
66+
(testing "throws an exception if there is duplicate"
67+
(let [us-core-package' (assoc us-core-package :version "5.1.0")]
68+
(is (thrown-match? clojure.lang.ExceptionInfo
69+
{:packages [(:name us-core-package)]}
70+
(sut/find-extra-packages [r4-core-package
71+
us-core-package
72+
us-core-package'])))))
73+
74+
(testing "returns extra packages if there is no duplicates"
75+
(is (match? (sut/find-extra-packages [r4-core-package
76+
us-core-package])
77+
[us-core-package]))))
78+
6379
(deftest find-core-package-mismatch-test
6480
(testing "returns a vec with mismatched names"
6581
(let [us-mcode-package (assoc us-mcode-package :fhirVersions ["4.1.0"])]
@@ -88,9 +104,7 @@
88104
[]))))
89105

90106
(deftest find-dependencies-mismatch-test
91-
(let [format-dep-for-check #(select-keys % [:name :version])
92-
93-
us-vsac-package {:name "us.nlm.vsac", :version "0.3.0"}
107+
(let [us-vsac-package {:name "us.nlm.vsac", :version "0.3.0"}
94108
uv-sdc-package {:name "hl7.fhir.uv.sdc", :version "2.7.0"}
95109
term-package {:name "hl7.terminology.r4", :version "5.0.0"}]
96110
(testing "returns a vec with mismatched names and version"
@@ -99,13 +113,13 @@
99113
us-core-package
100114
us-mcode-package])
101115
[(assoc us-core-package :failed-dependencies
102-
[{:required (format-dep-for-check us-vsac-package)
116+
[{:required (simplify-package-meta us-vsac-package)
103117
:found []}
104-
{:required (format-dep-for-check uv-sdc-package)
118+
{:required (simplify-package-meta uv-sdc-package)
105119
:found []}])
106120

107121
(assoc us-mcode-package :failed-dependencies
108-
[{:required (format-dep-for-check term-package)
122+
[{:required (simplify-package-meta term-package)
109123
:found []}])])))
110124

111125
(testing "when required package is found, but version do not match"
@@ -118,12 +132,12 @@
118132
uv-sdc-package'
119133
term-package'])
120134
[(assoc us-core-package :failed-dependencies
121-
[{:required (format-dep-for-check uv-sdc-package)
122-
:found [(format-dep-for-check uv-sdc-package')]}])
135+
[{:required (simplify-package-meta uv-sdc-package)
136+
:found [(simplify-package-meta uv-sdc-package')]}])
123137

124138
(assoc us-mcode-package :failed-dependencies
125-
[{:required (format-dep-for-check term-package)
126-
:found [(format-dep-for-check term-package')]}])])))))
139+
[{:required (simplify-package-meta term-package)
140+
:found [(simplify-package-meta term-package')]}])])))))
127141

128142
(testing "returns an empty vec when no dependencies"
129143
(is (match? (sut/find-dependencies-mismatch [r4-core-package])

0 commit comments

Comments
 (0)