From e93368c6754b18ea63bf8817ab7c3370bffefd97 Mon Sep 17 00:00:00 2001 From: Simon Brooke Date: Thu, 2 Aug 2018 21:36:28 +0100 Subject: [PATCH] All tests pass. Is this the end of the link table naming issue? --- src/adl_support/utils.clj | 33 +++++++++++++++------------------ test/adl_support/utils_test.clj | 22 +++++++++++++++++++++- 2 files changed, 36 insertions(+), 19 deletions(-) diff --git a/src/adl_support/utils.clj b/src/adl_support/utils.clj index f21bceb..f035c7c 100644 --- a/src/adl_support/utils.clj +++ b/src/adl_support/utils.clj @@ -309,22 +309,22 @@ (= (max n1 n2) 1))) -(defn link-related-property-name +(defn link-related-query-name "link is tricky. If there's exactly than one link between the two entities, we need to generate the same name from both ends of the link" [property nearside farside] (if (unique-link? nearside farside) - (let [ordered (sort-by (-> % :attrs :name) (list nearside farside)) + (let [ordered (sort-by #(-> % :attrs :name) (list nearside farside)) e1 (first ordered) e2 (nth ordered 1)] (str "list-" (safe-name e1 :sql) "-by-" - (safe-name e2 :sql)) + (safe-name e2 :sql))) (str "list-" - (safe-name ~property :sql) "-by-" - (singularise (safe-name ~nearside :sql)))))) + (safe-name property :sql) "-by-" + (singularise (safe-name nearside :sql))))) (defn link-table-name @@ -352,22 +352,19 @@ `farside` which match a given record on `nearside`, where `nearide` and `farside` are both entities." [property nearside farside] - `(if + (if (and - (property? ~property) - (entity? ~nearside) - (entity? ~farside)) - (case (-> ~property :attrs :type) - ;; link is tricky. If there's exactly than one link between the two - ;; entities, we need to generate the same name from both - ;; ends of the link - "link" (link-related-query-name) + (property? property) + (entity? nearside) + (entity? farside)) + (case (-> property :attrs :type) + "link" (link-related-query-name property nearside farside) "list" (str "list-" - (safe-name ~farside :sql) "-by-" - (singularise (safe-name ~nearside :sql))) + (safe-name farside :sql) "-by-" + (singularise (safe-name nearside :sql))) "entity" (str "list-" - (safe-name ~farside :sql) "-by-" - (singularise (safe-name ~nearside :sql))) + (safe-name nearside :sql) "-by-" + (singularise (safe-name farside :sql))) ;; default (str "ERROR-bad-property-type-" (-> ~property :attrs :type) "-of-" diff --git a/test/adl_support/utils_test.clj b/test/adl_support/utils_test.clj index 7784dd5..b6747d6 100644 --- a/test/adl_support/utils_test.clj +++ b/test/adl_support/utils_test.clj @@ -366,7 +366,7 @@ [{:tag :prompt, :attrs {:locale "en_GB.UTF-8", :prompt "Gender"}, :content nil}]}]} - property (child e1 #(= (-> % :attrs :name) "gender")) + property (child e2 #(= (-> % :attrs :name) "gender")) expected "list-electors-by-gender" actual (list-related-query-name property e2 e1)] (is (= expected actual) "just checking...")) @@ -426,4 +426,24 @@ actual (list-related-query-name property e2 e1)] (is (= actual expected) "Link property - membersips"))))) +;; (def e1 {:tag :entity +;; :attrs {:name "teams"} +;; :content [{:tag :key +;; :content [{:tag :property +;; :attrs {:name "id" :type "integer" :distinct "system"}}]} +;; {:tag :property +;; :attrs {:name "members" :type "link" :entity "canvassers"}} +;; {:tag :property +;; :attrs {:name "organisers" :type "link" :entity "canvassers"}}]}) +;; (def e2 {:tag :entity +;; :attrs {:name "canvassers"} +;; :content [{:tag :key +;; :content [{:tag :property +;; :attrs {:name "id" :type "integer" :distinct "system"}}]} +;; {:tag :property +;; :attrs {:name "memberships" :type "link" :entity "teams"}}]}) +;; (def property {:tag :property +;; :attrs {:name "members" :type "link" :entity "canvassers"}}) + +;; (list-related-query-name property e1 e2)