From ee182990f40601a19cd8e75d3c02873123c5d009 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Fri, 17 Jan 2020 16:18:47 +0100 Subject: [PATCH] Add tests to revolut processor --- ofx_processor/revolut_processor/main.py | 24 +++++++-- tests/test_ofx_processor.py | 5 -- tests/test_revolut_processor.py | 72 +++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 10 deletions(-) delete mode 100644 tests/test_ofx_processor.py create mode 100644 tests/test_revolut_processor.py diff --git a/ofx_processor/revolut_processor/main.py b/ofx_processor/revolut_processor/main.py index ea9c9b3..aab473b 100644 --- a/ofx_processor/revolut_processor/main.py +++ b/ofx_processor/revolut_processor/main.py @@ -13,10 +13,25 @@ def process_amount(amount): def process_memo(line): return " - ".join( - filter(None, map(str.strip, [line["Category"], line["Exchange Rate"]])) + filter( + None, + map(str.strip, [line.get("Category", ""), line.get("Exchange Rate", "")]), + ) ) +def process_date(line): + return dateparser.parse(line.get("Completed Date")).strftime("%Y-%m-%d") + + +def process_inflow(line): + return process_amount(line.get("Paid In (EUR)")) + + +def process_outflow(line): + return process_amount(line.get("Paid Out (EUR)")) + + @click.command() @click.argument("csv_filename") def cli(csv_filename): @@ -25,14 +40,13 @@ def cli(csv_filename): with open(csv_filename) as f: reader = csv.DictReader(f, delimiter=";") for line in reader: - date = dateparser.parse(line["Completed Date"]) formatted_data.append( { - "Date": date.strftime("%Y-%m-%d"), + "Date": process_date(line), "Payee": line["Reference"], "Memo": process_memo(line), - "Outflow": process_amount(line["Paid Out (EUR)"]), - "Inflow": process_amount(line["Paid In (EUR)"]), + "Outflow": process_outflow(line), + "Inflow": process_inflow(line), } ) diff --git a/tests/test_ofx_processor.py b/tests/test_ofx_processor.py deleted file mode 100644 index 7ed4edd..0000000 --- a/tests/test_ofx_processor.py +++ /dev/null @@ -1,5 +0,0 @@ -from ofx_processor.bpvf_processor import __version__ - - -def test_version(): - assert __version__ == "0.1.3" diff --git a/tests/test_revolut_processor.py b/tests/test_revolut_processor.py new file mode 100644 index 0000000..5ed3594 --- /dev/null +++ b/tests/test_revolut_processor.py @@ -0,0 +1,72 @@ +import datetime +import unittest + +from ofx_processor.revolut_processor.main import ( + process_amount, + process_memo, + process_date, + process_inflow, + process_outflow, +) + + +class RevolutProcessorTestCase(unittest.TestCase): + def test_process_amount_with_one_decimal_place(self): + amount = "3,4" + expected = 3.4 + self.assertEqual(process_amount(amount), expected) + + def test_process_amount_with_two_decimal_places(self): + amount = "3,41" + expected = 3.41 + self.assertEqual(process_amount(amount), expected) + + def test_process_amount_with_empty_string(self): + amount = "" + expected = "" + self.assertEqual(process_amount(amount), expected) + + def test_process_memo_with_category_and_rate(self): + line = {"Category": "category name", "Exchange Rate": "exchange rate"} + expected = "category name - exchange rate" + self.assertEqual(process_memo(line), expected) + + def test_process_memo_with_only_category(self): + line = {"Category": "category name", "Exchange Rate": ""} + expected = "category name" + self.assertEqual(process_memo(line), expected) + + def test_process_memo_with_only_rate(self): + line = {"Category": "", "Exchange Rate": "exchange rate"} + expected = "exchange rate" + self.assertEqual(process_memo(line), expected) + + def test_process_memo_with_missing_keys(self): + line = {"Category": "category name"} + expected = "category name" + self.assertEqual(process_memo(line), expected) + + def test_process_date(self): + line = {"Completed Date": "January 16"} + current_year = datetime.date.today().year + expected = f"{current_year}-01-16" + self.assertEqual(process_date(line), expected) + + def test_process_date_other_year(self): + line = {"Completed Date": "January 16 2019"} + expected = f"2019-01-16" + self.assertEqual(process_date(line), expected) + + def test_process_inflow(self): + line = {"Paid In (EUR)": "3,42"} + expected = 3.42 + self.assertEqual(process_inflow(line), expected) + + def test_process_outflow(self): + line = {"Paid Out (EUR)": "8,42"} + expected = 8.42 + self.assertEqual(process_outflow(line), expected) + + +if __name__ == "__main__": + unittest.main()