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

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