From a667957f1c4a43a9c639eb2df95f3b6faf795f90 Mon Sep 17 00:00:00 2001 From: Daniel O'Connell Date: Sat, 13 Mar 2021 16:49:20 +0100 Subject: [PATCH] fixes --- backend/src/chicken_master/orders.clj | 13 +++++++------ backend/test/chicken_master/orders_test.clj | 19 ++++++++++++++++--- frontend/src/chicken_master/calendar.cljs | 6 +++--- frontend/src/chicken_master/events.cljs | 5 ++--- frontend/src/chicken_master/subs.cljs | 7 ++++--- frontend/test/chicken_master/events_test.cljs | 7 ++++--- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/backend/src/chicken_master/orders.clj b/backend/src/chicken_master/orders.clj index 2821c53..76f8d3e 100644 --- a/backend/src/chicken_master/orders.clj +++ b/backend/src/chicken_master/orders.clj @@ -17,22 +17,23 @@ (:orders/id (sql/insert! tx :orders (assoc order :user_id user-id)))))) -(defn- structure-order [items] +(defn structure-order [items] {:id (-> items first :orders/id) :notes (-> items first :orders/notes) :state (-> items first :orders/status keyword) :day (-> items first :orders/order_date (.toInstant) str (subs 0 10)) :who {:id (-> items first :customers/id) :name (-> items first :customers/name)} - :products (into {} - (for [{:keys [order_products/amount products/name]} items] - [(keyword name) amount]))}) + :products (->> items + (filter :products/name) + (reduce (fn [coll {:keys [order_products/amount products/name]}] + (assoc coll (keyword name) amount)) {}))}) (def orders-query "SELECT o.id, o.notes, o.status, o.order_date, c.id, c.name, p.name, op.amount FROM orders o JOIN customers c ON o.customer_id = c.id - JOIN order_products op ON o.id = op.order_id - JOIN products p on p.id = op.product_id ") + LEFT OUTER JOIN order_products op ON o.id = op.order_id + LEFT OUTER JOIN products p on p.id = op.product_id ") (defn- get-orders [tx where params] (->> (into [(if where (str orders-query where) orders-query)] params) diff --git a/backend/test/chicken_master/orders_test.clj b/backend/test/chicken_master/orders_test.clj index 6cb7012..b213439 100644 --- a/backend/test/chicken_master/orders_test.clj +++ b/backend/test/chicken_master/orders_test.clj @@ -15,9 +15,22 @@ (merge #:orders{:id id :notes notes :status status :order_date date} #:customers{:id user_id :name user_name} {:products/name (name product) :order_products/amount amount})) - (merge #:orders{:id id :notes notes :status status :order_date date} - #:customers{:id user_id :name user_name} - {:products/name nil :order_products/amount nil}))) + [(merge #:orders{:id id :notes notes :status status :order_date date} + #:customers{:id user_id :name user_name} + {:products/name nil :order_products/amount nil})])) + +(deftest structure-order-test + (testing "basic structure" + (is (= (sut/structure-order (raw-order-row)) + {:id 1, :notes "note", :state :pending, :day "2020-01-01", + :who {:id 2, :name "mr blobby"}, + :products {:eggs 12 :milk 3}}))) + + (testing "missing products" + (is (= (sut/structure-order (raw-order-row :products nil)) + {:id 1, :notes "note", :state :pending, :day "2020-01-01", + :who {:id 2, :name "mr blobby"}, + :products {}})))) (deftest test-get-order (testing "correct values returned" diff --git a/frontend/src/chicken_master/calendar.cljs b/frontend/src/chicken_master/calendar.cljs index cc0cced..8b0c037 100644 --- a/frontend/src/chicken_master/calendar.cljs +++ b/frontend/src/chicken_master/calendar.cljs @@ -44,9 +44,9 @@ (html/input :who "kto" {:required true :default (:name who) :list :customers - :on-blur #(->> % .-target .-value - (get-group-products customers) - (swap! state assoc :group-products))}) + :on-change (fn [e] + (if-let [products (->> e .-target .-value (get-group-products customers))] + (swap! state assoc :group-products products)))}) (into [:datalist {:id :customers}] (for [cust customers] [:option {:value (:name cust) :id (:id cust)}])) [:input {:id :who-id :name :who-id :type :hidden :value (or (:id who) "")}]])) diff --git a/frontend/src/chicken_master/events.cljs b/frontend/src/chicken_master/events.cljs index e2a985e..817a4e5 100644 --- a/frontend/src/chicken_master/events.cljs +++ b/frontend/src/chicken_master/events.cljs @@ -51,8 +51,7 @@ (re-frame/reg-event-db ::hide-modal (fn [db [_ modal]] (assoc-in db [modal :show] nil))) (re-frame/reg-event-db ::start-loading (fn [db _] (update db :loading? inc))) -(re-frame/reg-event-db ::stop-loading (fn [db _] (update db :loading? dec))) - +(re-frame/reg-event-db ::stop-loading (fn [db _] (update db :loading? #(-> % dec (max 0))))) (re-frame/reg-event-fx ::confirm-action (fn [_ [_ msg on-confirm-event & params]] @@ -190,7 +189,7 @@ (re-frame/reg-event-fx ::fetch-stock - (fn [_ _] + (fn [_ [_ ]] {:dispatch [::start-loading] :http-xhrio (http-get "stock" {} ::process-stock)})) diff --git a/frontend/src/chicken_master/subs.cljs b/frontend/src/chicken_master/subs.cljs index 811aaaa..769b8a2 100644 --- a/frontend/src/chicken_master/subs.cljs +++ b/frontend/src/chicken_master/subs.cljs @@ -10,10 +10,11 @@ (re-frame/reg-sub ::available-customers (fn [db] (:customers db))) (re-frame/reg-sub ::orders (fn [db] (:orders db))) -(re-frame/reg-sub ::show-edit-modal (fn [db] (-> db :order-edit :show))) -(re-frame/reg-sub ::show-stock-modal (fn [db] (-> db :stock :show))) +(defn- show-modal? [modal db] (and (-> modal db :show) (-> db :loading? zero?))) +(re-frame/reg-sub ::show-edit-modal (partial show-modal? :order-edit)) +(re-frame/reg-sub ::show-stock-modal (partial show-modal? :stock)) +(re-frame/reg-sub ::show-settings-modal (partial show-modal? :settings)) (re-frame/reg-sub ::show-customers-modal (fn [db] (-> db :clients :show))) -(re-frame/reg-sub ::show-settings-modal (fn [db] (-> db :settings :show))) (re-frame/reg-sub ::editted-order (fn [db] (:order-edit db))) diff --git a/frontend/test/chicken_master/events_test.cljs b/frontend/test/chicken_master/events_test.cljs index 2a24d3e..195aa1b 100644 --- a/frontend/test/chicken_master/events_test.cljs +++ b/frontend/test/chicken_master/events_test.cljs @@ -33,7 +33,8 @@ (set-db {:order-edit {:show true} :stock {:show true} :clients {:show true} - :settings {:show true}}) + :settings {:show true} + :loading? 0}) (is @(rf/subscribe [::subs/show-edit-modal])) (is @(rf/subscribe [::subs/show-stock-modal])) (is @(rf/subscribe [::subs/show-customers-modal])) @@ -382,7 +383,7 @@ (deftest stock-tests (testing "stock fetched before showing" (rf-test/run-test-sync - (set-db {:stock {}}) + (set-db {:stock {} :loading? 0}) (let [called (atom false)] (param-validator ::sut/fetch-stock #(reset! called true)) (rf/dispatch [::sut/show-stock]) @@ -461,7 +462,7 @@ (deftest test-settings (testing "settings get shown" (rf-test/run-test-sync - (set-db {:settings {}}) + (set-db {:settings {} :loading? 0}) (rf/dispatch [::sut/show-settings]) (is @(rf/subscribe [::subs/show-settings-modal]))))