aboutsummaryrefslogblamecommitdiffstats
path: root/beancount_extras_kris7t/plugins/closing_balance_test.py
blob: eab377cfe47cca0d67ca456fe611c03a32ae678d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11




                                                                            
                                     




                                           
               




































                                                                       
                                 





































                                                                                      
               



















                                                                    
                                 













                                                                         
__copyright__ = 'Copyright (c) 2020  Kristóf Marussy <kristof@marussy.com>'
__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()