diff --git a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm index 8fed4fac5e..1ffdf1e6a6 100644 --- a/gnucash/report/standard-reports/test/test-balsheet-pnl.scm +++ b/gnucash/report/standard-reports/test/test-balsheet-pnl.scm @@ -23,7 +23,9 @@ (test-runner-factory gnc:test-runner) (test-begin "balsheet and profit&loss") (null-test) - (balsheet-pnl-tests) + (create-test-data) + (balance-sheet-tests) + (pnl-tests) (test-end "balsheet and profit&loss")) (define (options->sxml uuid options test-title) @@ -80,7 +82,7 @@ (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) (test-assert "null-test" (options->sxml balance-sheet-uuid balance-sheet-options "null-test")))) -(define (balsheet-pnl-tests) +(define (create-test-data) ;; This function will perform implementation testing on the transaction report. (let* ((env (create-test-env)) (account-alist (env-create-account-structure-alist env structure)) @@ -95,23 +97,7 @@ (bank2creditcard (cdr (assoc "CreditCard" account-alist))) (equity (cdr (assoc "Equity" account-alist))) (income (cdr (assoc "Income" account-alist))) - (income-GBP (cdr (assoc "Income-GBP" account-alist))) - (YEAR (gnc:time64-get-year (gnc:get-today)))) - - (define (default-balsheet-testing-options) - (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) - (set-option! balance-sheet-options "General" "Balance Sheet Date" (cons 'absolute (gnc-dmy2time64 1 1 1971))) - (set-option! balance-sheet-options "Accounts" "Levels of Subaccounts" 'all) - (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) - balance-sheet-options)) - - (define (default-pnl-testing-options) - (let ((pnl-options (gnc:make-report-options pnl-uuid))) - (set-option! pnl-options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 1 1 1980))) - (set-option! pnl-options "General" "End Date" (cons 'absolute (gnc-dmy2time64 1 1 1981))) - (set-option! pnl-options "Accounts" "Levels of Subaccounts" 'all) - (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) - pnl-options)) + (income-GBP (cdr (assoc "Income-GBP" account-alist)))) ;; $100 in Savings account (env-transfer env 01 01 1970 equity bank1savings 100) @@ -169,300 +155,313 @@ ;; a couple INCOME transactions, a decade later (env-transfer env 01 01 1980 income bank1current 250) (env-transfer env 01 01 1980 income-GBP foreignsavings 500) - (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170") + (env-transfer-foreign env 01 02 1980 income-GBP bank1current 100 170 #:description "earn 100GBP into $170"))) - ;; Finally we can begin testing balsheet - (display "\n\n balsheet tests\n\n") - (let* ((balance-sheet-options (default-balsheet-testing-options)) - (sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-default"))) - (test-equal "total assets = $116,009" - (list "$116,009.00") - (sxml->table-row-col sxml 1 15 6)) - (test-equal "total liabilities = $9,500.00" - (list "$9,500.00") - (sxml->table-row-col sxml 1 23 6)) - (test-equal "total equity = $106,509.00" - (list "$106,509.00") - (sxml->table-row-col sxml 1 28 6)) - - (set-option! balance-sheet-options "Commodities" "Price Source" 'weighted-average) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-weighted-average"))) - (test-equal "weighted average assets = $114,071.66" - (list "$114,071.66") - (sxml->table-row-col sxml 1 15 6))) - - (set-option! balance-sheet-options "Commodities" "Price Source" 'average-cost) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-average-cost"))) - (test-equal "average-cost assets = $113,100" - (list "$113,100.00") - (sxml->table-row-col sxml 1 15 6))) - - (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-nearest) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-nearest"))) - (test-equal "pricedb-nearest assets = $116,009" - (list "$116,009.00") - (sxml->table-row-col sxml 1 15 6))) - - (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-latest) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-latest"))) - (test-equal "pricedb-latest assets = $122,049" - (list "$122,049.00") - (sxml->table-row-col sxml 1 15 6))) - - ;; set multilevel subtotal style - ;; verifies amount in EVERY line of the report. - (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) - (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-multilevel"))) - (test-equal "multilevel. root = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "multilevel. assets = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 4 5)) - (test-equal "multilevel. bank1 = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 5 4)) - (test-equal "multilevel. bonds = $2,000.00" - (list "$2,000.00") - (sxml->table-row-col sxml 1 6 3)) - (test-equal "multilevel. current = $2609.00" - (list "$2,609.00") - (sxml->table-row-col sxml 1 7 3)) - (test-equal "multilevel. empty = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 8 3)) - (test-equal "multilevel. savings = $100.00" - (list "$100.00") - (sxml->table-row-col sxml 1 9 3)) - (test-equal "multilevel. total bank1 = $4709" - (list "$4,709.00") - (sxml->table-row-col sxml 1 10 4)) - (test-equal "multilevel. broker = $2,000.00" - (list "$2,000.00") - (sxml->table-row-col sxml 1 11 4)) - (test-equal "multilevel. funds = $15,000.00" - (list "30 FUNDS" "$15,000.00" "$15,000.00") - (sxml->table-row-col sxml 1 12 3)) - (test-equal "multilevel. total broker = $17,000.00" - (list "$17,000.00") - (sxml->table-row-col sxml 1 13 4)) - (test-equal "multilevel. foreign = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 14 4)) - (test-equal "multilevel. foreignsavings = #200.00 = $340" - (list "#200.00" "$340.00" "$340.00") - (sxml->table-row-col sxml 1 15 3)) - (test-equal "multilevel. total foreign = $340" - (list "$340.00") - (sxml->table-row-col sxml 1 16 4)) - (test-equal "multilevel. house = $100,000" - (list "$100,000.00") - (sxml->table-row-col sxml 1 17 4)) - (test-equal "multilevel. total asset = $122,049" - (list "$122,049.00") - (sxml->table-row-col sxml 1 18 5)) - (test-equal "multilevel. total root = $122,049" - (list "$122,049.00") - (sxml->table-row-col sxml 1 19 6)) - (test-equal "multilevel. total assets = $122,049" - (list "$122,049.00") - (sxml->table-row-col sxml 1 20 6))) - - ;; set recursive-subtotal subtotal style - (set-option! balance-sheet-options "Display" "Parent account balances" 'recursive-bal) - (set-option! balance-sheet-options "Display" "Parent account subtotals" 'f) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-recursive"))) - (test-equal "recursive. root = $760+15000+104600" - (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "recursive. assets = $760+15000+104600" - (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") - (sxml->table-row-col sxml 1 4 5)) - (test-equal "recursive. bank1 = $4,709.00" - (list "$4,709.00") - (sxml->table-row-col sxml 1 5 4)) - (test-equal "recursive. bonds = $2,000.00" - (list "$2,000.00") - (sxml->table-row-col sxml 1 6 3)) - (test-equal "recursive. current = $2609.00" - (list "$2,609.00") - (sxml->table-row-col sxml 1 7 3)) - (test-equal "recursive. empty = $0.00" - (list "$0.00") - (sxml->table-row-col sxml 1 8 3)) - (test-equal "recursive. savings = $100.00" - (list "$100.00") - (sxml->table-row-col sxml 1 9 3)) - (test-equal "recursive. broker = $15000+2000.00" - (list "30 FUNDS" "$15,000.00" "$2,000.00" "$2,000.00") - (sxml->table-row-col sxml 1 10 4)) - (test-equal "recursive. funds = $15,000.00" - (list "30 FUNDS" "$15,000.00" "$15,000.00") - (sxml->table-row-col sxml 1 11 3)) - (test-equal "recursive. foreign = $340.00" - (list "#200.00" "$340.00") - (sxml->table-row-col sxml 1 12 4)) - (test-equal "recursive. foreignsavings = #200.00 = $340" - (list "#200.00" "$340.00" "$340.00") - (sxml->table-row-col sxml 1 13 3)) - (test-equal "recursive. house = $100,000" - (list "$100,000.00") - (sxml->table-row-col sxml 1 14 4)) - (test-equal "recursive. total assets = $122,049.00" - (list "$122,049.00") - (sxml->table-row-col sxml 1 15 6))) - - (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #f) - (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #f) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-disable show-fcur show-rates"))) - (test-equal "show-fcur disabled" - (list "$122,049.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "show-rates disabled" - '() - (sxml->table-row-col sxml 2 #f #f))) - - (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #t) +(define (balance-sheet-tests) + (define (default-balsheet-testing-options) + (let ((balance-sheet-options (gnc:make-report-options balance-sheet-uuid))) + (set-option! balance-sheet-options "General" "Balance Sheet Date" (cons 'absolute (gnc-dmy2time64 1 1 1971))) + (set-option! balance-sheet-options "Accounts" "Levels of Subaccounts" 'all) (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-enable show-fcur show-rates"))) - (test-equal "show-fcur enabled" - (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "show-rates enabled" - (list "1 FUNDS" "$500.00" "#1.00" "$1.70") - (sxml->table-row-col sxml 2 #f #f))) + balance-sheet-options)) + (display "\n\n balsheet tests\n\n") + (let* ((balance-sheet-options (default-balsheet-testing-options)) + (sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-default"))) - ;;make-multilevel - (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) - (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) + (test-equal "total assets = $116,009" + (list "$116,009.00") + (sxml->table-row-col sxml 1 15 6)) + (test-equal "total liabilities = $9,500.00" + (list "$9,500.00") + (sxml->table-row-col sxml 1 23 6)) + (test-equal "total equity = $106,509.00" + (list "$106,509.00") + (sxml->table-row-col sxml 1 28 6)) - (set-option! balance-sheet-options "Display" "Omit zero balance figures" #t) - (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #f) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#f omit-zb-bals=#t"))) - (test-equal "omit-zb-bals=#t" - '() - (sxml->table-row-col sxml 1 3 5)) - (test-equal "incl-zb-accts=#f" - '("Savings" "$100.00") ;i.e.skips "Empty" account with $0.00 - (sxml->table-row-col sxml 1 8 #f))) + (set-option! balance-sheet-options "Commodities" "Price Source" 'weighted-average) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-weighted-average"))) + (test-equal "weighted average assets = $114,071.66" + (list "$114,071.66") + (sxml->table-row-col sxml 1 15 6))) - (set-option! balance-sheet-options "Display" "Omit zero balance figures" #f) - (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #t) - (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#t omit-zb-bals=#f"))) - (test-equal "omit-zb-bals=#f" - (list "$0.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "incl-zb-accts=#t" - '("Empty" "$0.00") - (sxml->table-row-col sxml 1 8 #f))) - ) + (set-option! balance-sheet-options "Commodities" "Price Source" 'average-cost) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-average-cost"))) + (test-equal "average-cost assets = $113,100" + (list "$113,100.00") + (sxml->table-row-col sxml 1 15 6))) - (display "\n\n pnl tests\n\n") - (let* ((pnl-options (default-pnl-testing-options)) - (sxml (options->sxml pnl-uuid pnl-options "pnl-default"))) - (test-equal "total revenue = $1,270.00" + (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-nearest) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-nearest"))) + (test-equal "pricedb-nearest assets = $116,009" + (list "$116,009.00") + (sxml->table-row-col sxml 1 15 6))) + + (set-option! balance-sheet-options "Commodities" "Price Source" 'pricedb-latest) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-pricedb-latest"))) + (test-equal "pricedb-latest assets = $122,049" + (list "$122,049.00") + (sxml->table-row-col sxml 1 15 6))) + + ;; set multilevel subtotal style + ;; verifies amount in EVERY line of the report. + (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-multilevel"))) + (test-equal "multilevel. root = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "multilevel. assets = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "multilevel. bank1 = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 5 4)) + (test-equal "multilevel. bonds = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 6 3)) + (test-equal "multilevel. current = $2609.00" + (list "$2,609.00") + (sxml->table-row-col sxml 1 7 3)) + (test-equal "multilevel. empty = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 8 3)) + (test-equal "multilevel. savings = $100.00" + (list "$100.00") + (sxml->table-row-col sxml 1 9 3)) + (test-equal "multilevel. total bank1 = $4709" + (list "$4,709.00") + (sxml->table-row-col sxml 1 10 4)) + (test-equal "multilevel. broker = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 11 4)) + (test-equal "multilevel. funds = $15,000.00" + (list "30 FUNDS" "$15,000.00" "$15,000.00") + (sxml->table-row-col sxml 1 12 3)) + (test-equal "multilevel. total broker = $17,000.00" + (list "$17,000.00") + (sxml->table-row-col sxml 1 13 4)) + (test-equal "multilevel. foreign = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 14 4)) + (test-equal "multilevel. foreignsavings = #200.00 = $340" + (list "#200.00" "$340.00" "$340.00") + (sxml->table-row-col sxml 1 15 3)) + (test-equal "multilevel. total foreign = $340" + (list "$340.00") + (sxml->table-row-col sxml 1 16 4)) + (test-equal "multilevel. house = $100,000" + (list "$100,000.00") + (sxml->table-row-col sxml 1 17 4)) + (test-equal "multilevel. total asset = $122,049" + (list "$122,049.00") + (sxml->table-row-col sxml 1 18 5)) + (test-equal "multilevel. total root = $122,049" + (list "$122,049.00") + (sxml->table-row-col sxml 1 19 6)) + (test-equal "multilevel. total assets = $122,049" + (list "$122,049.00") + (sxml->table-row-col sxml 1 20 6))) + + ;; set recursive-subtotal subtotal style + (set-option! balance-sheet-options "Display" "Parent account balances" 'recursive-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 'f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-recursive"))) + (test-equal "recursive. root = $760+15000+104600" + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "recursive. assets = $760+15000+104600" + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "recursive. bank1 = $4,709.00" + (list "$4,709.00") + (sxml->table-row-col sxml 1 5 4)) + (test-equal "recursive. bonds = $2,000.00" + (list "$2,000.00") + (sxml->table-row-col sxml 1 6 3)) + (test-equal "recursive. current = $2609.00" + (list "$2,609.00") + (sxml->table-row-col sxml 1 7 3)) + (test-equal "recursive. empty = $0.00" + (list "$0.00") + (sxml->table-row-col sxml 1 8 3)) + (test-equal "recursive. savings = $100.00" + (list "$100.00") + (sxml->table-row-col sxml 1 9 3)) + (test-equal "recursive. broker = $15000+2000.00" + (list "30 FUNDS" "$15,000.00" "$2,000.00" "$2,000.00") + (sxml->table-row-col sxml 1 10 4)) + (test-equal "recursive. funds = $15,000.00" + (list "30 FUNDS" "$15,000.00" "$15,000.00") + (sxml->table-row-col sxml 1 11 3)) + (test-equal "recursive. foreign = $340.00" + (list "#200.00" "$340.00") + (sxml->table-row-col sxml 1 12 4)) + (test-equal "recursive. foreignsavings = #200.00 = $340" + (list "#200.00" "$340.00" "$340.00") + (sxml->table-row-col sxml 1 13 3)) + (test-equal "recursive. house = $100,000" + (list "$100,000.00") + (sxml->table-row-col sxml 1 14 4)) + (test-equal "recursive. total assets = $122,049.00" + (list "$122,049.00") + (sxml->table-row-col sxml 1 15 6))) + + (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #f) + (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-disable show-fcur show-rates"))) + (test-equal "show-fcur disabled" + (list "$122,049.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates disabled" + '() + (sxml->table-row-col sxml 2 #f #f))) + + (set-option! balance-sheet-options "Commodities" "Show Foreign Currencies" #t) + (set-option! balance-sheet-options "Commodities" "Show Exchange Rates" #t) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-enable show-fcur show-rates"))) + (test-equal "show-fcur enabled" + (list "#200.00" "$340.00" "30 FUNDS" "$15,000.00" "$106,709.00" "$106,709.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates enabled" + (list "1 FUNDS" "$500.00" "#1.00" "$1.70") + (sxml->table-row-col sxml 2 #f #f))) + + ;;make-multilevel + (set-option! balance-sheet-options "Display" "Parent account balances" 'immediate-bal) + (set-option! balance-sheet-options "Display" "Parent account subtotals" 't) + + (set-option! balance-sheet-options "Display" "Omit zero balance figures" #t) + (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #f) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#f omit-zb-bals=#t"))) + (test-equal "omit-zb-bals=#t" + '() + (sxml->table-row-col sxml 1 3 5)) + (test-equal "incl-zb-accts=#f" + '("Savings" "$100.00") ;i.e.skips "Empty" account with $0.00 + (sxml->table-row-col sxml 1 8 #f))) + + (set-option! balance-sheet-options "Display" "Omit zero balance figures" #f) + (set-option! balance-sheet-options "Display" "Include accounts with zero total balances" #t) + (let ((sxml (options->sxml balance-sheet-uuid balance-sheet-options "balsheet-incl-zb-accts=#t omit-zb-bals=#f"))) + (test-equal "omit-zb-bals=#f" + (list "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "incl-zb-accts=#t" + '("Empty" "$0.00") + (sxml->table-row-col sxml 1 8 #f))))) + +(define (pnl-tests) + (define (default-pnl-testing-options) + (let ((pnl-options (gnc:make-report-options pnl-uuid))) + (set-option! pnl-options "General" "Start Date" (cons 'absolute (gnc-dmy2time64 1 1 1980))) + (set-option! pnl-options "General" "End Date" (cons 'absolute (gnc-dmy2time64 1 1 1981))) + (set-option! pnl-options "Accounts" "Levels of Subaccounts" 'all) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) + pnl-options)) + (display "\n\n pnl tests\n\n") + (let* ((pnl-options (default-pnl-testing-options)) + (sxml (options->sxml pnl-uuid pnl-options "pnl-default"))) + (test-equal "total revenue = $1,270.00" + (list "$1,270.00") + ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml)) + (test-equal "total expenses = $0.00" + (list "$0.00") + ((sxpath '(// table // (tr 2) // table // (tr 3) // (td 6) // *text*)) + sxml)) + + (set-option! pnl-options "Commodities" "Price Source" 'weighted-average) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-weighted-average"))) + (test-equal "weighted average revenue = $1160.36" + (list "$1,160.36") + ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml))) + + (set-option! pnl-options "Commodities" "Price Source" 'average-cost) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-average-cost"))) + (test-equal "average-cost revenue = $976" + (list "$976.00") + ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml))) + + (set-option! pnl-options "Commodities" "Price Source" 'pricedb-nearest) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-nearest"))) + (test-equal "pricedb-nearest revenue = $1270" (list "$1,270.00") ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml))) + + (set-option! pnl-options "Commodities" "Price Source" 'pricedb-latest) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-latest"))) + (test-equal "pricedb-latest revenue = $1270" + (list "$1,270.00") + ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml))) + + ;; set multilevel subtotal style + ;; verifies amount in EVERY line of the report. + (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 't) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-multilevel"))) + (test-equal "multilevel. income = -$250.00" + (list "-$250.00") + ((sxpath '(// table // (tr 1) // table // (tr 3) // (td 6) // *text*)) sxml)) - (test-equal "total expenses = $0.00" + (test-equal "multilevel. income-GBP = -#600" + (list "-#600.00" "-$1,020.00") + ((sxpath '(// table // (tr 1) // table // (tr 4) // (td 5) // *text*)) + sxml)) + (test-equal "multilevel. total income = -$1,270.00" + (list "-$1,270.00") + ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) + sxml)) + (test-equal "multilevel. total revenue = $1,270.00" + (list "$1,270.00") + ((sxpath '(// table // (tr 1) // table // (tr 6) // (td 6) // *text*)) + sxml)) + (test-equal "multilevel. expenses = $0.00" (list "$0.00") ((sxpath '(// table // (tr 2) // table // (tr 3) // (td 6) // *text*)) sxml)) + (test-equal "multilevel. net-income = $1,270" + (list "$1,270.00") + ((sxpath '(// table // (tr 2) // table // (tr 4) // (td 6) // *text*)) + sxml))) - (set-option! pnl-options "Commodities" "Price Source" 'weighted-average) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-weighted-average"))) - (test-equal "weighted average revenue = $1160.36" - (list "$1,160.36") - ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) - sxml))) + ;; set recursive-subtotal subtotal style + (set-option! pnl-options "Display" "Parent account balances" 'recursive-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 'f) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-recursive"))) + (test-equal "recursive. income = $1020+250" + (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "recursive. income-gbp = $1020" + (list "-#600.00" "-$1,020.00" "-#600.00" "-$1,020.00") + (sxml->table-row-col sxml 1 4 5)) + (test-equal "recursive. total revenue = $1270" + (list "$1,270.00" "$1,270.00") + (sxml->table-row-col sxml 1 5 6))) - (set-option! pnl-options "Commodities" "Price Source" 'average-cost) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-average-cost"))) - (test-equal "average-cost revenue = $976" - (list "$976.00") - ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) - sxml))) + (set-option! pnl-options "Commodities" "Show Foreign Currencies" #f) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #f) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-disable show-fcur show-rates"))) + (test-equal "show-fcur disabled" + (list "-$1,270.00" "$0.00" "-$1,270.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates disabled" + '() + (sxml->table-row-col sxml 2 #f #f))) - (set-option! pnl-options "Commodities" "Price Source" 'pricedb-nearest) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-nearest"))) - (test-equal "pricedb-nearest revenue = $1270" - (list "$1,270.00") - ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) - sxml))) + (set-option! pnl-options "Commodities" "Show Foreign Currencies" #t) + (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) + (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-enable show-fcur show-rates"))) + (test-equal "show-fcur enabled" + (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") + (sxml->table-row-col sxml 1 3 6)) + (test-equal "show-rates enabled" + (list "#1.00" "$1.70") + (sxml->table-row-col sxml 2 #f #f))) - (set-option! pnl-options "Commodities" "Price Source" 'pricedb-latest) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-pricedb-latest"))) - (test-equal "pricedb-latest revenue = $1270" - (list "$1,270.00") - ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) - sxml))) - - ;; set multilevel subtotal style - ;; verifies amount in EVERY line of the report. - (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) - (set-option! pnl-options "Display" "Parent account subtotals" 't) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-multilevel"))) - (test-equal "multilevel. income = -$250.00" - (list "-$250.00") - ((sxpath '(// table // (tr 1) // table // (tr 3) // (td 6) // *text*)) - sxml)) - (test-equal "multilevel. income-GBP = -#600" - (list "-#600.00" "-$1,020.00") - ((sxpath '(// table // (tr 1) // table // (tr 4) // (td 5) // *text*)) - sxml)) - (test-equal "multilevel. total income = -$1,270.00" - (list "-$1,270.00") - ((sxpath '(// table // (tr 1) // table // (tr 5) // (td 6) // *text*)) - sxml)) - (test-equal "multilevel. total revenue = $1,270.00" - (list "$1,270.00") - ((sxpath '(// table // (tr 1) // table // (tr 6) // (td 6) // *text*)) - sxml)) - (test-equal "multilevel. expenses = $0.00" - (list "$0.00") - ((sxpath '(// table // (tr 2) // table // (tr 3) // (td 6) // *text*)) - sxml)) - (test-equal "multilevel. net-income = $1,270" - (list "$1,270.00") - ((sxpath '(// table // (tr 2) // table // (tr 4) // (td 6) // *text*)) - sxml))) - - ;; set recursive-subtotal subtotal style - (set-option! pnl-options "Display" "Parent account balances" 'recursive-bal) - (set-option! pnl-options "Display" "Parent account subtotals" 'f) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-recursive"))) - (test-equal "recursive. income = $1020+250" - (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "recursive. income-gbp = $1020" - (list "-#600.00" "-$1,020.00" "-#600.00" "-$1,020.00") - (sxml->table-row-col sxml 1 4 5)) - (test-equal "recursive. total revenue = $1270" - (list "$1,270.00" "$1,270.00") - (sxml->table-row-col sxml 1 5 6))) - - (set-option! pnl-options "Commodities" "Show Foreign Currencies" #f) - (set-option! pnl-options "Commodities" "Show Exchange Rates" #f) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-disable show-fcur show-rates"))) - (test-equal "show-fcur disabled" - (list "-$1,270.00" "$0.00" "-$1,270.00" "$0.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "show-rates disabled" - '() - (sxml->table-row-col sxml 2 #f #f))) - - (set-option! pnl-options "Commodities" "Show Foreign Currencies" #t) - (set-option! pnl-options "Commodities" "Show Exchange Rates" #t) - (let ((sxml (options->sxml pnl-uuid pnl-options "pnl-enable show-fcur show-rates"))) - (test-equal "show-fcur enabled" - (list "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00" "-#600.00" "-$1,020.00" "-$250.00" "-$250.00" "$0.00") - (sxml->table-row-col sxml 1 3 6)) - (test-equal "show-rates enabled" - (list "#1.00" "$1.70") - (sxml->table-row-col sxml 2 #f #f))) - - ;;make-multilevel - (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) - (set-option! pnl-options "Display" "Parent account subtotals" 't) - ))) + ;;make-multilevel + (set-option! pnl-options "Display" "Parent account balances" 'immediate-bal) + (set-option! pnl-options "Display" "Parent account subtotals" 't)))