Files
integreat/test/clj/auto_ap/integration/graphql/clients.clj

92 lines
5.2 KiB
Clojure

(ns auto-ap.integration.graphql.clients
(:require
[auto-ap.time-reader]
[auto-ap.datomic :refer [conn pull-attr]]
[auto-ap.graphql.clients :as sut]
[auto-ap.integration.util :refer [wrap-setup user-token admin-token]]
[datomic.api :as dc]
[clojure.test :as t :refer [deftest is testing use-fixtures]]))
(use-fixtures :each wrap-setup)
(deftest upsert-client
(testing "Should create a new client"
(let [create-client-request {:code "TEST"
:name "Test Co"
:matches ["Test Company"]
:email "hello@hi.com"
:locked_until #clj-time/date-time "2022-01-01"
:locations ["DT"]
:week_a_debits 1000.0
:week_a_credits 2000.0
:week_b_debits 3000.0
:week_b_credits 9000.0
:location_matches [{:location "DT"
:match "DOWNTOWN"}]
:address {:street1 "hi street"
:street2 "downtown"
:city "seattle"
:state "wa"
:zip "1238"}
:feature_flags ["new-square"]
:bank_accounts [{:code "TEST-1"
:bank_name "Bank of America"
:bank_code "BANKCODE"
:start_date #clj-time/date-time "2022-01-01"
:routing "1235"
:include_in_reports true
:name "Bank of Am Check"
:visible true
:number "1000"
:check_number 1001
:numeric_code 12001
:sort_order 1
:locations ["DT"]
:use_date_instead_of_post_date? false
:type :cash}]
}
create-result (sut/edit-client {:id (admin-token)} {:edit_client create-client-request} nil)]
(is (some? (-> create-result :id)))
(is (some? (-> create-result :bank_accounts first :id)))
(is (= (set (keys create-client-request)) (disj (set (keys create-result))
:square_integration_status :yodlee_provider_accounts :plaid_items :id)))
(testing "Should be able to retrieve created client"
(let [created-client (sut/get-admin-client {:id (admin-token)} {:id (:id create-result)} nil)]
(is (some? (-> created-client :id)))
(is (some? (-> created-client :bank_accounts first :id)))
(is (= (set (keys create-client-request)) (disj (set (keys created-client))
:square_integration_status :yodlee_provider_accounts :plaid_items :id)))))
(testing "Should edit an existing client"
(let [edit-result (sut/edit-client {:id (admin-token)} {:edit_client {:id (:id create-result)
:name "New Company Name"
:code "TEST"}} nil)]
(is (some? (:id edit-result)))
(is (= "New Company Name" (:name edit-result)))))
(testing "Should support removing collections"
(let [edit-result (sut/edit-client {:id (admin-token)} {:edit_client {:id (:id create-result)
:matches []
:location_matches []
:feature_flags []}}
nil)]
(is (some? (:id edit-result)))
(is (seq (:location_matches create-result)))
(is (not (seq (:location_matches edit-result))))
(is (seq (:matches create-result)))
(is (not (seq (:matches edit-result))))
(is (seq (:feature_flags create-result)))
(is (not (seq (:feature_flags edit-result))))
))
))
(testing "Only admins can create clients"
(is (thrown? Exception (sut/edit-client {:id (user-token)} {:edit_client {:code "INVALID"}} nil)))))