diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/__init__.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_delete.csv new file mode 100644 index 00000000..e6a84d8c --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_delete.csv @@ -0,0 +1 @@ +"102","9","9","9","C","200501","200601","7","0","9","10","11","12","13","14","15","6","17","18","19","20","221-000","22","23","24","25","26","27","28","29","30","31","32","3","34","35","2","37","38","9","204001","1","204201","43","44","45","46","47" \ No newline at end of file diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_insert.csv new file mode 100644 index 00000000..24dfad89 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/com_pharm_insert.csv @@ -0,0 +1 @@ +"102","1","2","3","A","200501","200601","7","8","9","10","11","12","13","14","15","6","17","18","19","20","221-000","22","23","24","25","26","27","28","29","30","31","32","3","34","35","2","37","38","9","204001","1","204201","43","44","45","46","47" \ No newline at end of file diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_insert.csv new file mode 100644 index 00000000..f692eb44 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_insert.csv @@ -0,0 +1,2 @@ +"dcf_dsf_inst_cd","inst_div_cd","addr_unknown_reason_cd","form_inst_name_kana","inst_name_kana","form_inst_name_kanji","inst_name_kanji","close_flg","estab_sche_flg","close_start_ym","estab_sche_ym","inst_repre_kana","inst_repre","phone_number_non_flg","unconf_flg","inst_phone_number","inst_addr_kana","inst_addr","postal_number","village_cd","prefc_cd","city_cd","addr_display_number","addr_cnt_kana","addr_cnt","manage_cd","delete_sche_reason_cd","dup_opp_cd","supervising_pharmacist","supervising_pharmacist_kana","franchise_hq_cd","inst_pharm_div","abolish_ymd","delete_flg","filler_1","filler_2","filler_3","filler_4","filler_5","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"123","2","6","13","15","12","14","1","9","204201","204001","38","37","3","7","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/18 10:27:33","com_pharm_mapper" \ No newline at end of file diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_update.csv new file mode 100644 index 00000000..9eb9020e --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/expect_com_pharm_update.csv @@ -0,0 +1,3 @@ +"dcf_dsf_inst_cd","inst_div_cd","addr_unknown_reason_cd","form_inst_name_kana","inst_name_kana","form_inst_name_kanji","inst_name_kanji","close_flg","estab_sche_flg","close_start_ym","estab_sche_ym","inst_repre_kana","inst_repre","phone_number_non_flg","unconf_flg","inst_phone_number","inst_addr_kana","inst_addr","postal_number","village_cd","prefc_cd","city_cd","addr_display_number","addr_cnt_kana","addr_cnt","manage_cd","delete_sche_reason_cd","dup_opp_cd","supervising_pharmacist","supervising_pharmacist_kana","franchise_hq_cd","inst_pharm_div","abolish_ymd","delete_flg","filler_1","filler_2","filler_3","filler_4","filler_5","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"123","2","6","13","15","12","14","1","9","204201","204001","38","37","3","6","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/18 10:27:33","com_pharm_mapper" +"456","66","0","正カナ","略カナ","正漢字","略漢字","8","4","204812","204411","代カナ","代漢","0","6","119991234","住所カナ","住所漢字","001-6234","61626364","61","62","11","ケシトチ","県市通丁目","11","7","555657","薬剤師漢字","薬剤師カナ","998877","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/4/18 10:27:00","com_pharm_mapper","2023/4/18 10:27:00","com_pharm_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/test_com_pharm_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/test_com_pharm_mapper.py new file mode 100644 index 00000000..8d190859 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_pharm/test_com_pharm_mapper.py @@ -0,0 +1,197 @@ +import os.path as path +from datetime import datetime + +import pytest + +from src.batch.common.batch_config import BatchConfig +from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_pharm_mapper +from src.db.database import Database +from tests.testing_utility import (assert_table_results, + create_db_data_from_csv, + create_delete_sql_with_parameter, + create_insert_sql_with_parameter, + create_ultmarc_table_mapper_sut, + create_ultmarc_test_data_from_csv) + + +class TestComPharmMapper: + """ レイアウト区分102: COM_薬局 """ + + db: Database + batch_config: BatchConfig + test_file_path: str = path.dirname(__file__) + + @pytest.fixture(autouse=True, scope='function') + def pre_test(self, database: Database): + """ テスト実行前後処理 """ + self.batch_config = BatchConfig.get_instance() + # setup + self.db = database + self.db.connect() + self.db.begin() + + # testing + yield + + # teardown + self.db.rollback() + self.db.disconnect() + + def test_insert_record(self): + """ + Cases: + COM_薬局テーブルにレコードを登録する + Arranges: + - CSVデータを用意し、読み込む + - 追加対象となるレコードを削除する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_config.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_pharm_insert.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_pharm_mapper.ComPharmMapper, f'{line_number}行目:マッパークラスが期通りか' + + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_pharm_insert.csv')) + primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['sys_update_date', 'sys_regist_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ['regist_ymd', 'sys_regist_date', 'sys_update_date']: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_update_record(self): + """ + Cases: + COM_薬局テーブルのレコードを更新する + Arranges: + - CSVデータを用意し、読み込む + - 更新対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_config.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_pharm_update.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_pharm_before_update.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_pharm', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_pharm_mapper.ComPharmMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_pharm_update.csv')) + primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['sys_update_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること' + + def test_logical_delete(self): + """ + Cases: + COM_薬局テーブルのレコードを1件論理削除する + Arranges: + - CSVデータを用意し、読み込む + - 削除対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_config.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_pharm_delete.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テストデータをDBに登録 + # DBデータを読み込む + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_pharm_before_delete.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_pharm', + test_data.keys(), + test_data.values() + ) + self.db.execute(insert_sql, insert_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_pharm_mapper.ComPharmMapper, f'{line_number}行目:マッパークラスが期通りか' + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_pharm_delete.csv')) + primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['sys_update_date'] + assert_table_results(actual_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_data_list, expect_data_list): + line_number += 1 + for actual_col_name, expect_col_name in zip(actual_row, expect_row): + if actual_col_name in ignore_columns: + if expect_row[expect_col_name] is None: + assert actual_row[actual_col_name] is None, f'{line_number}行目:{actual_col_name}が、登録されていないこと' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること'