def test_mismatching_dates_in_meta(tmp_file): tmp_file.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2019:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', # NOQA dict(iban=Constants.iban.value, header=Constants.header.value), )) importer = ECImporter(Constants.iban.value, 'Assets:DKB:EC', file_encoding='utf-8') with open(str(tmp_file.realpath())) as fd: transactions = importer.extract(fd) assert len(transactions) == 2 assert isinstance(transactions[1], Balance) assert transactions[1].date == datetime.date(2019, 2, 1) assert transactions[1].amount == Amount(Decimal('5000.01'), currency='EUR')
def test_extract_sets_timestamps(tmp_file): tmp_file.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', # NOQA dict(iban=Constants.iban.value, header=Constants.header.value), )) importer = ECImporter(Constants.iban.value, 'Assets:DKB:EC', file_encoding='utf-8') assert not importer._date_from assert not importer._date_to assert not importer._balance_amount assert not importer._balance_date with open(str(tmp_file.realpath())) as fd: transactions = importer.extract(fd) assert transactions assert importer._date_from == datetime.date(2018, 1, 1) assert importer._date_to == datetime.date(2018, 1, 31) assert importer._balance_amount == Amount(Decimal('5000.01'), currency='EUR') assert importer._balance_date == datetime.date(2018, 2, 1)
def test_tagessaldo_with_empty_balance_does_not_crash(tmp_file): tmp_file.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; "20.01.2018";"";"";"";"Tagessaldo";"";"";""; ''', dict(iban=Constants.iban.value, header=Constants.header.value), )) importer = ECImporter(Constants.iban.value, 'Assets:DKB:EC', file_encoding='utf-8') with open(str(tmp_file.realpath())) as fd: transactions = importer.extract(fd) assert len(transactions) == 1 assert isinstance(transactions[0], Balance) assert transactions[0].date == datetime.date(2018, 2, 1) assert transactions[0].amount == Amount(Decimal('5000.01'), currency='EUR')
def test_extract_sets_timestamps(self): with open(self.filename, 'wb') as fd: fd.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', dict(iban=self.iban, header=HEADER))) # NOQA importer = ECImporter(self.iban, 'Assets:DKB:EC', file_encoding='utf-8') self.assertFalse(importer._date_from) self.assertFalse(importer._date_to) self.assertFalse(importer._balance) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertTrue(transactions) self.assertEqual(importer._date_from, datetime.date(2018, 1, 1)) self.assertEqual(importer._date_to, datetime.date(2018, 1, 31)) self.assertEqual(importer._balance, Decimal('5000.01'))
def test_extract_transactions(tmp_file): tmp_file.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', # NOQA dict(iban=Constants.iban.value, header=Constants.header.value), )) importer = ECImporter(Constants.iban.value, 'Assets:DKB:EC', file_encoding='utf-8') with open(str(tmp_file.realpath())) as fd: transactions = importer.extract(fd) assert len(transactions) == 2 assert transactions[0].date == datetime.date(2018, 1, 16) assert transactions[0].payee == 'REWE Filialen Voll' assert transactions[0].narration == 'Lastschrift REWE SAGT DANKE.' assert len(transactions[0].postings) == 1 assert transactions[0].postings[0].account == 'Assets:DKB:EC' assert transactions[0].postings[0].units.currency == 'EUR' assert transactions[0].postings[0].units.number == Decimal('-15.37')
def test_extract_transactions(self): with open(self.filename, 'wb') as fd: fd.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', dict(iban=self.iban, header=HEADER))) # NOQA importer = ECImporter(self.iban, 'Assets:DKB:EC', file_encoding='utf-8') with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 1) self.assertEqual(transactions[0].date, datetime.date(2018, 1, 16)) self.assertEqual(len(transactions[0].postings), 1) self.assertEqual(transactions[0].postings[0].account, 'Assets:DKB:EC') self.assertEqual(transactions[0].postings[0].units.currency, 'EUR') self.assertEqual(transactions[0].postings[0].units.number, Decimal('-15.37'))
def test_tagessaldo_emits_balance_directive(self): with open(self.filename, 'wb') as fd: fd.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; "20.01.2018";"";"";"";"Tagessaldo";"";"";"2.500,01"; ''', dict(iban=self.iban, header=HEADER))) # NOQA importer = ECImporter(self.iban, 'Assets:DKB:EC', file_encoding='utf-8') with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 1) self.assertTrue(isinstance(transactions[0], Balance)) self.assertEqual(transactions[0].date, datetime.date(2018, 1, 20)) self.assertEqual(transactions[0].amount, Amount(Decimal('2500.01'), currency='EUR'))
def test_mismatching_dates_in_meta(tmp_file): tmp_file.write_text( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2019:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', # NOQA dict(iban=IBAN, header=HEADER), ) ) importer = ECImporter(IBAN, 'Assets:DKB:EC', file_encoding='utf-8') with tmp_file.open() as fd: directives = importer.extract(fd) assert len(directives) == 2 assert isinstance(directives[1], Balance) assert directives[1].date == datetime.date(2019, 2, 1) assert directives[1].amount == Amount(Decimal('5000.01'), currency='EUR')
def test_tagessaldo_with_empty_balance_does_not_crash(tmp_file): tmp_file.write_text( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; "20.01.2018";"";"";"";"Tagessaldo";"";"";""; ''', dict(iban=IBAN, header=HEADER), ) ) importer = ECImporter(IBAN, 'Assets:DKB:EC', file_encoding='utf-8') with tmp_file.open() as fd: directives = importer.extract(fd) assert len(directives) == 1 assert isinstance(directives[0], Balance) assert directives[0].date == datetime.date(2018, 2, 1) assert directives[0].amount == Amount(Decimal('5000.01'), currency='EUR')
def test_extract_no_transactions(tmp_file): importer = ECImporter(IBAN, 'Assets:DKB:EC') tmp_file.write_text( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; ''', dict(iban=IBAN, header=HEADER), ) ) with tmp_file.open() as fd: directives = importer.extract(fd) assert len(directives) == 1 assert isinstance(directives[0], Balance) assert directives[0].date == datetime.date(2018, 2, 1) assert directives[0].amount == Amount(Decimal('5000.01'), currency='EUR')
def test_tagessaldo_emits_balance_directive(self): with open(self.filename, 'wb') as fd: fd.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; "20.01.2018";"";"";"";"Tagessaldo";"";"";"2.500,01"; ''', dict(iban=self.iban, header=HEADER))) # NOQA importer = ECImporter(self.iban, 'Assets:DKB:EC', file_encoding='utf-8') self.assertFalse(importer._date_from) self.assertFalse(importer._date_to) self.assertFalse(importer._balance) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertTrue(transactions)
def test_extract_no_transactions(self): importer = ECImporter(self.iban, 'Assets:DKB:EC') with open(self.filename, 'wb') as fd: fd.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; ''', dict(iban=self.iban, header=HEADER))) with open(self.filename) as fd: self.assertFalse(importer.extract(fd))
def test_extract_transactions(tmp_file): tmp_file.write_text( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; "06.05.2020";"06.05.2020";"Gutschrift";"From Someone";"";"DE88700222000012345678";"FDDODEMMXXX";"1,00";"";"";"NOTPROVIDED"; ''', # NOQA dict(iban=IBAN, header=HEADER), ) ) importer = ECImporter(IBAN, 'Assets:DKB:EC', file_encoding='utf-8') with tmp_file.open() as fd: directives = importer.extract(fd) assert len(directives) == 3 assert directives[0].date == datetime.date(2018, 1, 16) assert directives[0].payee == 'REWE Filialen Voll' assert directives[0].narration == 'Lastschrift REWE SAGT DANKE.' assert len(directives[0].postings) == 1 assert directives[0].postings[0].account == 'Assets:DKB:EC' assert directives[0].postings[0].units.currency == 'EUR' assert directives[0].postings[0].units.number == Decimal('-15.37') assert directives[1].date == datetime.date(2020, 5, 6) assert directives[1].payee == 'From Someone' assert directives[1].narration == 'Gutschrift DE88700222000012345678' assert len(directives[1].postings) == 1 assert directives[1].postings[0].account == 'Assets:DKB:EC' assert directives[1].postings[0].units.currency == 'EUR' assert directives[1].postings[0].units.number == Decimal('1.00')
def test_extract_no_transactions(self): importer = ECImporter(self.iban, 'Assets:DKB:EC') with open(self.filename, 'wb') as fd: fd.write(_format(''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; ''', dict(iban=self.iban, header=HEADER))) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 1) self.assertTrue(isinstance(transactions[0], Balance)) self.assertEqual(transactions[0].date, datetime.date(2018, 1, 31)) self.assertEqual(transactions[0].amount, Amount(Decimal('5000.01'), currency='EUR'))
def test_emits_closing_balance_directive(self): with open(self.filename, 'wb') as fd: fd.write(_format(''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2017:";"5.000,01 EUR"; {header}; "16.01.2018";"16.01.2018";"Lastschrift";"REWE Filialen Voll";"REWE SAGT DANKE.";"DE00000000000000000000";"AAAAAAAA";"-15,37";"000000000000000000 ";"0000000000000000000000";""; ''', dict(iban=self.iban, header=HEADER))) # NOQA importer = ECImporter(self.iban, 'Assets:DKB:EC', file_encoding='utf-8') with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 2) self.assertTrue(isinstance(transactions[1], Balance)) self.assertEqual(transactions[1].date, datetime.date(2018, 1, 31)) self.assertEqual(transactions[1].amount, Amount(Decimal('5000.01'), currency='EUR'))
def test_extract_no_transactions(tmp_file): importer = ECImporter(Constants.iban.value, 'Assets:DKB:EC') tmp_file.write( _format( ''' "Kontonummer:";"{iban} / Girokonto"; "Von:";"01.01.2018"; "Bis:";"31.01.2018"; "Kontostand vom 31.01.2018:";"5.000,01 EUR"; {header}; ''', dict(iban=Constants.iban.value, header=Constants.header.value), )) with open(str(tmp_file.realpath())) as fd: transactions = importer.extract(fd) assert len(transactions) == 1 assert isinstance(transactions[0], Balance) assert transactions[0].date == datetime.date(2018, 2, 1) assert transactions[0].amount == Amount(Decimal('5000.01'), currency='EUR')