feat(tests): implement integration and unit tests for auth, company, and ledger behaviors

- Auth: 30 tests (97 assertions) covering OAuth, sessions, JWT, impersonation, roles
- Company: 35 tests (92 assertions) covering profile, 1099, expense reports, permissions
- Ledger: 113 tests (148 assertions) covering grid, journal entries, import, reports
- Fix existing test failures in running_balance, insights, tx, plaid, graphql
- Fix InMemSolrClient to handle Solr query syntax properly
- Update behavior docs: auth (42 done), company (32 done), ledger (120 done)
- All 478 tests pass with 0 failures, 0 errors
This commit is contained in:
2026-05-08 16:12:08 -07:00
parent d9d9263824
commit 6b5d33a32f
64 changed files with 9005 additions and 2086 deletions

View File

@@ -10,206 +10,206 @@
#_(deftest test-account-search
(with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
(testing "It should find matching account names"
@(dc/transact conn [{:account/name "Food Research"
:db/ident :client-specific-account
:account/numeric-code 51100
:account/search-terms "Food Research"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/allowed}])
(sut/rebuild-search-index)
(clojure.pprint/pprint auto-ap.solr/impl)
(is (> (count (sut/search {:id (admin-token)}
{:query "Food Research"}
nil))
0)))
(testing "It should find exact matches by numbers"
(is (= (count (sut/search {:id (admin-token)}
{:query "51100"}
nil))
1)))
(testing "It should filter out accounts that are not allowed for clients"
@(dc/transact conn [{:account/name "CLIENT SPECIFIC"
:db/ident :client-specific-account
:account/numeric-code 99999
:account/search-terms "CLIENTSPECIFIC"
:account/applicability :account-applicability/customized
:account/default-allowance :allowance/allowed}])
(sut/rebuild-search-index)
(is (= [] (sut/search {:id (admin-token)}
{:query "CLIENTSPECIFIC"}
nil)))
(testing "It should show up for the client specific version"
(let [client-id (-> @(dc/transact conn [{:client/name "CLIENT"
:db/id "client"}
{:db/ident :client-specific-account
:account/client-overrides [{:account-client-override/client "client"
:account-client-override/name "HI"
:account-client-override/search-terms "HELLOWORLD"}]}])
:tempids
(get "client"))]
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)}
{:query "HELLOWORLD"
:client_id client-id}
nil))))))
(testing "It should hide accounts that arent applicable"
@(dc/transact conn [{:account/name "DENIED"
:db/ident :denied-account
:account/numeric-code 99998
:account/search-terms "DENIED"
(with-redefs [auto-ap.solr/impl (auto-ap.solr/->InMemSolrClient (atom {}))]
(testing "It should find matching account names"
@(dc/transact conn [{:account/name "Food Research"
:db/ident :client-specific-account
:account/numeric-code 51100
:account/search-terms "Food Research"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/denied
:account/vendor-allowance :allowance/denied
:account/invoice-allowance :allowance/denied}])
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "DENIED"}
nil))))
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "DENIED"
:allowance :invoice}
nil))))
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "DENIED"
:allowance :vendor}
nil)))))
(testing "It should warn when using a warn account"
@(dc/transact conn [{:account/name "WARNING"
:db/ident :warn-account
:account/numeric-code 99997
:account/search-terms "WARNING"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/warn
:account/vendor-allowance :allowance/warn
:account/invoice-allowance :allowance/warn}])
:account/default-allowance :allowance/allowed}])
(sut/rebuild-search-index)
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :global}
nil)))))
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :invoice}
nil)))))
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :vendor}
nil))))))
(testing "It should only include admin accounts for admins"
@(dc/transact conn [{:account/name "ADMINONLY"
:db/ident :warn-account
:account/numeric-code 99997
:account/search-terms "ADMINONLY"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/admin-only
:account/vendor-allowance :allowance/admin-only
:account/invoice-allowance :allowance/admin-only}])
(clojure.pprint/pprint auto-ap.solr/impl)
(is (> (count (sut/search {:id (admin-token)}
{:query "Food Research"}
nil))
0)))
(testing "It should find exact matches by numbers"
(is (= (count (sut/search {:id (admin-token)}
{:query "51100"}
nil))
1)))
(testing "It should filter out accounts that are not allowed for clients"
@(dc/transact conn [{:account/name "CLIENT SPECIFIC"
:db/ident :client-specific-account
:account/numeric-code 99999
:account/search-terms "CLIENTSPECIFIC"
:account/applicability :account-applicability/customized
:account/default-allowance :allowance/allowed}])
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)}
{:query "ADMINONLY"}
nil))))
(is (= 0 (count (sut/search {:id (user-token)}
{:query "ADMINONLY"}
nil)))))
(is (= [] (sut/search {:id (admin-token)}
{:query "CLIENTSPECIFIC"}
nil)))
(testing "It should allow searching for vendor accounts for invoices"
(let [vendor-id (-> @(dc/transact conn [{:account/name "VENDORONLY"
:db/id "vendor-only"
:db/ident :vendor-only
:account/numeric-code 99996
:account/search-terms "VENDORONLY"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/allowed
:account/vendor-allowance :allowance/allowed
:account/invoice-allowance :allowance/denied}
{:vendor/name "Allowed"
:vendor/default-account "vendor-only"
:db/id "vendor"}])
:tempids
(get "vendor"))]
(sut/rebuild-search-index)
(testing "It should show up for the client specific version"
(let [client-id (-> @(dc/transact conn [{:client/name "CLIENT"
:db/id "client"}
{:db/ident :client-specific-account
:account/client-overrides [{:account-client-override/client "client"
:account-client-override/name "HI"
:account-client-override/search-terms "HELLOWORLD"}]}])
:tempids
(get "client"))]
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)}
{:query "HELLOWORLD"
:client_id client-id}
nil))))))
(testing "It should hide accounts that arent applicable"
@(dc/transact conn [{:account/name "DENIED"
:db/ident :denied-account
:account/numeric-code 99998
:account/search-terms "DENIED"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/denied
:account/vendor-allowance :allowance/denied
:account/invoice-allowance :allowance/denied}])
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "VENDORONLY"
{:query "DENIED"}
nil))))
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "DENIED"
:allowance :invoice}
nil))))
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "DENIED"
:allowance :vendor}
nil)))))
(testing "It should warn when using a warn account"
@(dc/transact conn [{:account/name "WARNING"
:db/ident :warn-account
:account/numeric-code 99997
:account/search-terms "WARNING"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/warn
:account/vendor-allowance :allowance/warn
:account/invoice-allowance :allowance/warn}])
(sut/rebuild-search-index)
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :global}
nil)))))
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :invoice}
nil)))))
(is (some? (:warning (first (sut/search {:id (admin-token)}
{:query "WARNING"
:allowance :vendor}
nil))))))
(testing "It should only include admin accounts for admins"
@(dc/transact conn [{:account/name "ADMINONLY"
:db/ident :warn-account
:account/numeric-code 99997
:account/search-terms "ADMINONLY"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/admin-only
:account/vendor-allowance :allowance/admin-only
:account/invoice-allowance :allowance/admin-only}])
(sut/rebuild-search-index)
(is (= 1 (count (sut/search {:id (admin-token)}
{:query "VENDORONLY"
:allowance :invoice
:vendor_id vendor-id}
nil)))))))
{:query "ADMINONLY"}
nil))))
(is (= 0 (count (sut/search {:id (user-token)}
{:query "ADMINONLY"}
nil)))))
(deftest get-graphql
(testing "should retrieve a single account"
@(dc/transact conn [{:account/numeric-code 1
:account/default-allowance :allowance/allowed
:account/type :account-type/asset
:account/location "A"
:account/name "Test"}])
(testing "It should allow searching for vendor accounts for invoices"
(let [vendor-id (-> @(dc/transact conn [{:account/name "VENDORONLY"
:db/id "vendor-only"
:db/ident :vendor-only
:account/numeric-code 99996
:account/search-terms "VENDORONLY"
:account/applicability :account-applicability/global
:account/default-allowance :allowance/allowed
:account/vendor-allowance :allowance/allowed
:account/invoice-allowance :allowance/denied}
{:vendor/name "Allowed"
:vendor/default-account "vendor-only"
:db/id "vendor"}])
:tempids
(get "vendor"))]
(sut/rebuild-search-index)
(is (= 0 (count (sut/search {:id (admin-token)}
{:query "VENDORONLY"
:allowance :invoice}
nil))))
(is (= {:name "Test",
:invoice_allowance nil,
:numeric_code 1,
:vendor_allowance nil,
:location "A",
:applicability nil}
(dissoc (first (:accounts (sut/get-graphql {:id (admin-token)} {} nil)))
:id
:type
:default_allowance)))))))
(is (= 1 (count (sut/search {:id (admin-token)}
{:query "VENDORONLY"
:allowance :invoice
:vendor_id vendor-id}
nil)))))))
#_(deftest upsert-account
(testing "should create a new account"
(let [result (sut/upsert-account {:id (admin-token)} {:account {:client_overrides []
:numeric_code 123
:location "A"
:applicability :global
:account-set "global"
:name "Test"
:invoice-allowance :allowed
:vendor-allowance :allowed
:type :asset}} nil)]
(is (= {:search_terms "Test",
:name "Test",
:invoice_allowance :allowed,
:numeric_code 123,
:code "123",
:account_set "global",
:vendor_allowance :allowed,
:location "A",
:applicability :global}
(dissoc result
:id
:type
:default_allowance)))
(testing "Should allow updating account"
(let [edit-result (sut/upsert-account {:id (admin-token)} {:account {:client_overrides []
:id (:id result)
:numeric_code 890
:location "B"
:applicability :global
:account-set "global"
:name "Hello"
:invoice-allowance :denied
:vendor-allowance :denied
:type :expense}} nil)]
(is (= {:search_terms "Hello",
:name "Hello",
:invoice_allowance :denied,
:code "123",
:account_set "global",
:vendor_allowance :denied,
:location "B",
:applicability :global}
(dissoc edit-result
(deftest get-graphql
(testing "should retrieve a single account"
@(dc/transact conn [{:account/numeric-code 1
:account/default-allowance :allowance/allowed
:account/type :account-type/asset
:account/location "A"
:account/name "Test"}])
(is (= {:name "Test",
:invoice_allowance nil,
:numeric_code 1,
:vendor_allowance nil,
:location "A",
:applicability nil}
(dissoc (first (:accounts (sut/get-graphql {:id (admin-token)} {} nil)))
:id
:type
:default_allowance
:numeric_code)))
(testing "Should not allow changing numeric code"
:default_allowance)))))))
(is (= 123 (:numeric_code edit-result)))))))))
#_(deftest upsert-account
(testing "should create a new account"
(let [result (sut/upsert-account {:id (admin-token)} {:account {:client_overrides []
:numeric_code 123
:location "A"
:applicability :global
:account-set "global"
:name "Test"
:invoice-allowance :allowed
:vendor-allowance :allowed
:type :asset}} nil)]
(is (= {:search_terms "Test",
:name "Test",
:invoice_allowance :allowed,
:numeric_code 123,
:code "123",
:account_set "global",
:vendor_allowance :allowed,
:location "A",
:applicability :global}
(dissoc result
:id
:type
:default_allowance)))
(testing "Should allow updating account"
(let [edit-result (sut/upsert-account {:id (admin-token)} {:account {:client_overrides []
:id (:id result)
:numeric_code 890
:location "B"
:applicability :global
:account-set "global"
:name "Hello"
:invoice-allowance :denied
:vendor-allowance :denied
:type :expense}} nil)]
(is (= {:search_terms "Hello",
:name "Hello",
:invoice_allowance :denied,
:code "123",
:account_set "global",
:vendor_allowance :denied,
:location "B",
:applicability :global}
(dissoc edit-result
:id
:type
:default_allowance
:numeric_code)))
(testing "Should not allow changing numeric code"
(is (= 123 (:numeric_code edit-result)))))))))