def test_identify_correct(self): importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) for bank in BANKS: with open(self.filename, 'wb') as fd: fd.write( self._format_data( ''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;{bank} Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR In der CSV-Datei finden Sie alle bereits gebuchten Umsätze. Die vorgemerkten Umsätze werden nicht aufgenommen, auch wenn sie in Ihrem Internetbanking angezeigt werden. {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;500,00;EUR ''', # NOQA bank=bank, )) with open(self.filename) as fd: self.assertTrue(importer.identify(fd))
def test_identify_invalid_user(self): other_user = '******' with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR In der CSV-Datei finden Sie alle bereits gebuchten Umsätze. Die vorgemerkten Umsätze werden nicht aufgenommen, auch wenn sie in Ihrem Internetbanking angezeigt werden. {header} ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', other_user) with open(self.filename) as fd: self.assertFalse(importer.identify(fd))
def test_bad_sorting_no_balances(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Betrag absteigend {pre_header} "Buchung";"Valuta";"Auftraggeber/Empfänger";"Buchungstext";"Kategorie";"Verwendungszweck";"Saldo";"Währung";"Betrag";"Währung" 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;Kategorie;REWE SAGT DANKE;1.234,00;USD;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) # 1 transaction + no balance assertion (not sorted by date) self.assertEqual(len(transactions), 1)
def test_optional_sorting_line(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Datum absteigend In der CSV-Datei finden Sie alle bereits gebuchten Umsätze. Die vorgemerkten Umsätze werden nicht aufgenommen, auch wenn sie in Ihrem Internetbanking angezeigt werden. {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 1)
def test_identify_invalid_iban(self): other_iban = 'DE00000000000000000000' with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR {pre_header} {header} ''' # NOQA )) importer = ECImporter(other_iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: self.assertFalse(importer.identify(fd))
def test_identify_correct(self): importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) for bank in BANKS: with open(self.filename, 'wb') as fd: fd.write( self._format_data( ''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;{bank} Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR {pre_header} {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;500,00;EUR ''', # NOQA bank=bank, )) with open(self.filename) as fd: self.assertTrue(importer.identify(fd))
def test_duplicate_waehrung_field_handled_correctly(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Datum absteigend {pre_header} "Buchung";"Valuta";"Auftraggeber/Empfänger";"Buchungstext";"Kategorie";"Verwendungszweck";"Saldo";"Währung";"Betrag";"Währung" 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;Kategorie;REWE SAGT DANKE;1.234,00;USD;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) # 1 transaction + 1 balance assertion # (opening balance cannot be calculated due to currency mismatch) self.assertEqual(len(transactions), 1 + 1) self.assertEqual(transactions[0].postings[0].units.currency, 'EUR')
def test_optional_sorting_line(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Datum absteigend {pre_header} {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) # 1 transaction + 2 balance assertions self.assertEqual(len(transactions), 1 + 2)
def test_extract_no_transactions(self): importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR {pre_header} {header} ''' # NOQA )) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertFalse(transactions)
def test_ascending_by_date_single(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Datum aufsteigend {pre_header} "Buchung";"Valuta";"Auftraggeber/Empfänger";"Buchungstext";"Kategorie";"Verwendungszweck";"Saldo";"Währung";"Betrag";"Währung" 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;Kategorie;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: directives = importer.extract(fd) # 1 transaction + 2 balance assertions self.assertEqual(len(directives), 1 + 2) self.assertTrue(isinstance(directives[0], Transaction)) # Test opening balance self.assertTrue(isinstance(directives[1], Balance)) self.assertEqual(directives[1].date, date(2018, 6, 1)) self.assertEqual(directives[1].amount.number, 1734.0) self.assertEqual(directives[1].amount.currency, 'EUR') # Test closing balance self.assertTrue(isinstance(directives[2], Balance)) self.assertEqual(directives[2].date, date(2018, 7, 1)) self.assertEqual(directives[2].amount.number, 1234.0) self.assertEqual(directives[2].amount.currency, 'EUR')
def test_descending_by_date_multiple(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR Sortierung;Datum absteigend {pre_header} "Buchung";"Valuta";"Auftraggeber/Empfänger";"Buchungstext";"Kategorie";"Verwendungszweck";"Saldo";"Währung";"Betrag";"Währung" 15.06.2018;08.06.2018;LIDL;Lastschrift;Kategorie;LIDL SAGT DANKE;1.000,00;EUR;-100,00;EUR 15.06.2018;08.06.2018;LIDL;Lastschrift;Kategorie;LIDL SAGT DANKE;1.100,00;EUR;-100,00;EUR 08.06.2018;08.06.2018;LIDL;Lastschrift;Kategorie;LIDL SAGT DANKE;1.200,00;EUR;-34,00;EUR 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;Kategorie;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) # 4 transactions + 2 balance assertions self.assertEqual(len(transactions), 4 + 2) # Test opening balance self.assertEqual(transactions[4].date, date(2018, 6, 1)) self.assertEqual(transactions[4].amount.number, 1734.0) self.assertEqual(transactions[4].amount.currency, 'EUR') # Test closing balance self.assertEqual(transactions[5].date, date(2018, 7, 1)) self.assertEqual(transactions[5].amount.number, 1000.0) self.assertEqual(transactions[5].amount.currency, 'EUR')
def test_extract_transactions(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR In der CSV-Datei finden Sie alle bereits gebuchten Umsätze. Die vorgemerkten Umsätze werden nicht aufgenommen, auch wenn sie in Ihrem Internetbanking angezeigt werden. {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: transactions = importer.extract(fd) self.assertEqual(len(transactions), 1) self.assertEqual(transactions[0].date, datetime.date(2018, 6, 8)) self.assertEqual(transactions[0].payee, 'REWE Filialen Voll') self.assertEqual(transactions[0].narration, 'Gutschrift REWE SAGT DANKE') self.assertEqual(len(transactions[0].postings), 1) self.assertEqual(transactions[0].postings[0].account, 'Assets:ING-DiBa:Extra') self.assertEqual(transactions[0].postings[0].units.currency, 'EUR') self.assertEqual(transactions[0].postings[0].units.number, Decimal('-500.00'))
def test_extract_transactions(self): with open(self.filename, 'wb') as fd: fd.write( self._format_data(''' Umsatzanzeige;Datei erstellt am: 25.07.2018 12:00 ;Letztes Update: aktuell IBAN;{formatted_iban} Kontoname;Extra-Konto Bank;ING-DiBa Kunde;{user} Zeitraum;01.06.2018 - 30.06.2018 Saldo;5.000,00;EUR {pre_header} {header} 08.06.2018;08.06.2018;REWE Filialen Voll;Gutschrift;REWE SAGT DANKE;1.234,00;EUR;-500,00;EUR ''' # NOQA )) importer = ECImporter(self.iban, 'Assets:ING-DiBa:Extra', self.user) with open(self.filename) as fd: directives = importer.extract(fd) self.assertEqual(len(directives), 1) self.assertEqual(directives[0].date, datetime.date(2018, 6, 8)) self.assertEqual(directives[0].payee, 'REWE Filialen Voll') self.assertEqual(directives[0].narration, 'Gutschrift REWE SAGT DANKE') self.assertEqual(len(directives[0].postings), 1) self.assertEqual(directives[0].postings[0].account, 'Assets:ING-DiBa:Extra') self.assertEqual(directives[0].postings[0].units.currency, 'EUR') self.assertEqual(directives[0].postings[0].units.number, Decimal('-500.00'))