コード例 #1
0
    def testRunEnterDaysLessThanOne(self):
        schedulefiledata = FileTester.read_file(
            FileTester.test_enter_lessthan1
        )
        tempschedulefile = FileTester.write_to_temp_file(
            FileTester.test_enter_lessthan1,
            schedulefiledata
        )
        schedulefile = ScheduleFile(tempschedulefile)

        templedgerfile = FileTester.create_temp_file('')
        ledgerfile = LedgerFile(templedgerfile)

        scheduler = Scheduler(ledgerfile, schedulefile)
        scheduler.run()

        ledgerfile.write_file()
        schedulefile.write_file()

        schedulefile_actual = FileTester.read_file(tempschedulefile)
        schedulefile_expected = FileTester.read_file(
            FileTester.test_enter_lessthan1
        )

        os.remove(templedgerfile)
        os.remove(tempschedulefile)

        self.assertEqual(
            schedulefile_expected,
            schedulefile_actual
        )
コード例 #2
0
    def test_init_things(self):
        with FileTester.temp_input(testdata) as tempfilename:
            ledgerfile = LedgerFile(tempfilename, 'cash')
            recon = Reconciler(ledgerfile)

        self.verify_equal_floats(-15, recon.total_cleared)
        self.verify_equal_floats(-32.12, recon.total_pending)
        payees = {
            thing.payee for thing in recon.open_transactions
        }
        # all open transactions, including the future:
        self.assertEqual(
            ({'two', 'two pt five', 'three', 'four'}),
            payees
        )
        payees = {
            thing.payee for k, thing in
            recon.current_listing.iteritems()
            }
        # future items included only if pending ('three')
        self.assertEqual(
            ({'two', 'two pt five', 'three'}),
            payees
        )
        self.assertEqual(date.today(), recon.ending_date)
        self.assertIsNone(recon.ending_balance)
        self.assertEqual(3, len(recon.current_listing))
        self.assertEqual(
            'a: cash',
            ledgerfile.get_reconciliation_account()
        )
コード例 #3
0
 def test_parsed_file_unchanged_via_print(self):
     """file output after parsing should be identical to input"""
     expected = FileTester.read_file(FileTester.testfile)
     ledgerfile = LedgerFile(FileTester.testfile)
     ledgerfile.print_file()
     self.redirect.seek(0)
     self.assertEqual(expected, self.redirect.read())
     self.assertIsNone(ledgerfile.get_reconciliation_account())
コード例 #4
0
 def test_parsed_file_unchanged_via_write(self):
     """file output after parsing should be identical to input"""
     expected = FileTester.read_file(FileTester.testfile)
     tempfile = FileTester.copy_to_temp_file(FileTester.testfile)
     ledgerfile = LedgerFile(tempfile)
     ledgerfile.write_file()
     actual = FileTester.read_file(tempfile)
     remove(tempfile)
     self.assertEqual(expected, actual)
コード例 #5
0
 def test_already_sorted_file_unchanged(self):
     """file output after sorting is identical to sorted input"""
     expected = FileTester.read_file(FileTester.sortedfile)
     tempfile = FileTester.copy_to_temp_file(FileTester.sortedfile)
     ledgerfile = LedgerFile(tempfile)
     ledgerfile.sort()
     ledgerfile.write_file()
     actual = FileTester.read_file(tempfile)
     remove(tempfile)
     self.assertEqual(expected, actual)
コード例 #6
0
 def test_initial_non_transaction_date(self):
     """1st thing in file is a non-transaction, has default date"""
     tempfile = FileTester.create_temp_file('blah\nblah blah blah')
     ledgerfile = LedgerFile(tempfile)
     # non-transaction dates are only populated with sort
     ledgerfile.sort()
     remove(tempfile)
     self.assertEqual(
         LedgerFile.STARTING_DATE,
         ledgerfile.get_things()[0].thing_date
     )
コード例 #7
0
 def test_sorting(self):
     """test sorting"""
     expected = FileTester.read_file(FileTester.alpha_sortedfile)
     tempfile = FileTester.copy_to_temp_file(
         FileTester.alpha_unsortedfile
     )
     ledgerfile = LedgerFile(tempfile)
     ledgerfile.sort()
     ledgerfile.write_file()
     actual = FileTester.read_file(tempfile)
     remove(tempfile)
     self.assertEqual(expected, actual)
コード例 #8
0
    def run_it(self, before_date, after_date, schedule, enter_days=7):
        schedulefiledata = self.get_schedule_file(
            util.get_date_string(before_date),
            schedule,
            enter_days
        )
        tempschedulefile = FileTester.write_to_temp_file(
            FileTester.testdir + 'run_it_schedule_file',
            schedulefiledata
        )
        schedulefile = ScheduleFile(tempschedulefile)

        templedgerfile = FileTester.write_to_temp_file(
            FileTester.testdir + 'run_it_ledger_file',
            ''
        )
        ledgerfile = LedgerFile(templedgerfile)

        scheduler = Scheduler(ledgerfile, schedulefile)
        scheduler.run()

        ledgerfile.write_file()
        schedulefile.write_file()

        schedulefile_actual = FileTester.read_file(tempschedulefile)

        schedulefile_expected = self.get_schedule_file(
            util.get_date_string(after_date),
            schedule,
            enter_days
        )

        os.remove(templedgerfile)
        os.remove(tempschedulefile)

        self.assertEqual(schedulefile_expected, schedulefile_actual)
コード例 #9
0
    def test_assigned_thing_numbers(self):
        """thing numbers added in sequence starting at one"""
        testdata = '''; blah
; blah blah blah
2013/05/06 payee name
    expenses: misc
    liabilities: credit card  $-50
'''
        tempfile = FileTester.create_temp_file(testdata)
        ledgerfile = LedgerFile(tempfile)
        remove(tempfile)

        thing = LedgerThing([
            '2011/01/01 beezlebub',
            '    assets: soul',
            '    liabilities: credit card  $666',
        ])
        ledgerfile.add_thing(thing)
        expected = '012'
        actual = ''
        for thing in ledgerfile.get_things():
            actual += str(thing.thing_number)

        self.assertEquals(actual, expected)
コード例 #10
0
    def process_file(self):

        if self.args.next_scheduled_date:
            if not self.args.schedule_file:
                print('error: -S/--schedule-file is required')
                return 8

            schedule_file = ScheduleFile(self.args.schedule_file)
            print(schedule_file.next_scheduled_date())
            return 0

        if not self.args.file:
            print('error: -f/--file is required')
            return 16

        try:
            ledgerfile = LedgerFile(self.args.file, self.args.reconcile)
        except LdgReconcilerMoreThanOneMatchingAccount as e:
            print('Reconcile error. More than one matching account:')
            for account in e.message:
                print('    ' + account)
            return 2
        except LdgReconcilerMultipleStatuses as e:
            print(str(e))
            return 4

        if self.args.schedule_file:
            schedule_file = ScheduleFile(self.args.schedule_file)
            scheduler = Scheduler(ledgerfile, schedule_file)
            scheduler.run()
            schedule_file.write_file()
            ledgerfile.write_file()

        if self.args.sort:
            ledgerfile.sort()
            ledgerfile.write_file()

        if self.args.reconcile:
            if ledgerfile.rec_account_matches:  # pragma: no cover
                reconciler = Reconciler(ledgerfile)
                reconciler.cmdloop()
            else:
                print('No matching account found for "{acct}"'.format(
                    acct=self.args.reconcile
                ))

        return 0
コード例 #11
0
    def test_later_non_transaction_date(self):
        """later non-transaction things inherit preceding thing date"""
        testdata = '''2013/05/06 payee name
    expenses: misc
    liabilities: credit card  $-1
2013/05/07 payee name
    expenses: misc
    liabilities: credit card  $-2
'''
        tempfile = FileTester.create_temp_file(testdata)
        ledgerfile = LedgerFile(tempfile)
        ledgerfile._add_thing_from_lines(
            ['; blah blah blah', '; and so on...']
        )
        # non-transaction dates are only populated with sort
        ledgerfile.sort()
        remove(tempfile)
        self.assertEqual(
            ledgerfile.get_things()[1].thing_date,
            ledgerfile.get_things()[2].thing_date
        )