__copyright__ = 'Copyright (c) 2020 Kristóf Marussy ' __license__ = 'GNU GPLv2' import unittest from beancount.loader import load_doc from beancount.parser import cmptest class TestClosingBalance(cmptest.TestCase): @load_doc() def test_close_account_correct(self, entries, errors, options_map): ''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-01-01 open Equity:Opening-Balances 2020-01-01 open Equity:Closing-Balances 2020-01-01 * "Opening balances" Assets:Checking 100 USD Equity:Opening-Balances -100 USD 2020-03-15 balance Assets:Checking 100 USD close-to: Equity:Closing-Balances ''' self.assertEqualEntries(''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-01-01 open Equity:Opening-Balances 2020-01-01 open Equity:Closing-Balances 2020-01-01 * "Opening balances" Assets:Checking 100 USD Equity:Opening-Balances -100 USD 2020-03-15 balance Assets:Checking 100 USD close-to: Equity:Closing-Balances 2020-03-15 * "Closing Assets:Checking" Assets:Checking -100 USD closing: TRUE Equity:Closing-Balances 100 USD 2020-03-15 close Assets:Checking ''', entries) @load_doc(expect_errors=True) def test_close_account_incorrect(self, entries, errors, options_map): ''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-01-01 open Equity:Opening-Balances 2020-01-01 open Equity:Closing-Balances 2020-01-01 * "Opening balances" Assets:Checking 100 USD Equity:Opening-Balances -100 USD 2020-03-15 balance Assets:Checking 80 USD close-to: Equity:Closing-Balances ''' self.assertEqualEntries(''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-01-01 open Equity:Opening-Balances 2020-01-01 open Equity:Closing-Balances 2020-01-01 * "Opening balances" Assets:Checking 100 USD Equity:Opening-Balances -100 USD 2020-03-15 balance Assets:Checking 80 USD close-to: Equity:Closing-Balances 2020-03-15 * "Closing Assets:Checking" Assets:Checking -80 USD closing: TRUE Equity:Closing-Balances 80 USD 2020-03-15 close Assets:Checking ''', entries) self.assertRegex(errors[0].message, '^Balance failed for \'Assets:Checking\'') @load_doc() def test_close_account_zero(self, entries, errors, options_map): ''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-03-15 balance Assets:Checking 0 USD close-to: Equity:Closing-Balances ''' self.assertEqualEntries(''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-03-15 balance Assets:Checking 0 USD close-to: Equity:Closing-Balances 2020-03-15 close Assets:Checking ''', entries) @load_doc(expect_errors=True) def test_invalid_close_to(self, entries, errors, options_map): ''' plugin "beancount_extras_kris7t.plugins.closing_balance" 2020-01-01 open Assets:Checking 2020-03-15 balance Assets:Checking 100 USD close-to: TRUE ''' self.assertRegex(errors[0].message, '^close-to must be a string') if __name__ == '__main__': unittest.main()