Merge branch 'ledger-bulk' into staging

This commit is contained in:
2026-06-23 22:03:29 -07:00
4 changed files with 121 additions and 6 deletions

View File

@@ -3,7 +3,7 @@
[auto-ap.datomic :refer [conn audit-transact transact-schema install-functions]]
[auto-ap.datomic.accounts :as a]
[auto-ap.integration.util :refer [wrap-setup test-client test-vendor test-bank-account test-account
setup-test-data admin-token]]
setup-test-data admin-token user-token]]
[auto-ap.ssr.ledger :as sut]
[auto-ap.ssr.utils :refer [main-transformer]]
[auto-ap.ssr.ledger.common :as common]
@@ -557,3 +557,65 @@
:identity (admin-token)})]
(is (= (format "#entity-table tr[data-id=\"%d\"]" invoice-id)
(get-in response [:headers "hx-retarget"])))))))))
;; =============================================================================
;; Bulk Delete - all-ids-not-locked, bulk-delete
;; =============================================================================
(defn- create-journal-entry [client-id date external-id]
(let [temp (str (java.util.UUID/randomUUID))
tx @(dc/transact conn [{:db/id temp
:journal-entry/client client-id
:journal-entry/date date
:journal-entry/external-id external-id
:journal-entry/source "manual"
:journal-entry/amount 100.0}])]
(get-in tx [:tempids temp])))
(deftest all-ids-not-locked-test
(testing "Should exclude entries dated before the client's locked-until date"
(let [tempids (setup-test-data [(test-client :db/id "lock-client"
:client/code "LOCKTEST"
:client/locked-until #inst "2099-01-01")])
client-id (get tempids "lock-client")
locked-id (create-journal-entry client-id #inst "2020-01-01" "ext-locked")
open-id (create-journal-entry client-id #inst "2099-06-01" "ext-open")
result (set (sut/all-ids-not-locked [locked-id open-id]))]
(is (contains? result open-id))
(is (not (contains? result locked-id))))))
(deftest bulk-delete-test
(testing "Admin can delete selected ledger entries"
(let [tempids (setup-test-data [(test-client :db/id "bd-client"
:client/code "BDTEST")])
client-id (get tempids "bd-client")
id1 (create-journal-entry client-id #inst "2021-01-01" "ext-bd-1")
id2 (create-journal-entry client-id #inst "2021-02-01" "ext-bd-2")
response (sut/bulk-delete {:identity (admin-token)
:form-params {:selected [id1 id2]}})
db-after (dc/db conn)]
(is (= 200 (:status response)))
;; modal-response retargets to the persistent #modal-content shell (innerHTML)
;; so the modal-holder survives repeated deletes; it also appends modalopen.
(is (= "invalidated, reset-selection, modalopen" (get-in response [:headers "hx-trigger"])))
(is (= "#modal-content" (get-in response [:headers "hx-retarget"])))
(is (= "innerHTML" (get-in response [:headers "hx-reswap"])))
(is (nil? (:journal-entry/external-id (dc/pull db-after [:journal-entry/external-id] id1))))
(is (nil? (:journal-entry/external-id (dc/pull db-after [:journal-entry/external-id] id2))))))
(testing "Should preserve entries in a locked period even when selected"
(let [tempids (setup-test-data [(test-client :db/id "bd-lock-client"
:client/code "BDLOCK"
:client/locked-until #inst "2099-01-01")])
client-id (get tempids "bd-lock-client")
locked-id (create-journal-entry client-id #inst "2020-01-01" "ext-bd-locked")
open-id (create-journal-entry client-id #inst "2099-06-01" "ext-bd-open")
_ (sut/bulk-delete {:identity (admin-token)
:form-params {:selected [locked-id open-id]}})
db-after (dc/db conn)]
(is (some? (:journal-entry/external-id (dc/pull db-after [:journal-entry/external-id] locked-id))))
(is (nil? (:journal-entry/external-id (dc/pull db-after [:journal-entry/external-id] open-id))))))
(testing "Non-admin cannot bulk-delete"
(is (thrown? Exception (sut/bulk-delete {:identity (user-token)
:form-params {:selected [1]}})))))