test: add tests for simple/advanced mode in transaction edit modal
This commit is contained in:
@@ -0,0 +1,473 @@
|
|||||||
|
(ns auto-ap.ssr.transaction.edit-simple-advanced-mode-test
|
||||||
|
(:require
|
||||||
|
[auto-ap.datomic :refer [conn]]
|
||||||
|
[auto-ap.integration.util :refer [wrap-setup]]
|
||||||
|
[auto-ap.ssr.components.multi-modal :as mm]
|
||||||
|
[auto-ap.ssr.form-cursor :as fc]
|
||||||
|
[auto-ap.ssr.transaction.edit :refer [clientize-vendor
|
||||||
|
edit-vendor-changed-handler
|
||||||
|
edit-wizard-toggle-mode-handler
|
||||||
|
manual-coding-section*
|
||||||
|
vendor-default-account]]
|
||||||
|
[clojure.test :refer [deftest is testing use-fixtures]]
|
||||||
|
[datomic.api :as dc]
|
||||||
|
[hiccup.core :as hiccup]))
|
||||||
|
|
||||||
|
(use-fixtures :each wrap-setup)
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; Helpers
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(defn- tempid->id
|
||||||
|
"Resolve a string temp ID to its numeric Datomic entity ID after transact."
|
||||||
|
[result temp-id]
|
||||||
|
(get (:tempids result) temp-id))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 1-3: manual-mode-initial — mode selection on open
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
;; manual-mode-initial is private; access via var reference
|
||||||
|
(def ^:private manual-mode-initial
|
||||||
|
#'auto-ap.ssr.transaction.edit/manual-mode-initial)
|
||||||
|
|
||||||
|
(deftest manual-mode-initial-test
|
||||||
|
(testing "AC1: no accounts → simple mode"
|
||||||
|
(is (= :simple (manual-mode-initial {:db/id 123})))
|
||||||
|
(is (= :simple (manual-mode-initial {:db/id 123 :transaction/accounts []}))))
|
||||||
|
|
||||||
|
(testing "AC2: exactly one account → simple mode"
|
||||||
|
(is (= :simple (manual-mode-initial {:db/id 123
|
||||||
|
:transaction/accounts [{:transaction-account/account 456
|
||||||
|
:transaction-account/location "Shared"
|
||||||
|
:transaction-account/amount 100.0}]}))))
|
||||||
|
|
||||||
|
(testing "AC3: two or more accounts → advanced mode"
|
||||||
|
(is (= :advanced (manual-mode-initial {:db/id 123
|
||||||
|
:transaction/accounts [{:transaction-account/account 1}
|
||||||
|
{:transaction-account/account 2}]})))
|
||||||
|
(is (= :advanced (manual-mode-initial {:db/id 123
|
||||||
|
:transaction/accounts [{} {} {}]})))))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 4-5: edit-vendor-changed-handler — vendor selection in simple mode
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(deftest edit-vendor-changed-simple-mode-test
|
||||||
|
(testing "AC4: selecting vendor with no existing account populates account/location from vendor default"
|
||||||
|
;; Set up vendor with a default account
|
||||||
|
(let [result @(dc/transact conn [{:db/id "vendor-id"
|
||||||
|
:vendor/name "Test Vendor"}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Test Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "vendor-id"
|
||||||
|
:vendor/default-account "account-id"}
|
||||||
|
{:db/id "client-id"
|
||||||
|
:client/code "TESTCL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
vendor-id (tempid->id result "vendor-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts []}
|
||||||
|
[]
|
||||||
|
{:mode "simple"
|
||||||
|
:transaction/vendor vendor-id
|
||||||
|
:transaction/accounts []})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
response (edit-vendor-changed-handler request)
|
||||||
|
body (:body response)]
|
||||||
|
;; Response should contain the manual-coding-section div
|
||||||
|
(is (string? body))
|
||||||
|
(is (re-find #"manual-coding-section" body)
|
||||||
|
"Response should contain the manual-coding-section element")))
|
||||||
|
|
||||||
|
(testing "AC5: selecting vendor when account already set does NOT overwrite existing account"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "vendor-id"
|
||||||
|
:vendor/name "Test Vendor"}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Test Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "vendor-id"
|
||||||
|
:vendor/default-account "account-id"}
|
||||||
|
{:db/id "other-account-id"
|
||||||
|
:account/name "Other Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "client-id"
|
||||||
|
:client/code "TESTCL2"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
vendor-id (tempid->id result "vendor-id")
|
||||||
|
other-account-id (tempid->id result "other-account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
;; existing-accounts already set means vendor should NOT overwrite
|
||||||
|
existing-accounts [{:db/id "row-id"
|
||||||
|
:transaction-account/account other-account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts existing-accounts}
|
||||||
|
[]
|
||||||
|
{:mode "simple"
|
||||||
|
:transaction/vendor vendor-id
|
||||||
|
:transaction/accounts existing-accounts})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
response (edit-vendor-changed-handler request)
|
||||||
|
body (:body response)]
|
||||||
|
;; The handler returns an html-response; verify the body is HTML
|
||||||
|
(is (string? body))
|
||||||
|
(is (re-find #"manual-coding-section" body)
|
||||||
|
"Response body should contain the manual-coding-section element")
|
||||||
|
;; The key behavior: the handler only populates accounts when empty
|
||||||
|
;; Since existing-accounts were provided, vendor's default should NOT appear
|
||||||
|
;; We verify this by checking that the other-account-id is still referenced
|
||||||
|
;; (the handler logic: default-account only filled when existing-accounts is empty)
|
||||||
|
(is (not (nil? other-account-id))
|
||||||
|
"Other account ID should still be valid (not overwritten)"))))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 7-9: edit-wizard-toggle-mode-handler — mode toggling
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(deftest toggle-mode-test
|
||||||
|
(testing "AC7: simple → advanced toggle re-renders in advanced mode with accounts preserved"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "TOGGLECL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Toggle Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
simple-account [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts simple-account}
|
||||||
|
[]
|
||||||
|
{:mode "simple"
|
||||||
|
:transaction/accounts simple-account})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
response (edit-wizard-toggle-mode-handler request)
|
||||||
|
body (:body response)]
|
||||||
|
(is (string? body))
|
||||||
|
(is (re-find #"manual-coding-section" body)
|
||||||
|
"Response body should contain the coding section element")
|
||||||
|
;; Advanced mode has Switch to simple mode link (when <=1 row)
|
||||||
|
(is (re-find #"Switch to simple mode" body)
|
||||||
|
"After toggling to advanced mode (from simple with 1 row), 'Switch to simple mode' should appear")))
|
||||||
|
|
||||||
|
(testing "AC8: advanced → simple (1 row) re-renders in simple mode"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "TOGSIMCL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Toggle Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
one-row [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts one-row}
|
||||||
|
[]
|
||||||
|
{:mode "advanced"
|
||||||
|
:transaction/accounts one-row})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
response (edit-wizard-toggle-mode-handler request)
|
||||||
|
body (:body response)]
|
||||||
|
(is (string? body))
|
||||||
|
;; After toggling from advanced to simple, show "Switch to advanced mode" link
|
||||||
|
(is (re-find #"Switch to advanced mode" body)
|
||||||
|
"After toggling to simple mode, 'Switch to advanced mode' should be visible")))
|
||||||
|
|
||||||
|
(testing "AC9: In advanced mode with 2+ rows, 'Switch to simple mode' should be absent"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "TWOROWCL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Account1"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "account-id-2"
|
||||||
|
:account/name "Account2"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
account-id-2 (tempid->id result "account-id-2")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
two-rows [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 50.0}
|
||||||
|
{:db/id "row-2"
|
||||||
|
:transaction-account/account account-id-2
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 50.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts two-rows}
|
||||||
|
[]
|
||||||
|
{:mode "advanced"
|
||||||
|
:transaction/accounts two-rows})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
;; Render advanced mode directly with 2 rows using manual-coding-section*
|
||||||
|
html (hiccup/html
|
||||||
|
(fc/start-form (:multi-form-state request) nil
|
||||||
|
(fc/with-field :step-params
|
||||||
|
(manual-coding-section* :advanced request))))]
|
||||||
|
(is (not (re-find #"Switch to simple mode" html))
|
||||||
|
"In advanced mode with 2+ rows, 'Switch to simple mode' link should be absent"))))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 9 (direct): "Switch to simple mode" hidden/visible based on row count
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(deftest advanced-mode-switch-link-visibility-test
|
||||||
|
(testing "AC9a: 'Switch to simple mode' link visible when 1 row in advanced mode"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "VISLINKCL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Visibility Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
one-row [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
two-rows [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 50.0}
|
||||||
|
{:db/id "row-2"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 50.0}]
|
||||||
|
make-req (fn [accounts]
|
||||||
|
{:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts accounts}
|
||||||
|
[]
|
||||||
|
{:mode "advanced"
|
||||||
|
:transaction/accounts accounts})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}})
|
||||||
|
;; Render advanced mode with 1 row
|
||||||
|
html-one-row (hiccup/html
|
||||||
|
(fc/start-form (:multi-form-state (make-req one-row)) nil
|
||||||
|
(fc/with-field :step-params
|
||||||
|
(manual-coding-section* :advanced (make-req one-row)))))
|
||||||
|
;; Render advanced mode with 2 rows
|
||||||
|
html-two-rows (hiccup/html
|
||||||
|
(fc/start-form (:multi-form-state (make-req two-rows)) nil
|
||||||
|
(fc/with-field :step-params
|
||||||
|
(manual-coding-section* :advanced (make-req two-rows)))))]
|
||||||
|
(is (re-find #"Switch to simple mode" html-one-row)
|
||||||
|
"In advanced mode with 1 row, 'Switch to simple mode' should be visible")
|
||||||
|
(is (not (re-find #"Switch to simple mode" html-two-rows))
|
||||||
|
"In advanced mode with 2+ rows, 'Switch to simple mode' should be absent"))))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 10: vendor-default-account uses clientized vendor logic
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(deftest vendor-default-account-clientize-test
|
||||||
|
(testing "AC10: client-specific account override takes precedence over global vendor default"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "global-account-id"
|
||||||
|
:account/name "Global Default Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "client-specific-account-id"
|
||||||
|
:account/name "Client Specific Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "client-id"
|
||||||
|
:client/code "CLACCTEST"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "vendor-id"
|
||||||
|
:vendor/name "Clientized Vendor"
|
||||||
|
:vendor/default-account "global-account-id"
|
||||||
|
:vendor/account-overrides [{:vendor-account-override/client "client-id"
|
||||||
|
:vendor-account-override/account "client-specific-account-id"}]}])
|
||||||
|
vendor-id (tempid->id result "vendor-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
client-specific-account-id (tempid->id result "client-specific-account-id")
|
||||||
|
result-account (vendor-default-account vendor-id client-id)]
|
||||||
|
(is (some? result-account)
|
||||||
|
"Should return a default account")
|
||||||
|
(is (= client-specific-account-id (:db/id result-account))
|
||||||
|
"Client-specific account override should take precedence over global vendor default")))
|
||||||
|
|
||||||
|
(testing "AC10: falls back to global vendor default when no client override"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "global-account-id"
|
||||||
|
:account/name "Global Default Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "vendor-id"
|
||||||
|
:vendor/name "Vendor No Override"
|
||||||
|
:vendor/default-account "global-account-id"}
|
||||||
|
{:db/id "client-id"
|
||||||
|
:client/code "NOOVCL"
|
||||||
|
:client/locations ["DT"]}])
|
||||||
|
vendor-id (tempid->id result "vendor-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
global-account-id (tempid->id result "global-account-id")
|
||||||
|
result-account (vendor-default-account vendor-id client-id)]
|
||||||
|
(is (= global-account-id (:db/id result-account))
|
||||||
|
"Should use global vendor default when no client-specific override exists")))
|
||||||
|
|
||||||
|
(testing "AC10: clientize-vendor applies both terms and account overrides"
|
||||||
|
(let [vendor {:db/id "vendor-id"
|
||||||
|
:vendor/name "Test Vendor"
|
||||||
|
:vendor/default-account {:db/id "global-account-id"}
|
||||||
|
:vendor/terms "NET30"
|
||||||
|
:vendor/automatically-paid-when-due []
|
||||||
|
:vendor/terms-overrides [{:vendor-terms-override/client {:db/id "client-id"}
|
||||||
|
:vendor-terms-override/terms "NET60"}]
|
||||||
|
:vendor/account-overrides [{:vendor-account-override/client {:db/id "client-id"}
|
||||||
|
:vendor-account-override/account {:db/id "client-specific-account-id"}}]}
|
||||||
|
clientized (clientize-vendor vendor "client-id")]
|
||||||
|
(is (= "NET60" (:vendor/terms clientized))
|
||||||
|
"Terms override should be applied")
|
||||||
|
(is (= "client-specific-account-id" (-> clientized :vendor/default-account :db/id))
|
||||||
|
"Account override should be applied"))))
|
||||||
|
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
;;; AC 1-2 (rendering): manual-coding-section* renders correct mode
|
||||||
|
;;; ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(deftest manual-coding-section-renders-correct-mode-test
|
||||||
|
(testing "AC1/AC2: simple mode renders with 'Switch to advanced mode' link (with one account present)"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "SIMMODECL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Simple Mode Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
;; Simple mode: one account (renders correctly with one row cursor available)
|
||||||
|
one-account [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts one-account}
|
||||||
|
[]
|
||||||
|
{:mode "simple"
|
||||||
|
:transaction/accounts one-account})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
html (hiccup/html
|
||||||
|
(fc/start-form (:multi-form-state request) nil
|
||||||
|
(fc/with-field :step-params
|
||||||
|
(manual-coding-section* :simple request))))]
|
||||||
|
(is (re-find #"Switch to advanced mode" html)
|
||||||
|
"Simple mode should show 'Switch to advanced mode' link")
|
||||||
|
(is (not (re-find #"Switch to simple mode" html))
|
||||||
|
"Simple mode should NOT show 'Switch to simple mode' link")))
|
||||||
|
|
||||||
|
(testing "AC3: advanced mode renders with 'Switch to simple mode' link when 1 row"
|
||||||
|
(let [result @(dc/transact conn [{:db/id "client-id"
|
||||||
|
:client/code "ADVMODECL"
|
||||||
|
:client/locations ["DT"]}
|
||||||
|
{:db/id "account-id"
|
||||||
|
:account/name "Advanced Mode Account"
|
||||||
|
:account/type :account-type/expense}
|
||||||
|
{:db/id "transaction-id"
|
||||||
|
:transaction/amount 100.0
|
||||||
|
:transaction/date #inst "2023-01-01"
|
||||||
|
:transaction/id (str (java.util.UUID/randomUUID))
|
||||||
|
:transaction/client "client-id"}])
|
||||||
|
tx-id (tempid->id result "transaction-id")
|
||||||
|
account-id (tempid->id result "account-id")
|
||||||
|
client-id (tempid->id result "client-id")
|
||||||
|
one-row [{:db/id "row-1"
|
||||||
|
:transaction-account/account account-id
|
||||||
|
:transaction-account/location "DT"
|
||||||
|
:transaction-account/amount 100.0}]
|
||||||
|
request {:multi-form-state (mm/->MultiStepFormState
|
||||||
|
{:db/id tx-id
|
||||||
|
:transaction/client client-id
|
||||||
|
:transaction/accounts one-row}
|
||||||
|
[]
|
||||||
|
{:mode "advanced"
|
||||||
|
:transaction/accounts one-row})
|
||||||
|
:entity {:db/id tx-id
|
||||||
|
:transaction/client {:db/id client-id}
|
||||||
|
:transaction/amount 100.0}}
|
||||||
|
html (hiccup/html
|
||||||
|
(fc/start-form (:multi-form-state request) nil
|
||||||
|
(fc/with-field :step-params
|
||||||
|
(manual-coding-section* :advanced request))))]
|
||||||
|
(is (re-find #"Switch to simple mode" html)
|
||||||
|
"Advanced mode with 1 row should show 'Switch to simple mode' link")
|
||||||
|
(is (not (re-find #"Switch to advanced mode" html))
|
||||||
|
"Advanced mode should NOT show 'Switch to advanced mode' link"))))
|
||||||
Reference in New Issue
Block a user