diff options
-rw-r--r-- | src/clj/queue_api/db/core.clj | 15 | ||||
-rw-r--r-- | src/clj/queue_api/routes/services.clj | 2 | ||||
-rw-r--r-- | test/clj/queue_api/test/db/core_test.clj | 84 |
3 files changed, 90 insertions, 11 deletions
diff --git a/src/clj/queue_api/db/core.clj b/src/clj/queue_api/db/core.clj index fa3db41..dc04187 100644 --- a/src/clj/queue_api/db/core.clj +++ b/src/clj/queue_api/db/core.clj @@ -1,11 +1,12 @@ (ns queue-api.db.core (:require [datascript.core :as d] - [mount.core :as mount])) + [mount.core :as mount] + [clj-time.core :as time])) (def schema {:agent/id {:db/unique :db.unique/identity} :agent/primary-skillset {:db/cardinality :db.cardinality/many} :agent/secondary-skillset {:db/cardinality :db.cardinality/many} - :agent/jobs {:db.valueType :db.type/ref} + :agent/job {:db.valueType :db.type/ref} :job/id {:db/unique :db.unique/identity} :job/agent {:db.valueType :db.type/ref}}) @@ -22,6 +23,7 @@ (d/transact! queue-api.db.core/conn [{:job/id id :job/type type :job/urgent urgent + :job/date (time/now) :job/status :unassigned}])) (defn request-job [id] @@ -31,13 +33,6 @@ [{:type "Dummy" :jobs -2}]) -(defn q-agent [id] - (d/q '[:find ?type :in $ ?id - :where - [?e :agent/id ?id] - [?x :job/type ?type] - [?x :job/agent ?e]])) - (defn q-status [s] (d/q '[:find ?id :in $ ?status :where @@ -45,7 +40,7 @@ [?e :job/id ?id]] @conn s)) -(defn get-queue [] +(defn sum-queue [] {:completed (map #(first %) (q-status :completed)) :processing (map #(first %) (q-status :processing)) :unassigned (map #(first %) (q-status :unassigned))})
\ No newline at end of file diff --git a/src/clj/queue_api/routes/services.clj b/src/clj/queue_api/routes/services.clj index 0e94c18..5d6d6cb 100644 --- a/src/clj/queue_api/routes/services.clj +++ b/src/clj/queue_api/routes/services.clj @@ -47,6 +47,6 @@ :processing[String] :unassigned [String]} :summary "Get a summary of an agent" - (ok (db/get-queue))))) + (ok (db/sum-queue))))) diff --git a/test/clj/queue_api/test/db/core_test.clj b/test/clj/queue_api/test/db/core_test.clj new file mode 100644 index 0000000..4c30ed3 --- /dev/null +++ b/test/clj/queue_api/test/db/core_test.clj @@ -0,0 +1,84 @@ +(ns queue-api.test.db.core-test + (:require [clojure.test :refer :all] + [ring.mock.request :refer :all] + [queue-api.db.core :refer :all] + [datascript.core :as d] + [clj-time.core :as time] + [mount.core :as mount]) + (:import (java.util UUID))) + +(def simple-schema [;;Job that will be kept :unassigned + {:job/id "51ab0771-f1e4-4268-868f-9029a58f6612" + :type "rewards-question" + :job/status :unassigned + :job/date (time/now) + :job/urgent false} + ;;Job that will be changed to processing + {:job/id "b201d085-91b5-4a13-9a74-7861426e9996" + :type "rewards-question" + :job/status :unassigned + :job/date (time/now) + :job/urgent true} + ;;Job that will be changed to completed + {:job/id "1e0d939d-494b-48d2-9247-b5ae207a519a" + :type "rewards-question" + :job/status :unassigned + :job/date (time/now) + :job/urgent true} + ;;Agent that will be linked to jobs + {:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d" + :agent/name "Dummy Derp" + :primary-skillset ["rewards-question" "bills-question"] + :secondary-skillset []} + ;;Change job status to :completed and link agent + {:job/id "1e0d939d-494b-48d2-9247-b5ae207a519a" + :job/status :completed + :job/agent [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} + ;;Change job status to processing and link agent + {:job/id "b201d085-91b5-4a13-9a74-7861426e9996" + :job/status :processing + :job/agent [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} + ;;Link jog with job that it is processing + {:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d" + :agent/job [:job/id "b201d085-91b5-4a13-9a74-7861426e9996"]}]) + +(use-fixtures + :each + (fn [f] + (mount/stop #'queue-api.db.core/conn) + (mount/start #'queue-api.db.core/conn) + (d/transact! conn simple-schema) + (f))) + +(deftest add-agent-test + (testing "Test adding agent" + (let [tx (add-agent {:id "1d7158f8-f7a0-4ff9-9758-25efcc5aae65" + :name "Derpinson" + :primary-skillset ["rewards-question" "bills-question"] + :secondary-skillset []}) + tx-data (:tx-data tx)] + (is (not (empty? tx-data)))))) + +(deftest add-job-test + (testing "test adding job" + (let [tx (add-job {:id "2dc043a4-6708-4b1e-885d-e59082733e4d" + :type "rewards-question" + :urgent false}) + tx-data (:tx-data tx)] + (is (not (empty? tx-data)))))) + +(deftest q-status-test + (testing "test query job by status" + (are [left right] + (= left right) + #{["51ab0771-f1e4-4268-868f-9029a58f6612"]} (q-status :unassigned) + #{["1e0d939d-494b-48d2-9247-b5ae207a519a"]} (q-status :completed) + #{["b201d085-91b5-4a13-9a74-7861426e9996"]} (q-status :processing) + #{} (q-status :nil)))) + +(deftest sum-queue-test + (testing "test get summary of current state of the queue" + (is (= {:completed ["1e0d939d-494b-48d2-9247-b5ae207a519a"] + :processing ["b201d085-91b5-4a13-9a74-7861426e9996"] + :unassigned ["51ab0771-f1e4-4268-868f-9029a58f6612"]} + (sum-queue)))))
\ No newline at end of file |