First commit. Taken from open source branch of internal sample-tracking application.

This commit is contained in:
Robert Schiemann
2023-03-08 10:11:42 -07:00
parent fa491f63de
commit fe0946c53a
220 changed files with 15808 additions and 0 deletions

View 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))))))

View 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)))))

View 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)))

View File

@@ -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))))

View File

@@ -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")))