diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2018-02-20 13:22:08 -0300 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2018-02-20 13:22:08 -0300 | 
| commit | 1467bfae9c7971ba04429a1741d6d8549f5acbe2 (patch) | |
| tree | db795303d1ad2a394c015aadd3d79d0e8d6ed26b | |
| parent | c3fadc2baa620fb949944c1876a65c72e17fcb09 (diff) | |
| download | queue-api-1467bfae9c7971ba04429a1741d6d8549f5acbe2.tar.gz queue-api-1467bfae9c7971ba04429a1741d6d8549f5acbe2.tar.bz2 queue-api-1467bfae9c7971ba04429a1741d6d8549f5acbe2.zip | |
Adds more test and doc
| -rw-r--r-- | src/clj/queue_api/db/core.clj | 26 | ||||
| -rw-r--r-- | test/clj/queue_api/test/db/core_test.clj | 208 | 
2 files changed, 128 insertions, 106 deletions
| diff --git a/src/clj/queue_api/db/core.clj b/src/clj/queue_api/db/core.clj index 0381e1e..3210a6c 100644 --- a/src/clj/queue_api/db/core.clj +++ b/src/clj/queue_api/db/core.clj @@ -36,18 +36,18 @@  (defn agent-jobs    "Get a job that has a agent bounded with given `id` and a status of `s`"    [id s] -  (let [q (d/q '[:find ?jid -                 :in $ ?id ?s -                 :where -                 [?e :agent/id ?id] -                 [?x :job/id ?jid] -                 [?x :job/status ?s] -                 [?x :job/agent ?e]] -               @conn id s)] -    (map #(d/entity @conn [:job/id (first %)]) q))) +  (->> (d/q '[:find ?jid +              :in $ ?id ?s +              :where +              [?e :agent/id ?id] +              [?x :job/id ?jid] +              [?x :job/status ?s] +              [?x :job/agent ?e]] +            @conn id s) +       (map #(d/entity @conn [:job/id (first %)]))))  (defn q-job -  "Fetch job and sort by date +  "Query jobs and sort them by date    `u`: urgent flag    `s`: status of the job    `ts`: types of the job" @@ -66,7 +66,7 @@         (map #(d/entity @conn [:job/id (last %)]))))  (defn q-status -  "Query job filtering only by `s`" +  "Query job by status `s`"    [s]    (d/q '[:find ?id :in $ ?status           :where @@ -75,7 +75,7 @@         @conn s))  (defn sum-agent -  "Get how many jobs a agent (`id`) has performed aggregated by type" +  "Get how many jobs a agent `id` has performed aggregated by type"    [id]    (let [jobs (agent-jobs id :completed)]      (reduce (fn [l r] @@ -85,7 +85,7 @@                    (conj l {t (inc (get l t))})))) {} jobs)))  (defn sum-queue -  "Count all job aggregated by type" +  "Count all jobs aggregated by type"    []    {:completed  (map first (q-status :completed))     :processing (map first (q-status :processing)) diff --git a/test/clj/queue_api/test/db/core_test.clj b/test/clj/queue_api/test/db/core_test.clj index 3909c31..08c8a2a 100644 --- a/test/clj/queue_api/test/db/core_test.clj +++ b/test/clj/queue_api/test/db/core_test.clj @@ -6,92 +6,96 @@              [clj-time.core :as time]              [mount.core :as mount])) -(def base-schema [;;Job that will be kept :unassigned -                  {:job/id     "dfa7744f-8d61-4d37-885f-dbef2d4df13b" -                   :job/type   "rewards-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 19 1 0 1) -                   :job/urgent false} -                  {:job/id     "c471f9e0-fbbd-461d-adb0-7466c2d9830f" -                   :job/type   "purchases-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 19 1 0 0) -                   :job/urgent false} -                  {:job/id     "51ab0771-f1e4-4268-868f-9029a58f6612" -                   :job/type   "rewards-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 2) -                   :job/urgent true} -                  {:job/id     "96cf6f11-591d-4cde-9ab0-56e371acb6d2" -                   :job/type   "rewards-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 1) -                   :job/urgent false} -                  {:job/id     "6e90db58-7a6d-46e2-a02a-e33dc82e6e33" -                   :job/type   "purchases-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 0) -                   :job/urgent true} -                  {:job/id     "f90e149e-fa51-4212-a6bf-8cf81c78d28c" -                   :job/type   "purchases-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 17 1 0 0) -                   :job/urgent false} -                  ;;Job that will be changed to processing -                  {:job/id     "b201d085-91b5-4a13-9a74-7861426e9996" -                   :job/type   "purchases-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 4) -                   :job/urgent true} -                  ;;Job that will be changed to completed -                  {:job/id     "1e0d939d-494b-48d2-9247-b5ae207a519a" -                   :job/type   "bills-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 3) -                   :job/urgent false} -                  {:job/id     "aa327540-4e24-47f4-9e9c-81cdd5195934" -                   :job/type   "bills-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 6) -                   :job/urgent true} -                  {:job/id     "3cdc52fe-b538-40a6-a9d7-92fa840c2c4b" -                   :job/type   "purchases-question" -                   :job/status :unassigned -                   :job/date   (time/date-time 2018 2 18 1 0 8) -                   :job/urgent true} -                  ;;Agents -                  {:agent/id                 "644be0ce-035d-48cb-867e-8e6de2714a8d" -                   :agent/name               "Dummy Derp" -                   :agent/primary-skillset   ["rewards-question" "bills-question"] -                   :agent/secondary-skillset []} -                  {:agent/id                 "ff02347a-1b2d-440c-a2a1-7a593dba564e" -                   :agent/name               "Derpinson" -                   :agent/primary-skillset   ["nil-question"] -                   :agent/secondary-skillset ["purchases-question"]} -                  ;;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"]} -                  {:job/id     "aa327540-4e24-47f4-9e9c-81cdd5195934" -                   :job/status :completed -                   :job/agent  [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} -                  {:job/id     "3cdc52fe-b538-40a6-a9d7-92fa840c2c4b" -                   :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 agent with job that it is being processed -                  {:agent/id  "644be0ce-035d-48cb-867e-8e6de2714a8d" -                   :agent/job [:job/id "b201d085-91b5-4a13-9a74-7861426e9996"]}]) +(def base-schema +  "Scenario base for tests, it has most of possible combinations to simulate a real setup" +  [;;Jobs that will be kept :unassigned +   {:job/id     "dfa7744f-8d61-4d37-885f-dbef2d4df13b" +    :job/type   "rewards-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 19 1 0 1) +    :job/urgent false} +   {:job/id     "c471f9e0-fbbd-461d-adb0-7466c2d9830f" +    :job/type   "purchases-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 19 1 0 0) +    :job/urgent false} +   {:job/id     "51ab0771-f1e4-4268-868f-9029a58f6612" +    :job/type   "rewards-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 2) +    :job/urgent true} +   {:job/id     "96cf6f11-591d-4cde-9ab0-56e371acb6d2" +    :job/type   "rewards-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 1) +    :job/urgent false} +   {:job/id     "6e90db58-7a6d-46e2-a02a-e33dc82e6e33" +    :job/type   "purchases-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 0) +    :job/urgent true} +   {:job/id     "f90e149e-fa51-4212-a6bf-8cf81c78d28c" +    :job/type   "purchases-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 17 1 0 0) +    :job/urgent false} +   ;;Job that will be changed to processing +   {:job/id     "b201d085-91b5-4a13-9a74-7861426e9996" +    :job/type   "purchases-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 4) +    :job/urgent true} +   ;;Jobs that will be changed to completed +   {:job/id     "1e0d939d-494b-48d2-9247-b5ae207a519a" +    :job/type   "bills-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 3) +    :job/urgent false} +   {:job/id     "aa327540-4e24-47f4-9e9c-81cdd5195934" +    :job/type   "bills-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 6) +    :job/urgent true} +   {:job/id     "3cdc52fe-b538-40a6-a9d7-92fa840c2c4b" +    :job/type   "purchases-question" +    :job/status :unassigned +    :job/date   (time/date-time 2018 2 18 1 0 8) +    :job/urgent true} +   ;;Agents +   {:agent/id                 "644be0ce-035d-48cb-867e-8e6de2714a8d" +    :agent/name               "Dummy Derp" +    :agent/primary-skillset   ["rewards-question" "bills-question"] +    :agent/secondary-skillset []} +   {:agent/id                 "ff02347a-1b2d-440c-a2a1-7a593dba564e" +    :agent/name               "Derpinson" +    :agent/primary-skillset   ["nil-question"] +    :agent/secondary-skillset ["purchases-question"]} +   ;;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"]} +   {:job/id     "aa327540-4e24-47f4-9e9c-81cdd5195934" +    :job/status :completed +    :job/agent  [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} +   {:job/id     "3cdc52fe-b538-40a6-a9d7-92fa840c2c4b" +    :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 agent with job that it is being processed +   {:agent/id  "644be0ce-035d-48cb-867e-8e6de2714a8d" +    :agent/job [:job/id "b201d085-91b5-4a13-9a74-7861426e9996"]}]) -(def complete-schema [{:job/id     "51ab0771-f1e4-4268-868f-9029a58f6612" -                       :job/status :completed -                       :job/agent  [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} -                      {:job/id     "6e90db58-7a6d-46e2-a02a-e33dc82e6e33" -                       :job/status :completed -                       :job/agent  [:agent/id "ff02347a-1b2d-440c-a2a1-7a593dba564e"]}]) +(def complete-schema +  "It completes some jobs and links them to an agent" +  [{:job/id     "51ab0771-f1e4-4268-868f-9029a58f6612" +    :job/status :completed +    :job/agent  [:agent/id "644be0ce-035d-48cb-867e-8e6de2714a8d"]} +   {:job/id     "6e90db58-7a6d-46e2-a02a-e33dc82e6e33" +    :job/status :completed +    :job/agent  [:agent/id "ff02347a-1b2d-440c-a2a1-7a593dba564e"]}])  (use-fixtures    :each @@ -117,7 +121,7 @@        (is (not (empty? tx-data))))))  (deftest add-job-test -  (testing "test adding job" +  (testing "Test adding job"      (let [tx (add-job {:id     "2dc043a4-6708-4b1e-885d-e59082733e4d"                         :type   "rewards-question"                         :urgent false}) @@ -125,7 +129,7 @@        (is (not (empty? tx-data))))))  (deftest q-status-test -  (testing "test query job by status" +  (testing "Test query job by status"      (are [left right]        (= left right)        #{["96cf6f11-591d-4cde-9ab0-56e371acb6d2"] @@ -141,7 +145,7 @@        #{} (q-status :nil))))  (deftest sum-queue-test -  (testing "test get summary of current state of the queue" +  (testing "test get summary of the current state of the queue"      (is (= {:completed  ["1e0d939d-494b-48d2-9247-b5ae207a519a"                           "aa327540-4e24-47f4-9e9c-81cdd5195934"                           "3cdc52fe-b538-40a6-a9d7-92fa840c2c4b"], @@ -155,7 +159,7 @@             (sum-queue)))))  (deftest q-job-test -  (testing "test query job" +  (testing "Test query job"      (is (= [(job "96cf6f11-591d-4cde-9ab0-56e371acb6d2")              (job "dfa7744f-8d61-4d37-885f-dbef2d4df13b")]             (q-job false :unassigned "rewards-question"))) @@ -180,7 +184,7 @@      (is (= [] (agent-jobs "644be0ce-035d-48cb-867e-8e6de2714a8d" :unassigned)))))  (deftest sum-agent-test -  (testing "Test sum-agent" +  (testing "Test get summary of an agent"      (is (= {"bills-question"     2              "purchases-question" 1}             (sum-agent "644be0ce-035d-48cb-867e-8e6de2714a8d"))) @@ -258,6 +262,24 @@        (job "dfa7744f-8d61-4d37-885f-dbef2d4df13b") (:agent/job (agent "644be0ce-035d-48cb-867e-8e6de2714a8d"))        ;; last empty iteration        nil (dequeue-job "644be0ce-035d-48cb-867e-8e6de2714a8d") -      :completed (:job/status (job "dfa7744f-8d61-4d37-885f-dbef2d4df13b"))))) - - +      :completed (:job/status (job "dfa7744f-8d61-4d37-885f-dbef2d4df13b")))) +  (testing "Testing Derpinson dequeuing process" +    (are [left right] +      (= left right) +      ;;first iteration +      "6e90db58-7a6d-46e2-a02a-e33dc82e6e33" (dequeue-job "ff02347a-1b2d-440c-a2a1-7a593dba564e") +      :processing (:job/status (job "6e90db58-7a6d-46e2-a02a-e33dc82e6e33")) +      (job "6e90db58-7a6d-46e2-a02a-e33dc82e6e33") (:agent/job (agent "ff02347a-1b2d-440c-a2a1-7a593dba564e")) +      ;;second iteration +      "f90e149e-fa51-4212-a6bf-8cf81c78d28c" (dequeue-job "ff02347a-1b2d-440c-a2a1-7a593dba564e") +      :completed (:job/status (job "6e90db58-7a6d-46e2-a02a-e33dc82e6e33")) +      :processing (:job/status (job "f90e149e-fa51-4212-a6bf-8cf81c78d28c")) +      (job "f90e149e-fa51-4212-a6bf-8cf81c78d28c") (:agent/job (agent "ff02347a-1b2d-440c-a2a1-7a593dba564e")) +      ;;third iteration +      "c471f9e0-fbbd-461d-adb0-7466c2d9830f" (dequeue-job "ff02347a-1b2d-440c-a2a1-7a593dba564e") +      :completed (:job/status (job "f90e149e-fa51-4212-a6bf-8cf81c78d28c")) +      :processing (:job/status (job "c471f9e0-fbbd-461d-adb0-7466c2d9830f")) +      (job "c471f9e0-fbbd-461d-adb0-7466c2d9830f") (:agent/job (agent "ff02347a-1b2d-440c-a2a1-7a593dba564e")) +      ;;last empty iteration +      nil (dequeue-job "ff02347a-1b2d-440c-a2a1-7a593dba564e") +      :completed (:job/status (job "c471f9e0-fbbd-461d-adb0-7466c2d9830f"))))) | 
