got integration tests more or less working
This commit is contained in:
@@ -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