Migrates back to datomic on-prem

This commit is contained in:
2023-04-29 07:12:51 -07:00
parent aca8f7c92c
commit b2ad7790cf
88 changed files with 2289 additions and 2286 deletions

View File

@@ -4,7 +4,7 @@
[auto-ap.import.transactions :as sut]
[auto-ap.integration.util :refer [wrap-setup]]
[iol-ion.tx :refer [upsert-transaction]]
[datomic.client.api :as dc]
[datomic.api :as dc]
[clj-time.coerce :as coerce]
[clojure.test :as t]
[digest :as di]))
@@ -78,12 +78,12 @@
(t/testing "Should import and code transactions"
(t/testing "Should import one transaction"
(let [{:strs [bank-account-id client-id]} (:tempids (dc/transact conn
{:tx-data [{: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"]}]}))
[{: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/transaction->txs base-transaction
(dc/pull (dc/db conn) sut/bank-account-pull bank-account-id)
noop-rule)]
@@ -94,18 +94,18 @@
result))))
(t/testing "Should match an uncleared check"
(let [{:strs [bank-account-id payment-id]} (->> {:tx-data [#:payment {:status :payment-status/pending
:date #inst "2019-01-01"
:bank-account "bank-account-id"
:client "client-id"
:check-number 10001
:amount 30.0
:db/id "payment-id"}
#:bank-account {:name "Bank account"
:db/id "bank-account-id"}
#:client {:name "Client"
:db/id "client-id"
:bank-accounts ["bank-account-id"]}]}
(let [{:strs [bank-account-id payment-id]} (->> [#:payment {:status :payment-status/pending
:date #inst "2019-01-01"
:bank-account "bank-account-id"
:client "client-id"
:check-number 10001
:amount 30.0
:db/id "payment-id"}
#:bank-account {:name "Bank account"
:db/id "bank-account-id"}
#:client {:name "Client"
:db/id "client-id"
:bank-accounts ["bank-account-id"]}]
(dc/transact conn)
:tempids)]
@@ -132,7 +132,7 @@
(:transaction/payment transaction-result)))))
(t/testing "Should not match an already matched check"
(dc/transact conn {:tx-data [{:db/id payment-id :payment/status :payment-status/cleared}]})
(dc/transact conn [{:db/id payment-id :payment/status :payment-status/cleared}])
(let [result (sut/transaction->txs (assoc base-transaction
:transaction/description-original "CHECK 10001"
:transaction/amount -30.0)
@@ -144,19 +144,19 @@
(t/testing "Should match expected-deposits"
(let [{:strs [bank-account-id client-id expected-deposit-id]} (->> {:tx-data [#:expected-deposit {:client "client-id"
:date #inst "2021-07-01T00:00:00-08:00"
:vendor :vendor/ccp-square
:total 100.0
:location "MF"
:status :expected-deposit-status/pending
:db/id "expected-deposit-id"}
#:bank-account {:name "Bank account"
:db/id "bank-account-id"}
#:client {:name "Client"
:db/id "client-id"
:locations ["MF"]
:bank-accounts ["bank-account-id"]}]}
(let [{:strs [bank-account-id client-id expected-deposit-id]} (->> [#:expected-deposit {:client "client-id"
:date #inst "2021-07-01T00:00:00-08:00"
:vendor :vendor/ccp-square
:total 100.0
:location "MF"
:status :expected-deposit-status/pending
:db/id "expected-deposit-id"}
#:bank-account {:name "Bank account"
:db/id "bank-account-id"}
#:client {:name "Client"
:db/id "client-id"
:locations ["MF"]
:bank-accounts ["bank-account-id"]}]
(dc/transact conn)
:tempids)]
@@ -250,21 +250,21 @@
(t/deftest match-transaction-to-single-unfulfilled-payments
(t/testing "Auto-pay Invoices"
(let [{:strs [vendor1-id vendor2-id]} (->> {:tx-data [#:vendor {:name "Autopay vendor 1"
:db/id "vendor1-id"}
#:vendor {:name "Autopay vendor 2"
:db/id "vendor2-id"}]}
(let [{:strs [vendor1-id vendor2-id]} (->> [#:vendor {:name "Autopay vendor 1"
:db/id "vendor1-id"}
#:vendor {:name "Autopay vendor 2"
:db/id "vendor2-id"}]
(dc/transact conn)
:tempids)]
(t/testing "Should find a single invoice that matches exactly"
(let [{:strs [client-id]} (->> {:tx-data [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
@@ -272,14 +272,13 @@
))
(t/testing "Should not match paid invoice that isn't a scheduled payment"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice{:status :invoice-status/paid
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice{:status :invoice-status/paid
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
@@ -287,15 +286,14 @@
(t/is (= [] invoices-matches))))
(t/testing "Should not match unpaid invoice"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/unpaid
:scheduled-payment #inst "2019-01-04"
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/unpaid
:scheduled-payment #inst "2019-01-04"
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
@@ -303,62 +301,59 @@
(t/is (= [] invoices-matches))))
(t/testing "Should not match invoice that already has a payment"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/paid
:scheduled-payment #inst "2019-01-04"
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
{:invoice-payment/amount 30.0
:invoice-payment/invoice "invoice-id"}
#:client {:name "Client"
:db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:scheduled-payment #inst "2019-01-04"
:vendor vendor1-id
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice-id"}
{:invoice-payment/amount 30.0
:invoice-payment/invoice "invoice-id"}
#:client {:name "Client"
:db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0
client-id)]
(t/is (= [] invoices-matches))))
(t/testing "Should match multiple invoices for same vendor that total to transaction amount"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 15.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 15.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 15.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 15.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
(t/is (= 2 (count invoices-matches))
(str "Expected " (vec invoices-matches) " to have a singular match of two invoices."))))
(t/testing "Should not match if there are multiple candidate matches"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
@@ -366,22 +361,21 @@
(str "Expected " (vec invoices-matches) " to not match due to multiple possibilities."))))
(t/testing "Should not match if invoices are for different vendors"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 10.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor2-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 20.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 10.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor2-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 20.0
:db/id "invoice2-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)
invoices-matches (sut/match-transaction-to-single-unfulfilled-autopayments -30.0 client-id)]
@@ -389,29 +383,28 @@
(str "Expected " (vec invoices-matches) " to only consider invoices for the same vendor."))))
(t/testing "Should only consider invoices chronologically"
(let [{:strs [client-id]} (->> {:tx-data
[#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 10.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-06"
:date #inst "2019-01-01"
:client "client-id"
:total 21.0
:db/id "invoice2-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-05"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice3-id"}
#:client {:name "Client" :db/id "client-id"}]}
(let [{:strs [client-id]} (->> [#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-04"
:date #inst "2019-01-01"
:client "client-id"
:total 10.0
:db/id "invoice1-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-06"
:date #inst "2019-01-01"
:client "client-id"
:total 21.0
:db/id "invoice2-id"}
#:invoice {:status :invoice-status/paid
:vendor vendor1-id
:scheduled-payment #inst "2019-01-05"
:date #inst "2019-01-01"
:client "client-id"
:total 30.0
:db/id "invoice3-id"}
#:client {:name "Client" :db/id "client-id"}]
(dc/transact conn)
:tempids)]
(t/is (= 2 (count (sut/match-transaction-to-single-unfulfilled-autopayments -40.0 client-id)))