From ff8d7177d1c2a3cd02594d96fce8ecd3f16e18d0 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Wed, 12 Jan 2022 20:53:34 -0800 Subject: [PATCH] adding tests. --- test/clj/auto_ap/routes/invoice_test.clj | 96 +++++++++++++++++++++++ test/clj/auto_ap/routes/invoices_test.clj | 3 + 2 files changed, 99 insertions(+) create mode 100644 test/clj/auto_ap/routes/invoice_test.clj create mode 100644 test/clj/auto_ap/routes/invoices_test.clj diff --git a/test/clj/auto_ap/routes/invoice_test.clj b/test/clj/auto_ap/routes/invoice_test.clj new file mode 100644 index 00000000..60e22d60 --- /dev/null +++ b/test/clj/auto_ap/routes/invoice_test.clj @@ -0,0 +1,96 @@ +(ns auto-ap.routes.invoices-test + (:require + [auto-ap.datomic :refer [uri conn]] + [auto-ap.datomic.migrate :as m] + [auto-ap.routes.invoices :as sut] + [clojure.test :as t] + [datomic.api :as d] + [clj-time.coerce :as coerce])) + +(defn wrap-setup + [f] + (with-redefs [auto-ap.datomic/uri "datomic:mem://datomic-transactor:4334/invoice"] + (d/create-database uri) + (with-redefs [auto-ap.datomic/conn (d/connect uri)] + (m/migrate auto-ap.datomic/conn) + (f) + (d/release auto-ap.datomic/conn) + (d/delete-database uri)))) + +(t/use-fixtures :each wrap-setup) + +(def user {:user/role "admin" + :user/name "Bryce"}) + +(def client {:client/code "ABC" + :client/name "ABC" + :client/locations "MH"}) + +(def vendor {:vendor/name "Sysco" + :vendor/default-account "expense-account"}) + +(def expense-account {:db/id "expense-account" + :account/type :account-type/expense + :account/name "Food"}) + +(defn invoice-count-for-client [c] + (or + (first (first (d/q '[:find (count ?i) + :in $ ?c + :where [?i :invoice/client ?c]] + (d/db conn) c))) + 0)) + +(def invoice {:customer-identifier "ABC" + :date (coerce/to-date-time #inst "2021-01-01") + :invoice-number "123" + :vendor-code "Sysco" + :total "123.45"}) + +(t/deftest import-uploaded-invoices + (t/testing "It should import one" + @(d/transact conn [client expense-account vendor]) + + (t/is (= 0 (invoice-count-for-client [:client/code "ABC"]))) + (sut/import-uploaded-invoice user [(assoc invoice :customer-identifier "ABC")]) + + (t/is (= 1 (invoice-count-for-client [:client/code "ABC"])))) + + (t/testing "Should only import the same invoice once" + (t/is (thrown? Exception (sut/import-uploaded-invoice user [(assoc invoice :customer-identifier "ABC")]))) + + + (t/is (thrown? Exception (sut/import-uploaded-invoice user [(assoc invoice + :customer-identifier "ABC" + :total "456.32")])))) + + (t/testing "Should override location" + (sut/import-uploaded-invoice user [(assoc invoice + :location-override "DE" + :customer-identifier "ABC" + :invoice-number "789")]) + (t/is (= ["DE"] (d/q '[:find [?l ...] + :where [?i :invoice/invoice-number "789"] + [?i :invoice/expense-accounts ?ea] + [?ea :invoice-expense-account/location ?l]] + (d/db conn))))) + + (t/testing "Should code invoice" + (let [{{:strs [my-default-account coded-vendor]} :tempids} @(d/transact conn [{:vendor/name "Coded" + :db/id "coded-vendor" + :vendor/terms 12 + :vendor/default-account "my-default-account"} + {:db/id "my-default-account" + :account/name "My default-account"}])] + (sut/import-uploaded-invoice user [(assoc invoice + :invoice-number "456" + :customer-identifier "ABC" + :vendor-code "Coded")]) + (let [[result] (d/q '[:find [(pull ?i [*]) ...] + :where [?i :invoice/invoice-number "456"]] + (d/db conn))] + (t/is (= coded-vendor (:db/id (:invoice/vendor result)))) + (t/is (= [my-default-account] + (map (comp :db/id :invoice-expense-account/account) (:invoice/expense-accounts result)))) + (t/is (:invoice/due result)))))) + diff --git a/test/clj/auto_ap/routes/invoices_test.clj b/test/clj/auto_ap/routes/invoices_test.clj new file mode 100644 index 00000000..37e2b1aa --- /dev/null +++ b/test/clj/auto_ap/routes/invoices_test.clj @@ -0,0 +1,3 @@ +(ns auto-ap.routes.invoice-test + (:require [clojure.test :as t])) +