First commit. Taken from open source branch of internal sample-tracking application.
This commit is contained in:
28
test/clj/org/parkerici/sample_tracking/api/export_test.clj
Normal file
28
test/clj/org/parkerici/sample_tracking/api/export_test.clj
Normal file
@@ -0,0 +1,28 @@
|
||||
(ns org.parkerici.sample-tracking.api.export-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[clojure.data.csv :as csv]
|
||||
[ring.mock.request :as rm]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]))
|
||||
|
||||
(deftest export-collected-samples-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
export-response (tu/admin-authed-web-app (rm/request :get "/api/sample/export" {:uuid created-uuid}))
|
||||
export-csv (csv/read-csv (slurp (:body export-response)))]
|
||||
(is (= 4 (count export-csv)))
|
||||
(is (= 23 (count (first export-csv))))))
|
||||
|
||||
(deftest export-all-samples-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
export-response (tu/admin-authed-web-app
|
||||
(rm/request :get "/api/sample/export" {:uuid created-uuid :uncollected true}))
|
||||
export-csv (csv/read-csv (slurp (:body export-response)))]
|
||||
(is (= 15 (count export-csv)))
|
||||
(is (= 23 (count (first export-csv))))))
|
||||
91
test/clj/org/parkerici/sample_tracking/api/kit_test.clj
Normal file
91
test/clj/org/parkerici/sample_tracking/api/kit_test.clj
Normal file
@@ -0,0 +1,91 @@
|
||||
(ns org.parkerici.sample-tracking.api.kit-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[ring.mock.request :as rm]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]))
|
||||
|
||||
(deftest create-kit-test
|
||||
[]
|
||||
(let [initial-kit-list (tu/get-kit-list {:complete "true"})
|
||||
kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
post-create-kit-list (tu/get-kit-list {:complete "true"})
|
||||
created-kit (first (filter #(= (:uuid %) created-uuid) post-create-kit-list))]
|
||||
(is (some? created-uuid))
|
||||
(is (some? created-kit))
|
||||
(is (= 1 (- (count post-create-kit-list) (count initial-kit-list))))))
|
||||
|
||||
(deftest share-kit-test
|
||||
[]
|
||||
(let [initial-incomplete-kit-list (tu/get-kit-list {:complete "false"})
|
||||
initial-complete-kit-list (tu/get-kit-list {:complete "true"})
|
||||
complete-kit-request-body (tu/kit-request-body)
|
||||
share-kit-request-body (dissoc complete-kit-request-body :samples :completing-email)
|
||||
share-response (tu/standard-web-app (-> (rm/request :post "/api/kit/share")
|
||||
(rm/json-body share-kit-request-body)))
|
||||
shared-uuid (tu/get-response-uuid share-response)
|
||||
created-kit (first (tu/get-response-items (tu/standard-web-app (rm/request :get "/api/kit/share" {:uuid shared-uuid}))))
|
||||
post-share-incomplete-kit-list (tu/get-kit-list {:complete "false"})
|
||||
shared-kit-from-list (first (filter #(= (:uuid %) shared-uuid) post-share-incomplete-kit-list))
|
||||
submit-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body (assoc complete-kit-request-body :uuid shared-uuid))))
|
||||
submitted-uuid (tu/get-response-uuid submit-response)
|
||||
submitted-kit-from-share (first (tu/get-response-items (tu/standard-web-app (rm/request :get "/api/kit/share" {:uuid shared-uuid}))))
|
||||
post-submitted-incomplete-kit-list (tu/get-kit-list {:complete "false"})
|
||||
post-submitted-complete-kit-list (tu/get-kit-list {:complete "true"})
|
||||
incomplete-submitted-kit (first (filter #(= (:uuid %) shared-uuid) post-submitted-incomplete-kit-list))
|
||||
complete-submitted-kit (first (filter #(= (:uuid %) shared-uuid) post-submitted-complete-kit-list))]
|
||||
(is (some? shared-uuid))
|
||||
(is (some? submitted-uuid))
|
||||
(= shared-uuid submitted-uuid) ; The UUID returned from the share endpoint should stay the same after submitting
|
||||
(is (some? created-kit))
|
||||
(is (some? shared-kit-from-list))
|
||||
(is (nil? submitted-kit-from-share)) ; Users should not be able to access a submitted kit via share
|
||||
(is (nil? incomplete-submitted-kit)) ; Submitted kit should not be available in incomplete list
|
||||
(is (some? complete-submitted-kit))
|
||||
(is (= 1 (- (count post-share-incomplete-kit-list) (count initial-incomplete-kit-list))))
|
||||
(is (= 1 (- (count post-submitted-complete-kit-list) (count initial-complete-kit-list))))))
|
||||
|
||||
(deftest edit-kit-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-uuid)
|
||||
(assoc :kit-id "87654321"))
|
||||
edit-response (tu/admin-authed-web-app (-> (rm/request :patch "/api/kit")
|
||||
(rm/json-body edit-kit-request-body)))
|
||||
edited-uuid (tu/get-response-uuid edit-response)
|
||||
edited-kit (first (tu/get-kit-list {:uuid edited-uuid}))
|
||||
edited-kit-history (tu/get-entity-history edited-uuid)]
|
||||
(is (some? created-uuid))
|
||||
(is (some? edited-uuid))
|
||||
(is (= created-uuid edited-uuid)) ; The UUID returned from the edit endpoint should stay the same after submitting
|
||||
(is (= (:kit-id edit-kit-request-body) (:kit-id edited-kit)))
|
||||
(is (= 1 (count edited-kit-history)))))
|
||||
|
||||
(deftest archive-kit-test
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
pre-archive-archived-kit-list (tu/get-kit-list {:archived "true"})
|
||||
_ (tu/admin-authed-web-app (rm/request :patch "/api/kit/set-archived" {:uuid created-uuid :archived "true"}))
|
||||
post-archive-archived-kit-list (tu/get-kit-list {:archived "true"})
|
||||
archived-kit (first (filter #(= (:uuid %) created-uuid) post-archive-archived-kit-list))
|
||||
_ (tu/admin-authed-web-app (rm/request :patch "/api/kit/set-archived" {:uuid created-uuid :archived "false"}))
|
||||
post-unarchive-archived-kit-list (tu/get-kit-list {:archived "true"})
|
||||
missing-archived-kit (first (filter #(= (:uuid %) created-uuid) post-unarchive-archived-kit-list))
|
||||
post-unarchive-kit-list (tu/get-kit-list {})
|
||||
unarchived-kit (first (filter #(= (:uuid %) created-uuid) post-unarchive-kit-list))
|
||||
kit-history (tu/get-entity-history created-uuid)]
|
||||
(is (some? created-uuid))
|
||||
(is (= 1 (- (count post-archive-archived-kit-list) (count pre-archive-archived-kit-list))))
|
||||
(is (= 1 (- (count post-archive-archived-kit-list) (count post-unarchive-archived-kit-list))))
|
||||
(is (some? archived-kit))
|
||||
(is (nil? missing-archived-kit))
|
||||
(is (some? unarchived-kit))
|
||||
(is (= 2 (count kit-history)))))
|
||||
59
test/clj/org/parkerici/sample_tracking/api/list_test.clj
Normal file
59
test/clj/org/parkerici/sample_tracking/api/list_test.clj
Normal file
@@ -0,0 +1,59 @@
|
||||
(ns org.parkerici.sample-tracking.api.list-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]))
|
||||
|
||||
(defn list-studies-test
|
||||
[study-name]
|
||||
(let [studies-list (tu/get-studies-list)
|
||||
pici0014-study (tu/get-element-with-name studies-list study-name)]
|
||||
(is (= 4 (count studies-list)))
|
||||
(is (some? pici0014-study))
|
||||
pici0014-study))
|
||||
|
||||
(defn list-sites-test
|
||||
[study site-name]
|
||||
(let [sites-list (tu/get-sites-list (:uuid study))
|
||||
mskcc-site (tu/get-element-with-name sites-list site-name)]
|
||||
(is (= 4 (count sites-list)))
|
||||
(is (some? mskcc-site))
|
||||
mskcc-site))
|
||||
|
||||
(defn list-cohorts-test
|
||||
[study cohort-name]
|
||||
(let [cohorts-list (tu/get-cohorts-list (:uuid study))
|
||||
na-cohort (tu/get-element-with-name cohorts-list cohort-name)]
|
||||
(is (= 1 (count cohorts-list)))
|
||||
(is (some? na-cohort))
|
||||
na-cohort))
|
||||
|
||||
(defn list-kit-types-test
|
||||
[cohort kit-type-name]
|
||||
(let [kit-types-list (tu/get-kit-types-list (:uuid cohort))
|
||||
blood-serum-kit (tu/get-element-with-name kit-types-list kit-type-name)]
|
||||
(is (= 6 (count kit-types-list)))
|
||||
(is (some? blood-serum-kit))
|
||||
blood-serum-kit))
|
||||
|
||||
(defn list-timepoints-test
|
||||
[kit-type]
|
||||
(let [timepoints-list (tu/get-timepoint-list (:uuid kit-type))]
|
||||
(is (= 7 (count timepoints-list)))))
|
||||
|
||||
(defn list-sample-types-test
|
||||
[kit-type]
|
||||
(let [sample-types-list (tu/get-sample-types-list (:uuid kit-type))]
|
||||
(is (= 14 (count sample-types-list)))))
|
||||
|
||||
(defn list-form-types-test
|
||||
[kit-type]
|
||||
(let [form-types-list (tu/get-form-types-list (:uuid kit-type))]
|
||||
(is (= 1 (count form-types-list)))))
|
||||
|
||||
(deftest list-tests
|
||||
(let [study (list-studies-test "STUDY13")
|
||||
cohort (list-cohorts-test study "N/A")
|
||||
kit-type (list-kit-types-test cohort "STUDY13 Blood-Serum Manifest Form")]
|
||||
(list-sites-test study "CCCC")
|
||||
(list-timepoints-test kit-type)
|
||||
(list-sample-types-test kit-type)
|
||||
(list-form-types-test kit-type)))
|
||||
@@ -0,0 +1,94 @@
|
||||
(ns org.parkerici.sample-tracking.api.propose-edits-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[ring.mock.request :as rm]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]
|
||||
[clojure.edn :as edn]))
|
||||
|
||||
(deftest propose-edit-kit-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
initial-pending-proposed-edits (tu/get-proposed-kit-edit-list {:status "pending"})
|
||||
propose-edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-uuid)
|
||||
(assoc :kit-id "87654321"))
|
||||
_propose-edit-response (tu/site-coordinator-authed-web-app (-> (rm/request :post "/api/kit/propose-edit")
|
||||
(rm/json-body propose-edit-kit-request-body)))
|
||||
pending-proposed-edits (tu/get-proposed-kit-edit-list {:status "pending"})]
|
||||
(is (= 1 (- (count pending-proposed-edits) (count initial-pending-proposed-edits))))))
|
||||
|
||||
(deftest approve-propose-edit-kit-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
propose-edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-uuid)
|
||||
(assoc :kit-id "87654321"))
|
||||
propose-edit-response (tu/site-coordinator-authed-web-app (-> (rm/request :post "/api/kit/propose-edit")
|
||||
(rm/json-body propose-edit-kit-request-body)))
|
||||
propose-edit-uuid (tu/get-response-uuid propose-edit-response)
|
||||
initial-approved-proposed-edits (tu/get-proposed-kit-edit-list {:status "approved"})
|
||||
_set-edit-status-response (tu/admin-authed-web-app (rm/request :post "/api/kit/propose-edit/set-status"
|
||||
{:uuid propose-edit-uuid :status "approved"}))
|
||||
approved-proposed-edits (tu/get-proposed-kit-edit-list {:status "approved"})
|
||||
edited-kit (first (tu/get-kit-list {:uuid created-uuid}))
|
||||
edited-kit-history (tu/get-entity-history created-uuid)]
|
||||
(is (= 1 (- (count approved-proposed-edits) (count initial-approved-proposed-edits))))
|
||||
(is (= (:kit-id propose-edit-kit-request-body) (:kit-id edited-kit)))
|
||||
(is (= 1 (count edited-kit-history)))))
|
||||
|
||||
(deftest deny-propose-edit-kit-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-uuid (tu/get-response-uuid create-response)
|
||||
propose-edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-uuid)
|
||||
(assoc :kit-id "87654321"))
|
||||
propose-edit-response (tu/site-coordinator-authed-web-app (-> (rm/request :post "/api/kit/propose-edit")
|
||||
(rm/json-body propose-edit-kit-request-body)))
|
||||
propose-edit-uuid (tu/get-response-uuid propose-edit-response)
|
||||
initial-approved-proposed-edits (tu/get-proposed-kit-edit-list {:status "denied"})
|
||||
_set-edit-status-response (tu/admin-authed-web-app (rm/request :post "/api/kit/propose-edit/set-status"
|
||||
{:uuid propose-edit-uuid :status "denied"}))
|
||||
denied-proposed-edits (tu/get-proposed-kit-edit-list {:status "denied"})
|
||||
edited-kit (first (tu/get-kit-list {:uuid created-uuid}))
|
||||
edited-kit-history (tu/get-entity-history created-uuid)]
|
||||
(is (= 1 (- (count denied-proposed-edits) (count initial-approved-proposed-edits))))
|
||||
(is (= (:kit-id kit-request-body) (:kit-id edited-kit)))
|
||||
(is (= 0 (count edited-kit-history)))))
|
||||
|
||||
(deftest edit-proposed-edit-test
|
||||
[]
|
||||
(let [kit-request-body (tu/kit-request-body)
|
||||
create-response (tu/standard-web-app (-> (rm/request :post "/api/kit")
|
||||
(rm/json-body kit-request-body)))
|
||||
created-kit-uuid (tu/get-response-uuid create-response)
|
||||
initial-pending-proposed-edits (tu/get-proposed-kit-edit-list {:status "pending"})
|
||||
first-propose-edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-kit-uuid)
|
||||
(assoc :kit-id "87654321"))
|
||||
first-propose-edit-response (tu/site-coordinator-authed-web-app (-> (rm/request :post "/api/kit/propose-edit")
|
||||
(rm/json-body first-propose-edit-kit-request-body)))
|
||||
first-proposed-edit-uuid (tu/get-response-uuid first-propose-edit-response)
|
||||
first-pending-proposed-edits (tu/get-proposed-kit-edit-list {:status "pending"})
|
||||
final-kit-id "12344321"
|
||||
final-propose-edit-kit-request-body (-> kit-request-body
|
||||
(assoc :uuid created-kit-uuid)
|
||||
(assoc :kit-id final-kit-id))
|
||||
final-propose-edit-response (tu/site-coordinator-authed-web-app (-> (rm/request :post "/api/kit/propose-edit")
|
||||
(rm/json-body final-propose-edit-kit-request-body)))
|
||||
final-proposed-edit-uuid (tu/get-response-uuid final-propose-edit-response)
|
||||
final-pending-proposed-edits (tu/get-proposed-kit-edit-list {:status "pending"})
|
||||
final-pending-edits-for-kit (filter #(= created-kit-uuid (:kit-uuid %)) final-pending-proposed-edits)
|
||||
final-pending-edit-update-map (edn/read-string (:update-map (first final-pending-edits-for-kit)))]
|
||||
(is (= 1 (- (count first-pending-proposed-edits) (count initial-pending-proposed-edits))))
|
||||
(is (= first-proposed-edit-uuid final-proposed-edit-uuid))
|
||||
(is (= 0 (- (count first-pending-proposed-edits) (count final-pending-proposed-edits))))
|
||||
(is (= 1 (count final-pending-edits-for-kit)))
|
||||
(is (= (:kit-id final-pending-edit-update-map) final-kit-id))))
|
||||
@@ -0,0 +1,88 @@
|
||||
(ns org.parkerici.sample-tracking.api.set-active-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[ring.mock.request :as rm]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]))
|
||||
|
||||
(defn toggle-study-active-test
|
||||
[study-name]
|
||||
(let [studies-list (tu/get-studies-list)
|
||||
toggling-study (tu/get-element-with-name studies-list study-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid toggling-study) :active "false"})))
|
||||
post-toggle-studies-list (tu/get-studies-list)
|
||||
inactive-study (tu/get-element-with-name post-toggle-studies-list study-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid toggling-study) :active "true"})))
|
||||
reverted-studies-list (tu/get-studies-list)
|
||||
reactivated-study (tu/get-element-with-name reverted-studies-list study-name)]
|
||||
(is (= 4 (count studies-list)))
|
||||
(is (= 3 (count post-toggle-studies-list)))
|
||||
(is (= 4 (count reverted-studies-list)))
|
||||
(is (some? toggling-study))
|
||||
(is (nil? inactive-study))
|
||||
(is (some? reactivated-study))
|
||||
toggling-study))
|
||||
|
||||
(defn toggle-site-active-test
|
||||
[study site-name]
|
||||
(let [sites-list (tu/get-sites-list (:uuid study))
|
||||
toggling-site (tu/get-element-with-name sites-list site-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid study) :site (:uuid toggling-site) :active "false"})))
|
||||
post-toggle-sites-list (tu/get-sites-list (:uuid study))
|
||||
inactive-site (tu/get-element-with-name post-toggle-sites-list site-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid study) :site (:uuid toggling-site) :active "true"})))
|
||||
reverted-sites-list (tu/get-sites-list (:uuid study))
|
||||
reverted-site (tu/get-element-with-name reverted-sites-list site-name)]
|
||||
(is (= 4 (count sites-list)))
|
||||
(is (= 3 (count post-toggle-sites-list)))
|
||||
(is (= 4 (count reverted-sites-list)))
|
||||
(is (some? toggling-site))
|
||||
(is (nil? inactive-site))
|
||||
(is (some? reverted-site))))
|
||||
|
||||
(defn toggle-cohort-active-test
|
||||
[study cohort-name]
|
||||
(let [cohorts-list (tu/get-cohorts-list (:uuid study))
|
||||
toggling-cohort (tu/get-element-with-name cohorts-list cohort-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid study) :cohort (:uuid toggling-cohort) :active "false"})))
|
||||
post-toggle-cohorts-list (tu/get-cohorts-list (:uuid study))
|
||||
inactive-cohort (tu/get-element-with-name post-toggle-cohorts-list cohort-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:study (:uuid study) :cohort (:uuid toggling-cohort) :active "true"})))
|
||||
reverted-cohorts-list (tu/get-cohorts-list (:uuid study))
|
||||
reverted-cohort (tu/get-element-with-name reverted-cohorts-list cohort-name)]
|
||||
(is (= 1 (count cohorts-list)))
|
||||
(is (= 0 (count post-toggle-cohorts-list)))
|
||||
(is (= 1 (count reverted-cohorts-list)))
|
||||
(is (some? toggling-cohort))
|
||||
(is (nil? inactive-cohort))
|
||||
(is (some? reverted-cohort))
|
||||
toggling-cohort))
|
||||
|
||||
(defn toggle-kit-type-active-test
|
||||
[cohort kit-type-name]
|
||||
(let [kit-types-list (tu/get-kit-types-list (:uuid cohort))
|
||||
toggling-kit-type (tu/get-element-with-name kit-types-list kit-type-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:kit-type (:uuid toggling-kit-type) :cohort (:uuid cohort) :active "false"})))
|
||||
post-toggle-kit-types-list (tu/get-kit-types-list (:uuid cohort))
|
||||
inactive-kit-type (tu/get-element-with-name post-toggle-kit-types-list kit-type-name)
|
||||
_ (tu/admin-authed-web-app (-> (rm/request :post "/api/set-active")
|
||||
(rm/json-body {:kit-type (:uuid toggling-kit-type) :cohort (:uuid cohort) :active "true"})))
|
||||
reverted-kit-types-list (tu/get-kit-types-list (:uuid cohort))
|
||||
reverted-kit-type (tu/get-element-with-name reverted-kit-types-list kit-type-name)]
|
||||
(is (= 6 (count kit-types-list)))
|
||||
(is (= 5 (count post-toggle-kit-types-list)))
|
||||
(is (= 6 (count reverted-kit-types-list)))
|
||||
(is (some? toggling-kit-type))
|
||||
(is (nil? inactive-kit-type))
|
||||
(is (some? reverted-kit-type))))
|
||||
|
||||
(deftest set-active-tests
|
||||
(let [study (toggle-study-active-test "STUDY13")
|
||||
cohort (toggle-cohort-active-test study "N/A")]
|
||||
(toggle-site-active-test study "CCCC")
|
||||
(toggle-kit-type-active-test cohort "STUDY13 Blood-Serum Manifest Form")))
|
||||
13
test/clj/org/parkerici/sample_tracking/schema_test.clj
Normal file
13
test/clj/org/parkerici/sample_tracking/schema_test.clj
Normal file
@@ -0,0 +1,13 @@
|
||||
(ns org.parkerici.sample-tracking.schema-test
|
||||
(:require [clojure.test :refer :all]
|
||||
[org.parkerici.sample-tracking.db.schema :as sc]
|
||||
[org.parkerici.alzabo.schema :as alz]
|
||||
[org.parkerici.sample-tracking.test-utils :as tu]))
|
||||
|
||||
(deftest validate-schema
|
||||
;; will throw error if invalid
|
||||
(alz/validate-schema sc/schema))
|
||||
|
||||
(deftest test-datomic-schema
|
||||
(tu/with-datomic-context
|
||||
(sc/transact-schema)))
|
||||
165
test/clj/org/parkerici/sample_tracking/test_utils.clj
Normal file
165
test/clj/org/parkerici/sample_tracking/test_utils.clj
Normal file
@@ -0,0 +1,165 @@
|
||||
(ns org.parkerici.sample-tracking.test-utils
|
||||
(:require [ring.mock.request :as rm]
|
||||
[cheshire.core :as json]
|
||||
[org.parkerici.sample-tracking.db.datomic :as d]
|
||||
[org.parkerici.sample-tracking.handler :as handlers]
|
||||
[org.parkerici.sample-tracking.configuration :as config]))
|
||||
|
||||
(defmacro with-datomic-context [& body]
|
||||
`(d/wrap-datomic-fn (fn [] ~@body)))
|
||||
|
||||
(def standard-web-app (handlers/make-app {:disable-logger true}))
|
||||
|
||||
(defn admin-auth-wrapper
|
||||
[handler]
|
||||
(fn [request]
|
||||
(handler (let [current-session (:session request)
|
||||
updated-session (merge current-session
|
||||
{:identity "test@example.com"
|
||||
:roles (set [(config/application-admin-role)])
|
||||
:is-a-user true
|
||||
:email-verified true})]
|
||||
(assoc request :session updated-session)))))
|
||||
|
||||
(def admin-authed-web-app (handlers/make-app {:auth-wrapper admin-auth-wrapper :disable-logger true}))
|
||||
|
||||
(defn site-coordinator-auth-wrapper
|
||||
[handler]
|
||||
(fn [request]
|
||||
(handler (let [current-session (:session request)
|
||||
updated-session (merge current-session
|
||||
{:identity "test@example.com"
|
||||
:roles (set [(config/site-coordinator-role)])
|
||||
:is-a-user true
|
||||
:email-verified true})]
|
||||
(assoc request :session updated-session)))))
|
||||
|
||||
(def site-coordinator-authed-web-app (handlers/make-app {:auth-wrapper admin-auth-wrapper :disable-logger true}))
|
||||
|
||||
(defn get-element-with-name
|
||||
[list name]
|
||||
(first (filter #(= (:name %) name) list)))
|
||||
|
||||
(defn get-response-items
|
||||
[response]
|
||||
(get-in (json/parse-string (:body response) true) [:data :items]))
|
||||
|
||||
(defn get-response-uuid
|
||||
[response]
|
||||
(get-in (json/parse-string (:body response) true) [:data :uuid]))
|
||||
|
||||
(defn get-studies-list
|
||||
[]
|
||||
(let [studies-response (standard-web-app (rm/request :get "/api/study" {:active "true"}))]
|
||||
(get-response-items studies-response)))
|
||||
|
||||
(defn get-study-by-name
|
||||
[study-name]
|
||||
(let [studies-list (get-studies-list)]
|
||||
(get-element-with-name studies-list study-name)))
|
||||
|
||||
(defn get-sites-list
|
||||
[study-uuid]
|
||||
(let [sites-response (standard-web-app (rm/request :get "/api/site" {:study study-uuid :active "true"}))]
|
||||
(get-response-items sites-response)))
|
||||
|
||||
(defn get-site-by-name
|
||||
[study-uuid site-name]
|
||||
(let [sites-list (get-sites-list study-uuid)]
|
||||
(get-element-with-name sites-list site-name)))
|
||||
|
||||
(defn get-cohorts-list
|
||||
[study-uuid]
|
||||
(let [cohorts-response (standard-web-app (rm/request :get "/api/cohort" {:study study-uuid :active "true"}))]
|
||||
(get-response-items cohorts-response)))
|
||||
|
||||
(defn get-cohort-by-name
|
||||
[study-uuid cohort-name]
|
||||
(let [cohorts-list (get-cohorts-list study-uuid)]
|
||||
(get-element-with-name cohorts-list cohort-name)))
|
||||
|
||||
(defn get-kit-types-list
|
||||
[cohort-uuid]
|
||||
(let [kit-types-response (standard-web-app (rm/request :get "/api/kit-type" {:cohort cohort-uuid :active "true"}))]
|
||||
(get-response-items kit-types-response)))
|
||||
|
||||
(defn get-kit-type-by-name
|
||||
[cohort-uuid kit-type-name]
|
||||
(let [kit-types-list (get-kit-types-list cohort-uuid)]
|
||||
(get-element-with-name kit-types-list kit-type-name)))
|
||||
|
||||
(defn get-timepoint-list
|
||||
[kit-type-uuid]
|
||||
(let [timepoints-response (standard-web-app (rm/request :get "/api/timepoint" {:kit-type kit-type-uuid}))]
|
||||
(get-response-items timepoints-response)))
|
||||
|
||||
(defn get-timepoint-by-name
|
||||
[kit-type-uuid timepoint-name]
|
||||
(let [timepoint-list (get-timepoint-list kit-type-uuid)]
|
||||
(get-element-with-name timepoint-list timepoint-name)))
|
||||
|
||||
(defn get-sample-types-list
|
||||
[kit-type-uuid]
|
||||
(let [sample-types-response (standard-web-app (rm/request :get "/api/sample-type" {:kit-type kit-type-uuid}))]
|
||||
(get-response-items sample-types-response)))
|
||||
|
||||
(defn get-form-types-list
|
||||
[kit-type-uuid]
|
||||
(let [form-types-response (standard-web-app (rm/request :get "/api/form-type-fields" {:kit-type kit-type-uuid}))]
|
||||
(get-response-items form-types-response)))
|
||||
|
||||
(defn get-kit-list
|
||||
[params]
|
||||
(let [kit-response (admin-authed-web-app (rm/request :get "/api/kit" params))]
|
||||
(get-response-items kit-response)))
|
||||
|
||||
(defn get-proposed-kit-edit-list
|
||||
[params]
|
||||
(let [kit-response (admin-authed-web-app (rm/request :get "/api/kit/propose-edit/list" params))]
|
||||
(get-response-items kit-response)))
|
||||
|
||||
(defn get-entity-history
|
||||
[uuid]
|
||||
(get-response-items (admin-authed-web-app (rm/request :get "/api/history" {:uuid uuid}))))
|
||||
|
||||
(defn get-sample-type-with-suffix
|
||||
[sample-types suffix]
|
||||
(first (filter #(= (:id-suffix %) suffix) sample-types)))
|
||||
|
||||
(defn build-create-sample-map
|
||||
[sample-types]
|
||||
(let [a01 (get-sample-type-with-suffix sample-types "-A01")
|
||||
a02 (get-sample-type-with-suffix sample-types "-A02")
|
||||
a12 (get-sample-type-with-suffix sample-types "-A12")]
|
||||
{(keyword (:uuid a01)) {:collected true :sample-id "12345678-A01"}
|
||||
(keyword (:uuid a02)) {:collected true :sample-id "BAZ-BAT"}
|
||||
(keyword (:uuid a12)) {:collected true :shipped true :sample-id "12345678-A12"}}))
|
||||
|
||||
(defn build-create-request-body
|
||||
[study site cohort kit-type timepoint sample-types]
|
||||
{:study (:uuid study)
|
||||
:site (:uuid site)
|
||||
:cohort (:uuid cohort)
|
||||
:kit-type (:uuid kit-type)
|
||||
:timepoints [(:uuid timepoint)]
|
||||
:samples (build-create-sample-map sample-types)
|
||||
:kit-id "12345678"
|
||||
:participant-id "STUDY13-101-0011"
|
||||
:air-waybill "123456789012"
|
||||
:completing-first-name "Foo"
|
||||
:completing-last-name "Bar"
|
||||
:completing-email "test@example.com"
|
||||
:collection-timestamp "2020-12-01T21:13:00.000Z"
|
||||
:timezone "America/Los_Angeles"
|
||||
:comments "Comments go here"
|
||||
:form-type-field-values {:processing-time "2020-12-01T22:14:00.000Z"}})
|
||||
|
||||
(defn kit-request-body
|
||||
[]
|
||||
(let [study (get-study-by-name "STUDY13")
|
||||
site (get-site-by-name (:uuid study) "CCCC")
|
||||
cohort (get-cohort-by-name (:uuid study) "N/A")
|
||||
kit-type (get-kit-type-by-name (:uuid cohort) "STUDY13 Blood-Serum Manifest Form")
|
||||
timepoint (get-timepoint-by-name (:uuid kit-type) "BL")
|
||||
sample-types (get-sample-types-list (:uuid kit-type))]
|
||||
(build-create-request-body study site cohort kit-type timepoint sample-types)))
|
||||
Reference in New Issue
Block a user