def test_01_xml(self): db = Database() acc1 = Account("Root") db += acc1 acc2 = Account("Foo") acc1 += acc2 acc3 = Account("Bar") acc1 += acc3 t = Transaction(datetime.date.today(), "bar") db += t i = Item("AAA", -2) t += i i += acc1 i = Item("BBB", 2) t += i i += acc2 t = Transaction(datetime.date.today() + datetime.timedelta(days=1), "foo") db += t i = Item("CCC", 2.99) t += i i += acc1 i = Item("DDD", -2.99) i += acc3 t += i t = Transaction(datetime.date.today() - datetime.timedelta(days=3), "Flix") db += t i = Item(u"EEE <>/\\!'\"§$%&/(){}", 4) t += i i += acc1 i = Item(u"FFF öäüÖÄÜß", -4) t += i i += acc3 # remove the date/time depending string datePatchRe = re.compile("^\s*<saved\s+datetime=\".+?\"\s*/>\s*$", re.MULTILINE) xml = etree.tostring(db.toXml(), encoding="utf-8", xml_declaration=True, pretty_print=True).decode("utf-8") print(xml) xml = datePatchRe.sub("", xml) print(xml) db2 = Database.parseFromXml( etree.parse(BytesIO(xml.encode("utf-8"))).getroot()) xml2 = etree.tostring(db2.toXml(), encoding="utf-8", xml_declaration=True, pretty_print=True).decode("utf-8") print(xml2) xml2 = datePatchRe.sub("", xml2) self.assertEqual(xml, xml2, "xml differs")
def test_balanced(self): db = Database() asset = Account("Asset") db += asset debit = Account("Debit") db += asset t = Transaction(datetime.date.today()) db += t i = Item("Hello World", 2) t += i i += asset self.assertEqual(Decimal("2.00"), t.getBalance()) self.assertFalse(t.isBalanced()) i = Item("Foo Bar", -1) t += i i += debit self.assertEqual(Decimal("1.00"), t.getBalance()) self.assertFalse(t.isBalanced()) i.setValue(-2) self.assertEqual(Decimal("0"), t.getBalance()) self.assertTrue(t.isBalanced())
def test_03_items(self): db = Database() acc1 = Account("A") db += acc1 acc2 = Account("B") db += acc2 t0 = Transaction(datetime.date.today()) db += t0 i0 = Item("AA", 1) t0 += i0 i0 += acc1 i1 = Item("BB", -1) t0 += i1 i1 += acc2 t1 = Transaction(datetime.date.today() + datetime.timedelta(days=1)) db += t1 i2 = Item("CC", -2) t1 += i2 i2 += acc1 i3 = Item("DD", -2) t1 += i3 i3 += acc2 expected_acc_items = [i0, i2] current_acc_items = list(acc1.filterItems()) self.assertListEqual(expected_acc_items, current_acc_items) expected_acc_items = [i1, i3] current_acc_items = list(acc2.filterItems()) self.assertListEqual(expected_acc_items, current_acc_items) t1.setDate(datetime.date.today() - datetime.timedelta(days=1)) expected_acc_items = [i2, i0] current_acc_items = list(acc1.filterItems()) self.assertListEqual(expected_acc_items, current_acc_items) expected_acc_items = [i3, i1] current_acc_items = list(acc2.filterItems()) self.assertListEqual(expected_acc_items, current_acc_items)
def test_item(self): db = Database() acc = Account("Root") db += acc t = Transaction(datetime.date.today()) db += t i = Item("Hello World", 2.99) t += i i += acc i = Item("Foo Bar", 1) t += i i += acc
def addTransaction(self, date, descr="", value=None, confirmed=None): "Add new transaction using given values" trn = Transaction(date) db = self._account.db db += trn item = Item(descr, value) item += self._account if confirmed is not None: item.setConfirmed(confirmed) trn += item self._updateRowCache() firstRow = self._getRowCacheIdx(trn) self.beginInsertRows(QtCore.QModelIndex(), firstRow, firstRow + 1) self.endInsertRows() self.setDirty(True)
def menuNewRandomDatabase(self): "Create a new and random filled database." LOGGER.info("Creating new random database...") self._clearViews() self._db = Database() self._dbPath = "unnamed" self._db._parsing = True for i in range(32): acc = Account("Account%d" % i) self._db += acc for ii in range(2): cacc = Account("Account%d" % ii) acc += cacc for iii in range(2): ccacc = Account("Account%d" % iii) cacc += ccacc accs = self._db.getChildAccounts(True) dt = datetime.datetime.now() - datetime.timedelta(seconds=60 * 60 * 500) for i in range(3000): t = Transaction(dt, "#" * random.randint(1, 32)) self._db += t v = float(random.randint(1, 1000)) / 100 i = Item("A" * random.randint(1, 32), v) t += i i += random.choice(accs) i = Item("B" * random.randint(1, 32), -v) t += i i += random.choice(accs) dt += datetime.timedelta(seconds=60 * 60) self._db._parsing = False self._accountTree.setDatabase(self._db) self._accountTree.expandAll() self.statusBar().showMessage("Created random database", 2000)
def test_transactions(self): today = datetime.date.today() db = Database() acc1 = Account("A") db += acc1 acc2 = Account("B") db += acc2 t0 = Transaction(today, "B") db += t0 i0 = Item("AA", 1) t0 += i0 i0 += acc1 i1 = Item("BB", -1) t0 += i1 i1 += acc2 t1 = Transaction(today + datetime.timedelta(days=1), "C") db += t1 i2 = Item("CC", -2) t1 += i2 i2 += acc1 i3 = Item("DD", -2) t1 += i3 i3 += acc2 t2 = Transaction(today - datetime.timedelta(days=5), "A") db += t2 i4 = Item("EE", -3) t2 += i4 i4 += acc1 i5 = Item("FF", -3) t2 += i5 i5 += acc2 expected_transactions = [t2, t0, t1] current_transactions = list(db.filterTransactions()) self.assertListEqual(expected_transactions, current_transactions) t1.setDate(today - datetime.timedelta(days=1)) expected_transactions = [t2, t1, t0] current_transactions = list(db.filterTransactions()) self.assertListEqual(expected_transactions, current_transactions)
def testFilterByDate(self): f1 = FilterGreaterOrEqualDate("2013-07-01") f2 = FilterLessOrEqualDate("2013-07-31") f3 = f1 & f2 t = Transaction("2013-07-07") i = Item() t += i self.assertTrue(f1.accepted(t)) self.assertFalse(f1.rejected(t)) self.assertTrue(f2.accepted(t)) self.assertFalse(f2.rejected(t)) self.assertTrue(f3.accepted(t)) self.assertFalse(f3.rejected(t)) self.assertTrue(f1.accepted(i)) self.assertFalse(f1.rejected(i)) self.assertTrue(f2.accepted(i)) self.assertFalse(f2.rejected(i)) self.assertTrue(f3.accepted(i)) self.assertFalse(f3.rejected(i)) t = Transaction("2013-08-07") i = Item() t += i self.assertTrue(f1.accepted(t)) self.assertFalse(f1.rejected(t)) self.assertFalse(f2.accepted(t)) self.assertTrue(f2.rejected(t)) self.assertFalse(f3.accepted(t)) self.assertTrue(f3.rejected(t)) self.assertTrue(f1.accepted(i)) self.assertFalse(f1.rejected(i)) self.assertFalse(f2.accepted(i)) self.assertTrue(f2.rejected(i)) self.assertFalse(f3.accepted(i)) self.assertTrue(f3.rejected(i)) t = Transaction("2013-06-07") i = Item() t += i self.assertFalse(f1.accepted(t)) self.assertTrue(f1.rejected(t)) self.assertTrue(f2.accepted(t)) self.assertFalse(f2.rejected(t)) self.assertFalse(f3.accepted(t)) self.assertTrue(f3.rejected(t)) self.assertFalse(f1.accepted(i)) self.assertTrue(f1.rejected(i)) self.assertTrue(f2.accepted(i)) self.assertFalse(f2.rejected(i)) self.assertFalse(f3.accepted(i)) self.assertTrue(f3.rejected(i))
def _newTransaction(self, date, descr): t = Transaction(date, descr) self._db += t return t
def test_transaction(self): db = Database() acc = Account("Root") db += acc t = Transaction(datetime.date.today()) db += t