got integration tests more or less working

This commit is contained in:
Bryce Covert
2021-12-21 12:33:34 -08:00
parent 563e1c51ff
commit a7c9d376bc
5 changed files with 132 additions and 2464 deletions

2382
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -303,8 +303,8 @@
:db/doc "Whether to include this bank account in balance sheet, etc."
:db/valueType :db.type/boolean
:db/cardinality :db.cardinality/one}]]
:depends-on [:auto-ap/add-manager-schema]}
:auto-ap/migrate-include-in-reports {:txes-fn `add-include-in-reports :depends-on [:auto-ap/add-include-in-reports1] }
:requires [:auto-ap/add-manager-schema]}
:auto-ap/migrate-include-in-reports {:txes-fn `add-include-in-reports :requires [:auto-ap/add-include-in-reports1] }
:auto-ap/add-forecasted-transaction-match {:txes [[{:db/ident :transaction/forecast-match
:db/doc "Which forecast this transaction matches, for cashflow"
:db/valueType :db.type/ref
@@ -356,13 +356,14 @@
:db/cardinality :db.cardinality/one}]]}
:auto-ap/add-power-user-schema {:txes [[{:db/ident :user-role/power-user}]]}
:auto-ap/add-transaction-date-index {:txes [[{:db/ident :transaction/date
:db/index true}]]}
:db/index true}]]
:requires [:auto-ap/add-general-ledger6]}
:auto-ap/add-invoice-index {:txes [[{:db/ident :invoice/invoice-number
:db/index true}]]
:depends-on [:auto-ap/base-schema]}
:requires [:auto-ap/base-schema]}
:auto-ap/add-propose-invoice {:txes-fn `propose-invoice-fn
:depends-on [:auto-ap/base-schema]}
:requires [:auto-ap/base-schema]}
:auto-ap/add-intuit-banks-4 {:txes [[{:db/ident :intuit-bank-account/external-id
:db/doc "Id of the intui bank"
:db/valueType :db.type/string
@@ -381,7 +382,7 @@
:db/doc "An unhashed version of the id"
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}]]
:depends-on [:auto-ap/base-schema]}
:requires [:auto-ap/add-general-ledger6]}
:auto-ap/add-transaction-import2 {:txes [[{:db/ident :import-batch/external-id
:db/doc "An identifier for the import batch"
:db/valueType :db.type/string
@@ -425,11 +426,11 @@
:db/doc "Who triggred this import"
:db/valueType :db.type/string
:db/cardinality :db.cardinality/one}]]
:depends-on [:auto-ap/base-schema]}
:requires [:auto-ap/add-general-ledger6]}
:auto-ap/add-suppression {:txes [[{:db/ident :transaction-approval-status/suppressed}
{:db/ident :transaction/approval-status
:db/index true}]]
:depends-on [:auto-ap/base-schema]}}
:requires [:auto-ap/add-transaction-rules]}}

View File

@@ -2,7 +2,7 @@
(:require
[auto-ap.datomic
:refer [add-sorter-fields apply-pagination apply-sort-3 conn merge-query]]
[auto-ap.graphql.utils :refer [assert-admin assert-present]]
[auto-ap.graphql.utils :refer [assert-admin assert-present <-graphql ->graphql]]
[auto-ap.plaid.core :as p]
[clj-time.coerce :as coerce]
[clj-time.core :as time]

View File

@@ -34,7 +34,6 @@
start (time/plus end (time/days -30))
_ (log/infof "importing from %s to %s for %s" start end external-id)
transactions (p/get-transactions access-token external-id start end)
_ (clojure.pprint/pprint transactions)
transactions (->> transactions
:transactions
(filter (fn [t]

View File

@@ -2,7 +2,7 @@
(:require [auto-ap.yodlee.import :as sut]
[auto-ap.yodlee.core :as c]
[datomic.api :as d]
[auto-ap.datomic :refer [uri]]
[auto-ap.datomic :refer [uri conn]]
[auto-ap.rule-matching :as rm]
[auto-ap.datomic.migrate :as m]
[clojure.test :as t]
@@ -40,8 +40,8 @@
:client/_bank-accounts {:db/id 123
:client/locations ["Z" "E"]}}})
(t/deftest do-import
(t/testing "Should import single transaction"
(t/deftest add-transactions
(t/testing "Should import and code transactions"
(let [[result] (sut/transactions->txs [base-transaction]
:bank-account
noop-rule
@@ -58,33 +58,75 @@
:raw-id "1"
:approval-status :transaction-approval-status/unapproved
:description-simple "simple-description"}]
result)))))
(t/deftest do-import
(t/testing "Should import single transaction"
(println "HER")
(let [{:strs [bank-account-id client-id]} (:tempids @(d/transact conn [{:db/id "bank-account-id"
:bank-account/code "TEST-1"}
{:db/id "client-id"
:client/code "TEST"
:client/locations ["Z" "E"]
:client/bank-accounts ["bank-account-id"]}]))
result (sut/transactions->txs [base-transaction]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
(t/is (= {:import [[#:transaction {:amount -12.0
:date #inst "2014-01-02T08:00:00.000-00:00"
:bank-account bank-account-id
:client client-id
:post-date #inst "2014-01-04T08:00:00.000-00:00"
:account-id 1234
:description-original "original-description"
:status "POSTED"
:id "6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"
:raw-id "1"
:approval-status :transaction-approval-status/unapproved
:description-simple "simple-description"
:import-batch/_entry 1}]]}
result))))
(t/testing "Should exclude a transaction before start date"
(let [result (sut/transactions->txs [(assoc-in base-transaction
[:bank-account :start-date]
(clj-time.coerce/to-date-time #inst "2020-01-01"))]
:bank-account
(let [{:strs [bank-account-id client-id]} (:tempids @(d/transact conn [{:db/id "bank-account-id"
:bank-account/code "TEST-1"
:bank-account/start-date #inst "2030-01-01"}
{:db/id "client-id"
:client/code "TEST"
:client/locations ["Z" "E"]
:client/bank-accounts ["bank-account-id"]}]))
result (sut/transactions->txs [(assoc base-transaction :date "2020-05-01")]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
(t/is (= []
result))))
(t/is (= 1 (count (:not-ready result))))))
(t/testing "Should not reimport an existing transaction"
(let [result (sut/transactions->txs [base-transaction]
:bank-account
(let [{:strs [bank-account-id client-id]} (:tempids @(d/transact conn [{:db/id "bank-account-id"
:bank-account/code "TEST-1"
:bank-account/start-date #inst "2030-01-01"}
{:db/id "client-id"
:client/code "TEST"
:client/locations ["Z" "E"]
:client/bank-accounts ["bank-account-id"]}]))
result (sut/transactions->txs [(assoc base-transaction :id "123")]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b"})]
(t/is (= []
result))))
{(digest/sha-256 "123") :transaction-approval-status/unapproved})]
(t/is (= 1 (count (:extant result))))))
(t/testing "Should skip transaction if no client is found"
(let [result (sut/transactions->txs [(assoc base-transaction :bank-account nil)]
:bank-account
(let [result (sut/transactions->txs [base-transaction]
(d/entity (d/db conn) 1238970123)
1
noop-rule
#{})]
(t/is (= [] result))))
{})]
(t/is (= 1 (count (:error result))))))
(t/testing "Should match an uncleared check"
(let [{:strs [bank-account-id client-id payment-id]} (->> [#:payment {:status :payment-status/pending
@@ -104,16 +146,22 @@
:tempids)]
(let [[[transaction-result]] (sut/transactions->txs [(assoc base-transaction
(println (sut/transactions->txs [(assoc base-transaction
:description {:original "CHECK 10001"
:simple ""}
:amount {:amount 30.0}
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["A"]}})]
:bank-account
:amount {:amount 30.0})]
(d/entity (d/db conn ) bank-account-id)
1
noop-rule
#{})]
{}))
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
:description {:original "CHECK 10001"
:simple ""}
:amount {:amount 30.0})]
(d/entity (d/db conn ) bank-account-id)
1
noop-rule
{}))]
(t/is (= {:db/id payment-id
:payment/status :payment-status/cleared}
@@ -121,17 +169,15 @@
(t/testing "Should not match an already matched check"
@(d/transact (d/connect uri) [{:db/id payment-id :payment/status :payment-status/cleared}])
(let [[result] (sut/transactions->txs [(assoc base-transaction
(let [[result] (:import (sut/transactions->txs [(assoc base-transaction
:description {:original "CHECK 10001"
:simple ""}
:amount {:amount 30.0}
:id 789
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["A"]}})]
:bank-account
:id 789)]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
{}))]
(t/is (= nil
(:transaction/payment result)))))))
@@ -155,15 +201,13 @@
(t/testing "Should match within 10 days"
(let [[[transaction-result]] (sut/transactions->txs [(assoc base-transaction
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
:date "2021-07-03"
:amount {:amount -100.0}
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["MF"]}})]
:bank-account
:amount {:amount -100.0})]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
#{}))]
(t/is (= expected-deposit-id
(sut/find-expected-deposit client-id 100.0 (clj-time.coerce/to-date-time #inst "2021-07-03T00:00:00-08:00"))))
@@ -172,27 +216,23 @@
(:transaction/expected-deposit transaction-result)))))
(t/testing "Should not match old expected deposits"
(let [[[transaction-result]] (sut/transactions->txs [(assoc base-transaction
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
:date "2021-07-13"
:amount {:amount -100.0}
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["MF"]}})]
:bank-account
:amount {:amount -100.0})]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
{}))]
(t/is (not (:transaction/expected-deposit transaction-result)))))
(t/testing "Should only match exact."
(let [[[transaction-result]] (sut/transactions->txs [(assoc base-transaction
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
:date "2021-07-03"
:amount {:amount -100.01}
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["MF"]}})]
:bank-account
:amount {:amount -100.01})]
(d/entity (d/db conn) bank-account-id)
1
noop-rule
#{})]
{}))]
(t/is (not (:transaction/expected-deposit transaction-result)))))))
#_(t/testing "Auto-pay Invoices"
@@ -304,18 +344,16 @@
(d/transact (d/connect uri))
deref
:tempids)
[[transaction-tx]] (sut/transactions->txs [(assoc base-transaction
[[transaction-tx]] (:import (sut/transactions->txs [(assoc base-transaction
:description {:original "Hello XXX039"
:simple ""}
:amount {:amount 31.0}
:id 789
:bank-account {:db/id bank-account-id
:client/_bank-accounts {:db/id client-id
:client/locations ["A"]}})]
:bank-account
:id 789)]
(d/entity (d/db conn) bank-account-id)
1
(rm/rule-applying-fn [{:transaction-rule/description "XXX039"
:transaction-rule/transaction-approval-status :transaction-approval-status/approved}])
#{})]
#{}))]
(t/is (= :transaction-approval-status/approved
(:transaction/approval-status transaction-tx)))))