got integration tests more or less working
This commit is contained in:
2382
package-lock.json
generated
2382
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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]}}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
|
||||
: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
|
||||
noop-rule
|
||||
#{})]
|
||||
(println (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
|
||||
{}))
|
||||
(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
|
||||
: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
|
||||
noop-rule
|
||||
#{})]
|
||||
(let [[result] (:import (sut/transactions->txs [(assoc base-transaction
|
||||
:description {:original "CHECK 10001"
|
||||
:simple ""}
|
||||
:amount {:amount 30.0}
|
||||
: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
|
||||
: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
|
||||
noop-rule
|
||||
#{})]
|
||||
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
|
||||
:date "2021-07-03"
|
||||
: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
|
||||
: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
|
||||
noop-rule
|
||||
#{})]
|
||||
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
|
||||
:date "2021-07-13"
|
||||
: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
|
||||
: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
|
||||
noop-rule
|
||||
#{})]
|
||||
(let [[[transaction-result]] (:import (sut/transactions->txs [(assoc base-transaction
|
||||
:date "2021-07-03"
|
||||
: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
|
||||
: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
|
||||
(rm/rule-applying-fn [{:transaction-rule/description "XXX039"
|
||||
:transaction-rule/transaction-approval-status :transaction-approval-status/approved}])
|
||||
#{})]
|
||||
[[transaction-tx]] (:import (sut/transactions->txs [(assoc base-transaction
|
||||
:description {:original "Hello XXX039"
|
||||
:simple ""}
|
||||
:amount {:amount 31.0}
|
||||
: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)))))
|
||||
|
||||
Reference in New Issue
Block a user