Пример #1
0
 def testPrintClearedLabel(self):
     ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
     transaction = ledger.transactions[1]
     transaction.tags["cleared"] = True
     self.assertEqual("Bookshop", transaction.label)
     text = self.template.print_label(transaction, 30)
     self.assertRegexpMatches(text, r' *Bookshop')
Пример #2
0
 def testLedgerWithTags(self):
     ledger = self.parser.parse_ledger(fixture_path("tags.dat"))
     self.assertEqual(2, len(ledger.transactions))
     tr1 = ledger.transactions[0]
     self.assertIsNotNone(tr1.tags["balance"])
     self.assertEqual(date(2011, 1, 1), tr1.entries[1].date(tr1))
     tr2 = ledger.transactions[1]
     self.assertEqual("Dracula", tr2.entries[0].tags["title"])
Пример #3
0
    def testEmptyRegister(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        sorting = MapSorting(lambda x: x.date)
        filter = self.parser.accounts["Expenses"]["Clothing"].filter()
        report = self.report_factory(ledger, RuleCollection(), filter, sorting)
        records = list(report.generate())

        self.assertEqual(0, len(records))
Пример #4
0
    def testReportOrdering(self):
        ledger = self.parser.parse_ledger(fixture_path("sorting.dat"))
        sorting = MapSorting(lambda x: x.date)
        report = self.report_factory(ledger, RuleCollection(), Filter.null, sorting)

        self.assertEqual(
            [unicode(chr(i)) for i in xrange(ord('A'), ord('N') + 1) for _ in xrange(2)],
            [record.transaction.label for record in report.generate()])
Пример #5
0
    def testInclude(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        processor = LedgerProcessor(ledger, self.rules)
        collector = TransactionCollector()
        processor.add_listener(collector)

        processor.run()
        processor.include("extra.dat")

        self.assertEqual(3, len(collector.transactions))
Пример #6
0
    def testSimpleReport(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        sorting = Sorting(lambda x: x)
        report = self.report_factory(ledger, RuleCollection(), Filter.null, sorting)

        self.assertEqual(
            [(u'Assets:Bank', Value.parse("1465 EUR")),
             (u'Equity:Capital', Value.parse("-1500 EUR")),
             (u'Expenses:Books', Value.parse("35 EUR"))],
            [(record.account, record.amount) for record in report.generate() if record.account])
Пример #7
0
    def testAccountPrefix(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        processor = LedgerProcessor(ledger, self.rules)
        collector = TransactionCollector()
        processor.add_listener(collector)

        processor.add_account_prefix("Business")
        processor.run()

        for transaction, entries in collector.transactions:
            for entry in entries:
                self.assertEqual("Business", entry.account.root().name)
Пример #8
0
    def testSimpleReport(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        sorting = MapSorting(lambda x: x.date)
        report = self.report_factory(ledger, RuleCollection(), Filter.null, sorting)
        records = list(report.generate())

        self.assertEqual(4, len(records))
        self.assertEqual(
            [(u'Assets:Bank', Value.parse('1500 EUR'), Value.parse('1500 EUR')),
             (u'Equity:Capital', Value.parse('-1500 EUR'), ZERO),
             (u'Expenses:Books', Value.parse('35 EUR'), Value.parse('35 EUR')),
             (u'Assets:Bank', Value.parse('-35 EUR'), ZERO)],
            [(record.entry.account.name, record.entry.amount, record.total) for record in records])
Пример #9
0
    def testCompact(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        processor = LedgerProcessor(ledger, self.rules)
        entry = ledger.transactions[1].entries[0]
        self.assertEqual(Value.parse("35 EUR"), entry.amount)
        # add entry
        entry2 = Entry(entry.account, Value.parse("-5 EUR"))
        ledger.transactions[1].entries.append(entry2)
        # rebalance transaction
        ledger.transactions[1].entries[1].amount += Value.parse("5 EUR")

        collector = TransactionCollector()
        processor.add_listener(collector)
        processor.run()

        self.assertEqual(2, len(collector.transactions))
        _, entries = collector.transactions[1]
        self.assertEqual(2, len(entries))

        self.assertEqual(Value.parse("30 EUR"), entries[0].amount)
Пример #10
0
    def testRemoveAccountPrefix(self):
        ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
        processor = LedgerProcessor(ledger, self.rules)
        collector = TransactionCollector()
        processor.add_listener(collector)

        self.assertEqual(2, len(ledger.transactions))

        processor.add_account_prefix("Business")
        ledger.transactions[0].execute(processor)

        for transaction, entries in collector.transactions:
            for entry in entries:
                self.assertEqual("Business", entry.account.root().name)

        collector.transactions = []
        processor.remove_account_prefix()

        ledger.transactions[0].execute(processor)

        for transaction, entries in collector.transactions:
            for entry in entries:
                self.assertNotEqual("Business", entry.account.root().name)
Пример #11
0
    def testParseError(self):
        with self.assertRaises(PledgerException) as cm:
            self.parser.parse_ledger(fixture_path("errors.dat"))

        self.assertEqual(3, cm.exception.line_number)
        self.assertEqual(fixture_path("errors.dat"), cm.exception.filename)
Пример #12
0
 def testSimpleLedger(self):
     ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
     self.assertEqual(2, len(ledger.transactions))
Пример #13
0
 def testFilename(self):
     ledger = self.parser.parse_ledger(fixture_path("simple.dat"))
     self.assertEqual(fixture_path("test.dat"), ledger.absolute_filename("test.dat"))