def test_transfer_income_row(yaml_config_load, database_session_stores_mufg): """Arguments should set into properties.""" expected_amount = 20 transfer_target = "三菱UFJ銀行" # Reason: Pylint's bug. pylint: disable=no-member mufg_row = MufgIncomeFromOthersRow(InstanceResource.ROW_DATA_MUFG_TRANSFER_INCOME_NOT_OWN_ACCOUNT) zaim_row = ZaimRowFactory.create(MufgTransferIncomeZaimTransferRowConverter(mufg_row)) assert isinstance(zaim_row, ZaimTransferRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2018-08-20" assert zaim_row_data.store_name == "" assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source is None assert zaim_row_data.cash_flow_target == transfer_target assert zaim_row_data.amount_transfer == expected_amount
def test(yaml_config_load, database_session_stores_mufg): """Arguments should set into properties.""" expected_amount = 3628 config_account_name = "三菱UFJ銀行" store_name = "東京都水道局 経理部管理課" mufg_row = MufgPaymentToSomeoneRow(InstanceResource.ROW_DATA_MUFG_TRANSFER_PAYMENT_TOKYO_WATERWORKS) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create(MufgZaimPaymentRowConverter(mufg_row)) assert isinstance(zaim_row, ZaimPaymentRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2018-11-28" assert zaim_row_data.store_name == store_name assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source == config_account_name assert zaim_row_data.note == "" assert zaim_row_data.amount_payment == expected_amount
def test_payment_row(yaml_config_load, database_session_stores_mufg): """Arguments should set into properties.""" expected_amount = 9000 config_account_name = "三菱UFJ銀行" config_transfer_account_name = "お財布" # Reason: Pylint's bug. pylint: disable=no-member mufg_row = MufgPaymentRow(InstanceResource.ROW_DATA_MUFG_PAYMENT) zaim_row = ZaimRowFactory.create(MufgPaymentZaimTransferRowConverter(mufg_row)) assert isinstance(zaim_row, ZaimTransferRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2018-11-05" assert zaim_row_data.store_name == "" assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source == config_account_name assert zaim_row_data.cash_flow_target == config_transfer_account_name assert zaim_row_data.amount_transfer == expected_amount
def test(yaml_config_load, database_session_item): """Arguments should set into properties.""" expected_amount = 4980 config_account_name = "ヨドバシゴールドポイントカード・プラス" store_name = "Amazon Japan G.K." item_name = "Echo Dot (エコードット) 第2世代 - スマートスピーカー with Alexa、ホワイト" amazon_row = Amazon201911PaymentRow(InstanceResource.ROW_DATA_AMAZON_201911_ECHO_DOT) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create(Amazon201911PaymentZaimPaymentRowConverter(amazon_row)) assert isinstance(zaim_row, ZaimPaymentRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2019-11-09" assert zaim_row_data.store_name == store_name assert zaim_row_data.item_name == item_name assert zaim_row_data.cash_flow_source == config_account_name assert zaim_row_data.note == "" assert zaim_row_data.amount_payment == expected_amount
def test( waon_row_data, expected_date, expected_store, expected_amount_payment, yaml_config_load, database_session_basic_store_waon, ): """Arguments should set into properties.""" waon_row = WaonRow(waon_row_data) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create(WaonZaimPaymentRowConverter(waon_row)) assert isinstance(zaim_row, ZaimPaymentRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == expected_date assert zaim_row_data.store_name == expected_store assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source == "WAON" assert zaim_row_data.amount_payment == expected_amount_payment
def test( view_card_row_data, expected_date, expected_store_name_zaim, expected_use_amount, yaml_config_load, database_session_stores_view_card, ): """Arguments should set into properties.""" row = ViewCardRow(view_card_row_data) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create(ViewCardZaimPaymentRowConverter(row)) assert isinstance(zaim_row, ZaimPaymentRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == expected_date assert zaim_row_data.store_name == expected_store_name_zaim assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source == "ビューカード" assert zaim_row_data.amount_payment == expected_use_amount
def test( gold_point_card_plus_row_data, expected_date, expected_store_name_zaim, expected_use_amount, yaml_config_load, database_session_stores_gold_point_card_plus, ): """Arguments should set into properties.""" row = GoldPointCardPlusRow(gold_point_card_plus_row_data) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create( GoldPointCardPlusZaimPaymentRowConverter(row)) assert isinstance(zaim_row, ZaimPaymentRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == expected_date assert zaim_row_data.store_name == expected_store_name_zaim assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_source == "ヨドバシゴールドポイントカード・プラス" assert zaim_row_data.amount_payment == expected_use_amount
def test( mufg_row_data: MufgRowData, expected_date, expected_store, config_transfer_account_name, expect_cash_flow_target, expected_amount, yaml_config_load, database_session_stores_mufg, ): """Arguments should set into properties.""" mufg_row = MufgIncomeFromOthersRow(mufg_row_data) # Reason: Pylint's bug. pylint: disable=no-member zaim_row = ZaimRowFactory.create(MufgZaimIncomeRowConverter(mufg_row)) assert isinstance(zaim_row, ZaimIncomeRow) list_zaim_row = zaim_row.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) # type: ignore assert zaim_row_data.date == expected_date assert zaim_row_data.store_name == expected_store assert zaim_row_data.item_name == "" assert zaim_row_data.cash_flow_target == expect_cash_flow_target assert zaim_row_data.amount_income == expected_amount
def test_all(yaml_config_load, database_session_stores_item): """Argument should set into properties.""" waon_auto_charge_row = WaonRow(InstanceResource.ROW_DATA_WAON_AUTO_CHARGE_ITABASHIMAENOCHO) zaim_low = ZaimRowFactory.create(WaonZaimTransferRowConverter(waon_auto_charge_row)) list_zaim_row = zaim_low.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2018-11-11" assert zaim_row_data.method == "transfer" assert zaim_row_data.category_large == "-" assert zaim_row_data.category_small == "-" assert zaim_row_data.cash_flow_source == "イオン銀行" assert zaim_row_data.cash_flow_target == "WAON" assert zaim_row_data.item_name == "" assert zaim_row_data.note == "" assert zaim_row_data.store_name == "" assert zaim_row_data.currency == "" assert zaim_row_data.amount_income == 0 assert zaim_row_data.amount_payment == 0 assert zaim_row_data.amount_transfer == 5000 assert zaim_row_data.balance_adjustment == "" assert zaim_row_data.amount_before_currency_conversion == "" assert zaim_row_data.setting_aggregate == ""
def test_all(yaml_config_load, database_session_stores_item): """Argument should set into properties.""" mufg_row = MufgIncomeFromOthersRow(InstanceResource.ROW_DATA_MUFG_TRANSFER_INCOME_NOT_OWN_ACCOUNT) # Reason: Pylint's bug. pylint: disable=no-member zaim_low = ZaimRowFactory.create(MufgZaimIncomeRowConverter(mufg_row)) list_zaim_row = zaim_low.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == "2018-08-20" assert zaim_row_data.method == "income" assert zaim_row_data.category_large == "臨時収入" assert zaim_row_data.category_small == "-" assert zaim_row_data.cash_flow_source == "" assert zaim_row_data.cash_flow_target == "三菱UFJ銀行" assert zaim_row_data.item_name == "" assert zaim_row_data.note == "" assert zaim_row_data.store_name == "三菱UFJ銀行" assert zaim_row_data.currency == "" assert zaim_row_data.amount_income == 20 assert zaim_row_data.amount_payment == 0 assert zaim_row_data.amount_transfer == 0 assert zaim_row_data.balance_adjustment == "" assert zaim_row_data.amount_before_currency_conversion == "" assert zaim_row_data.setting_aggregate == ""
def test_all( yaml_config_load, database_session_stores_item, input_row_factory, input_row_data: SFCardViewerRowData, zaim_row_converter_selector, expected_date, expected_category_large, expected_category_small, expected_cash_flow_source, expected_item_name, expected_note, expected_store_name, expected_amount_payment, ): """Argument should set into properties.""" input_row = input_row_factory.create(input_row_data) zaim_low = ZaimRowFactory.create(zaim_row_converter_selector.create(input_row)) list_zaim_row = zaim_low.convert_to_list() zaim_row_data = ZaimRowData(*list_zaim_row) assert zaim_row_data.date == expected_date assert zaim_row_data.method == "payment" assert zaim_row_data.category_large == expected_category_large assert zaim_row_data.category_small == expected_category_small assert zaim_row_data.cash_flow_source == expected_cash_flow_source assert zaim_row_data.cash_flow_target == "" assert zaim_row_data.item_name == expected_item_name assert zaim_row_data.note == expected_note assert zaim_row_data.store_name == expected_store_name assert zaim_row_data.currency == "" assert zaim_row_data.amount_income == 0 assert zaim_row_data.amount_payment == expected_amount_payment assert zaim_row_data.amount_transfer == 0 assert zaim_row_data.balance_adjustment == "" assert zaim_row_data.amount_before_currency_conversion == "" assert zaim_row_data.setting_aggregate == ""
def test_fail( yaml_config_file, directory_csv_convert_table, directory_csv_input, directory_csv_output, database_session ): """ Correct input CSV files should be converted into Zaim format CSV file. Incorrect input CSV files should be reported on error_undefined_content.csv. """ with pytest.raises(InvalidInputCsvError) as error: ZaimCsvConverter.execute() assert str(error.value) == "Some invalid input CSV file exists. Please check error_invalid_row.csv." checker = ZaimCsvFileChecker(directory_csv_output) checker.assert_file( "waon201808.csv", [ ZaimRowData( "2018-08-30", "payment", "食費", "食料品", "WAON", "", "", "", "イオンスタイル 板橋前野町", "", "0", "1489", "0", "", "", "", ), ], ) checker.assert_file( "amazon201810.csv", [ ZaimRowData( "2018-10-23", "payment", "大型出費", "家電", "ヨドバシゴールドポイントカード・プラス", "", "Echo Dot (エコードット) 第2世代 - スマートスピーカー with Alexa、ホワイト", "", "Amazon Japan G.K.", "", "0", "4980", "0", "", "", "", ), ], ) checker = ErrorCsvFileChecker(directory_csv_output) checker.assert_file( "error_invalid_row.csv", [ InvalidRowErrorRowData( "gold_point_card_plus_201912_202008.csv", "", "gold_point_card_plus_201912_202008.csv does not contain Footer row. " "Confirm CSV file and footer again. " "Footer = ['^$', '^$', '^$', '^$', '^$', '^\\\\d*$', '^$']", ), InvalidRowErrorRowData( "mufg201810.csv", "", ( "CSV file does not contain header row.Confirm CSV file and header again. " "Header = " "['日付', '摘要', '摘要内容', '支払い金額', '預かり金額', '差引残高', 'メモ', '未資金化区分', '入払区分']" ), ), InvalidRowErrorRowData( "waon201808.csv", "1", 'The value of "Charge kind" has not been defined in this code. Charge kind = クレジットカード', ), ], )
def test_success( yaml_config_file, directory_csv_convert_table, directory_csv_input, directory_csv_output, database_session ): """Input CSV files should be converted into Zaim format CSV file.""" try: ZaimCsvConverter.execute() except InvalidInputCsvError as error: if (directory_csv_output.target / "error_undefined_content.csv").exists(): TestZaimCsvConverter.debug_csv("error_undefined_content.csv", directory_csv_output) TestZaimCsvConverter.debug_csv("error_invalid_row.csv", directory_csv_output) raise error files = sorted(directory_csv_output.target.rglob("*[!.gitkeep]")) assert len(files) == 17 checker = ZaimCsvFileChecker(directory_csv_output) checker.assert_file( "waon201807.csv", [ ZaimRowData( "2018-08-07", "payment", "食費", "食料品", "WAON", "", "", "", "ファミリーマート かぶと町永代通り店", "", "0", "129", "0", "", "", "", ), ], ) checker.assert_file( "waon201808.csv", [ ZaimRowData( "2018-08-30", "payment", "食費", "食料品", "WAON", "", "", "", "イオンスタイル 板橋前野町", "", "0", "1489", "0", "", "", "", ), ], ) checker.assert_file( "waon201810.csv", [ ZaimRowData( "2018-10-22", "income", "その他", "-", "", "WAON", "", "", "イオンスタイル 板橋前野町", "", "1504", "0", "0", "", "", "", ), ZaimRowData( "2018-10-22", "transfer", "-", "-", "イオン銀行", "WAON", "", "", "", "", "0", "0", "10000", "", "", "" ), ], ) checker.assert_file( "waon201811.csv", [ ZaimRowData( "2018-11-11", "transfer", "-", "-", "イオン銀行", "WAON", "", "", "", "", "0", "0", "5000", "", "", "" ), ZaimRowData( "2018-11-23", "payment", "食費", "食料品", "WAON", "", "", "", "カルディコーヒーファーム成増店", "", "0", "-2098", "0", "", "", "", ), ], ) checker.assert_file( "gold_point_card_plus201807.csv", [ ZaimRowData( "2018-07-03", "payment", "水道・光熱", "電気料金", "ヨドバシゴールドポイントカード・プラス", "", "", "", "東京電力エナジーパートナー株式会社", "", "0", "11402", "0", "", "", "", ), ], ) checker.assert_file( "gold_point_card_plus_201912_202007.csv", [ ZaimRowData( "2020-07-03", "payment", "水道・光熱", "電気料金", "ヨドバシゴールドポイントカード・プラス", "", "", "", "東京電力エナジーパートナー株式会社", "", "0", "11402", "0", "", "", "", ), ZaimRowData( "2020-07-03", "payment", "通信", "インターネット関連費", "ヨドバシゴールドポイントカード・プラス", "", "", "", "Amazon Web Services Japan K.K.", "", "0", "66", "0", "", "", "", ), ], ) checker.assert_file( "mufg201808.csv", [ ZaimRowData( "2018-08-20", "income", "その他", "-", "", "三菱UFJ銀行", "", "", "三菱UFJ銀行", "", "20", "0", "0", "", "", "" ), ], ) checker.assert_file( "mufg201810.csv", [ ZaimRowData( "2018-10-01", "transfer", "-", "-", "お財布", "三菱UFJ銀行", "", "", "", "", "0", "0", "10000", "", "", "" ), ZaimRowData( "2018-10-01", "income", "臨時収入", "-", "", "三菱UFJ銀行", "", "", "フリコミモト-アカウント", "", "10000", "0", "0", "", "", "", ), ZaimRowData( "2018-10-20", "transfer", "-", "-", "お財布", "三菱UFJ銀行", "", "", "", "", "0", "0", "10000", "", "", "" ), ZaimRowData( "2018-10-29", "transfer", "-", "-", "三菱UFJ銀行", "ゴールドポイントカード・プラス", "", "", "", "", "0", "0", "59260", "", "", "", ), ], ) checker.assert_file( "mufg201811.csv", [ ZaimRowData( "2018-11-28", "payment", "水道・光熱", "水道料金", "三菱UFJ銀行", "", "", "", "東京都水道局 経理部管理課", "", "0", "3628", "0", "", "", "", ), ], ) checker.assert_file( "pasmo201811.csv", [ ZaimRowData( "2018-11-13", "payment", "交通", "電車", "PASMO", "", "", "メトロ 六本木一丁目 → メトロ 後楽園", "東京地下鉄株式会社 南北線後楽園駅", "", "0", "195", "0", "", "", "", ), ZaimRowData( "2018-11-11", "transfer", "-", "-", "TOKYU CARD", "PASMO", "", "", "", "", "0", "0", "3000", "", "", "", ), ], ) checker.assert_file( "pasmo201901.csv", [ ZaimRowData( "2019-01-27", "payment", "交通", "バス", "PASMO", "", "", "", "", "", "0", "195", "0", "", "", "" ), ], ) checker.assert_file( "amazon201810.csv", [ ZaimRowData( "2018-10-23", "payment", "大型出費", "家電", "ヨドバシゴールドポイントカード・プラス", "", "Echo Dot (エコードット) 第2世代 - スマートスピーカー with Alexa、ホワイト", "", "Amazon Japan G.K.", "", "0", "4980", "0", "", "", "", ), ], ) checker.assert_file( "amazon_201911_201911.csv", [ ZaimRowData( "2019-11-09", "payment", "教育・教養", "参考書", "ヨドバシゴールドポイントカード・プラス", "", "[第2版]Python機械学習プログラミング 達人データサイエンティストによる理論と実践 impress top gearシリーズ", "", "Amazon Japan G.K.", "", "0", "4000", "0", "", "", "", ), ZaimRowData( "2019-11-09", "payment", "通信", "その他", "ヨドバシゴールドポイントカード・プラス", "", "(Amazon ポイント)", "", "Amazon Japan G.K.", "", "0", "-11", "0", "", "", "", ), ], ) checker.assert_file( "amazon_201911_202004.csv", [ ZaimRowData( "2020-04-25", "payment", "大型出費", "家電", "ヨドバシゴールドポイントカード・プラス", "", "【日本正規代理店品】 Drobo 5N2 NASケース(3.5インチ×5bay) ギガビットイーサネット×2 PDR-5N2", "", "Amazon Japan G.K.", "", "0", "79482", "0", "", "", "", ), ZaimRowData( "2020-04-25", "payment", "通信", "宅急便", "ヨドバシゴールドポイントカード・プラス", "", "(配送料・手数料)", "", "Amazon Japan G.K.", "", "0", "410", "0", "", "", "", ), ZaimRowData( "2020-04-25", "payment", "通信", "その他", "ヨドバシゴールドポイントカード・プラス", "", "(割引)", "", "Amazon Japan G.K.", "", "0", "-410", "0", "", "", "", ), ZaimRowData( "2020-04-25", "payment", "通信", "その他", "ヨドバシゴールドポイントカード・プラス", "", "(Amazonポイント)", "", "Amazon Japan G.K.", "", "0", "-60", "0", "", "", "", ), ], ) checker.assert_file( "view_card202005.csv", [ ZaimRowData( "2020-03-31", "payment", "通信", "その他", "ビューカード", "", "", "", "ビューカード ビューカードセンター", "", "0", "524", "0", "", "", "", ), ], ) checker.assert_file( "suica202003.csv", [ ZaimRowData( "2020-03-21", "payment", "交通", "電車", "Suica", "", "", "JR東 越谷レイクタウン → JR東 板橋", "板橋", "", "0", "473", "0", "", "", "", ), ZaimRowData( "2020-03-21", "payment", "交通", "電車", "Suica", "", "", "JR東 板橋 → JR東 越谷レイクタウン", "越谷レイクタウン", "", "0", "473", "0", "", "", "", ), ZaimRowData( "2020-03-21", "transfer", "-", "-", "ビューカード", "Suica", "", "", "", "", "0", "0", "3000", "", "", "" ), ], ) checker.assert_file( "pay_pal201810.csv", [ ZaimRowData( "2018-10-11", "payment", "教育・教養", "参考書", "ヨドバシゴールドポイントカード・プラス", "", "プロダクティブ・プログラマ", "", "PayPal", "", "0", "2246", "0", "", "", "", ), ZaimRowData( "2018-10-11", "payment", "教育・教養", "参考書", "ヨドバシゴールドポイントカード・プラス", "", "プログラマが知るべき97のこと", "", "PayPal", "", "0", "1642", "0", "", "", "", ), ZaimRowData( "2018-10-22", "payment", "教育・教養", "参考書", "ヨドバシゴールドポイントカード・プラス", "", "退屈なことはPythonにやらせよう", "", "PayPal", "", "0", "3197", "0", "", "", "", ), ], )