diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_area_city_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_area_city_mapper.py new file mode 100644 index 00000000..e046d558 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_area_city_mapper.py @@ -0,0 +1,117 @@ +from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ + UltmarcTableMapper +from src.batch.ultmarc.utmp_tables.tables.com_med_area_city import ComMedAreaCity + + +class ComMedAreaCityMapper(UltmarcTableMapper): + """レイアウト区分124: COM_医療圏都道府県市町村対応表 登録処理""" + + # レコード存在確認SQL + RECORD_EXISTS_QUERY = """\ + SELECT + COUNT(*) AS count_num + FROM + src05.com_med_area_city + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + # データ登録用SQL + INSERT_QUERY = """\ + INSERT INTO src05.com_med_area_city + ( + prefc_cd, + med_sphe_cd, + jis_prefc_cd, + jis_city_cd, + zen_prefcode, + zen_medareacode, + regist_ymd, + sys_regist_date, + regist_prgm_id, + sys_update_date, + update_prgm_id + ) + VALUES ( + :prefc_cd, + :med_sphe_cd, + :jis_prefc_cd, + :jis_city_cd, + :zen_prefcode, + :zen_medareacode, + :execute_date_str_ymd, + :execute_datetime, + :program_name, + :execute_datetime, + :program_name + ) + """ + + # データ更新用SQL + UPDATE_QUERY = """\ + UPDATE + src05.com_med_area_city + SET + zen_prefcode = :zen_prefcode, + zen_medareacode = :zen_medareacode, + update_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + + # 『修正区分がB(修正)かつ追加削除区分が1(退職)』の場合、物理削除 + PHYSICAL_DELETE_QUERY = """\ + DELETE FROM + src05.com_med_area_city + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + + record: ComMedAreaCity + + def __init__(self, record: list[str], db) -> None: + super().__init__(record, db, ComMedAreaCity) + program_name = __name__.split('.')[-1] # 当モジュール名(現行から変わっている) + # モジュール名をクエリパラメータに設定 + self.query_parameter['program_name'] = program_name + # 読み込んだレコード値もクエリパラメータに追加 + self.query_parameter = {**self.query_parameter, **self.record.to_sql_parameter()} + + def make_query(self): + # 『修正区分がB(修正)かつ追加削除区分が1(退職)』の場合、物理削除 + if self.record.maintflag == 'B' and self.record.addDelDiv == '1': + self.queries.append(self.PHYSICAL_DELETE_QUERY) + return + + # 追加、更新の場合 + self.queries.append(self.__make_upsert_query()) + return + + def __make_upsert_query(self): + # レコードの存在確認 + record_count = self.db.execute_select(self.RECORD_EXISTS_QUERY, self.query_parameter) + # 存在しない場合はInsert + if record_count[0]['count_num'] == 0: + return self.INSERT_QUERY + + # 存在する場合はUpdate + return self.UPDATE_QUERY diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_med_area_city.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_med_area_city.py new file mode 100644 index 00000000..a1e0e4cc --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_med_area_city.py @@ -0,0 +1,24 @@ +from src.batch.ultmarc.utmp_tables.tables.ultmarc_table import UltmarcTable + + +class ComMedAreaCity(UltmarcTable): + """レイアウト区分124: COM_医療圏都道府県市町村対応表""" + prefc_cd: str # 県コード + med_sphe_cd: str # 医療圏コード + jis_prefc_cd: str # JIS都道府県コード + jis_city_cd: str # JIS市区町村コード + zen_prefcode: str # 移動元2次コード(都道府県) + zen_medareacode: str # 移動元2次コード(医療圏コード) + maintflag: str # 修正区分 + addDelDiv: str # 追加削除区分 + + def __init__(self, record: list[str]): + super().__init__(record) + self.prefc_cd = record[1] + self.med_sphe_cd = record[2] + self.maintflag = record[3] + self.jis_prefc_cd = record[4] + self.jis_city_cd = record[5] + self.addDelDiv = record[6] + self.zen_prefcode = record[9].strip() + self.zen_medareacode = record[10].strip() diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py index 05c36138..335e2538 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/ultmarc_table_mapper_factory.py @@ -50,6 +50,8 @@ from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_thrd_med_mapper imp ComThrdMedMapper from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_snd_med_sphe_mapper import \ ComSenMedSpheMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_med_area_city_mapper import \ + ComMedAreaCityMapper from src.batch.ultmarc.utmp_tables.table_mapper.concrete.null_mapper import \ NullMapper @@ -125,7 +127,7 @@ COM_TABLE_LIST = { # COM_二次医療圏 "123": ComSenMedSpheMapper, # COM_医療圏都道府県市町村対照表 - "124": NullMapper + "124": ComMedAreaCityMapper } diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/__init__.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_delete.csv new file mode 100644 index 00000000..126012d4 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_delete.csv @@ -0,0 +1,3 @@ +"124","1","1","B","1","202","1","20141113","20141114","","" +"124","1","1","B","1","900","1","20141113","20141114","1","2" +"124","1","1","B","1","331","1","20141113","20141114","1","1" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_insert.csv new file mode 100644 index 00000000..e8bf727d --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_insert.csv @@ -0,0 +1,3 @@ +"124","01","01","A","01","202","2","20141113","20141114","01","03" +"124","01","01","A","01","236","2","20141113","20141114","","" +"124","01","01","B","01","331","2","20141113","20141114","01","01" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_update.csv new file mode 100644 index 00000000..7ec208ae --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/com_med_area_city_update.csv @@ -0,0 +1,3 @@ +"124","01","01","A","01","202","2","20141113","20141114","","" +"124","01","01","A","01","236","2","20141113","20141114","01","02" +"124","01","01","B","01","331","2","20141113","20141114","01","01" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_delete.csv new file mode 100644 index 00000000..756a99ce --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_delete.csv @@ -0,0 +1,4 @@ +"prefc_cd","med_sphe_cd","jis_prefc_cd","jis_city_cd","zen_prefcode","zen_medareacode","mod_ymd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"01","01","01","202","","","NULL","20171020","20171020","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 11:26:33","clsComMedAreaCity" +"01","01","01","236","01","02","NULL","20171020","20171020","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 11:26:33","clsComMedAreaCity" +"01","01","01","331","01","01","NULL","20171020","20171020","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 11:26:33","clsComMedAreaCity" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_update.csv new file mode 100644 index 00000000..dc0c8280 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/db_com_med_area_city_before_update.csv @@ -0,0 +1,4 @@ +"prefc_cd","med_sphe_cd","jis_prefc_cd","jis_city_cd","zen_prefcode","zen_medareacode","mod_ymd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"01","01","01","202","01","03","NULL","20171020","NULL","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 10:54:42","clsComMedAreaCity" +"01","01","01","236","","","NULL","20171020","NULL","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 10:54:42","clsComMedAreaCity" +"01","01","01","331","01","01","NULL","20171020","NULL","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 10:54:42","clsComMedAreaCity" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_delete.csv new file mode 100644 index 00000000..378928e3 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_delete.csv @@ -0,0 +1,2 @@ +"prefc_cd","med_sphe_cd","jis_prefc_cd","jis_city_cd","zen_prefcode","zen_medareacode","mod_ymd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"01","01","01","236","01","02","NULL","20171020","20171020","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2017/10/20 11:26:33","clsComMedAreaCity" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_insert.csv new file mode 100644 index 00000000..35406b92 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_insert.csv @@ -0,0 +1,4 @@ +"prefc_cd","med_sphe_cd","jis_prefc_cd","jis_city_cd","zen_prefcode","zen_medareacode","mod_ymd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"01","01","01","202","01","03","NULL","20230512","NULL","NULL","NULL","NULL","NULL","2023/05/12 10:54:42","com_med_area_city_mapper","2023/05/12 10:54:42","com_med_area_city_mapper" +"01","01","01","236","","","NULL","20230512","NULL","NULL","NULL","NULL","NULL","2023/05/12 10:54:42","com_med_area_city_mapper","2023/05/12 10:54:42","com_med_area_city_mapper" +"01","01","01","331","01","01","NULL","20230512","NULL","NULL","NULL","NULL","NULL","2023/05/12 10:54:42","com_med_area_city_mapper","2023/05/12 10:54:42","com_med_area_city_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_update.csv new file mode 100644 index 00000000..e45e2614 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/expect_com_med_area_city_update.csv @@ -0,0 +1,4 @@ +"prefc_cd","med_sphe_cd","jis_prefc_cd","jis_city_cd","zen_prefcode","zen_medareacode","mod_ymd","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"01","01","01","202","","","NULL","20171020","20230512","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2023/05/12 11:26:33","com_med_area_city_mapper" +"01","01","01","236","01","02","NULL","20171020","20230512","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2023/05/12 11:26:33","com_med_area_city_mapper" +"01","01","01","331","01","01","NULL","20171020","20230512","NULL","NULL","NULL","NULL","2017/10/20 10:54:42","clsComMedAreaCity","2023/05/12 11:26:33","com_med_area_city_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/test_com_med_area_city_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/test_com_med_area_city_mapper.py new file mode 100644 index 00000000..1e0bfcc3 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_area_city/test_com_med_area_city_mapper.py @@ -0,0 +1,269 @@ +import os.path as path +from datetime import datetime + +import pytest + +from src.batch.common.batch_context import BatchContext +from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_med_area_city_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 TestComMedAreaCityMapper: + """レイアウト区分124: COM_医療圏都道府県市町村対応表""" + + db: Database + batch_context: BatchContext + test_file_path: str = path.dirname(__file__) + + @pytest.fixture(autouse=True, scope='function') + def pre_test(self, database: Database): + """テスト実行前後処理""" + self.batch_context = BatchContext.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_context.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_med_area_city_insert.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_area_city', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_med_area_city_mapper.ComMedAreaCityMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_area_city_mapper.ComMedAreaCityMapper, 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_med_area_city_insert.csv')) + primary_keys_prefc_cd = [{'prefc_cd': columns['prefc_cd']} for columns in expect_data_list] + primary_keys_med_sphe_cd = [{'med_sphe_cd': columns['med_sphe_cd']} for columns in expect_data_list] + primary_keys_jis_prefc_cd = [{'jis_prefc_cd': columns['jis_prefc_cd']} for columns in expect_data_list] + primary_keys_jis_city_cd = [{'jis_city_cd': columns['jis_city_cd']} for columns in expect_data_list] + actual_data_list = [] + sp_field_select_sql = """\ + SELECT * FROM src05.com_med_area_city + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + for param_prefc_cd, param_med_sphe_cd, param_keys_jis_prefc_cd, param_jis_city_cd in zip( + primary_keys_prefc_cd, + primary_keys_med_sphe_cd, + primary_keys_jis_prefc_cd, + primary_keys_jis_city_cd): + sp_field_data = self.db.execute_select( + sp_field_select_sql, + {**param_prefc_cd, **param_med_sphe_cd, **param_keys_jis_prefc_cd, **param_jis_city_cd}) + assert len(sp_field_data) == 1, '1件取得できていること' + actual_data_list.append(sp_field_data[0]) + + # 期待値検査 + ignore_columns = ['regist_ymd', '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 ignore_columns: + 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_context.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_med_area_city_update.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_area_city', {'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_med_area_city_before_update.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_med_area_city', + 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_med_area_city_mapper.ComMedAreaCityMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_area_city_mapper.ComMedAreaCityMapper, 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_med_area_city_update.csv')) + primary_keys_prefc_cd = [{'prefc_cd': columns['prefc_cd']} for columns in expect_data_list] + primary_keys_med_sphe_cd = [{'med_sphe_cd': columns['med_sphe_cd']} for columns in expect_data_list] + primary_keys_jis_prefc_cd = [{'jis_prefc_cd': columns['jis_prefc_cd']} for columns in expect_data_list] + primary_keys_jis_city_cd = [{'jis_city_cd': columns['jis_city_cd']} for columns in expect_data_list] + actual_data_list = [] + sp_field_select_sql = """\ + SELECT * FROM src05.com_med_area_city + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + for param_prefc_cd, param_med_sphe_cd, param_keys_jis_prefc_cd, param_jis_city_cd in zip( + primary_keys_prefc_cd, + primary_keys_med_sphe_cd, + primary_keys_jis_prefc_cd, + primary_keys_jis_city_cd): + sp_field_data = self.db.execute_select( + sp_field_select_sql, + {**param_prefc_cd, **param_med_sphe_cd, **param_keys_jis_prefc_cd, **param_jis_city_cd}) + assert len(sp_field_data) == 1, '1件取得できていること' + actual_data_list.append(sp_field_data[0]) + + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', '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 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_context.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_med_area_city_delete.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_area_city', {'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_med_area_city_before_delete.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_med_area_city', + 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_med_area_city_mapper.ComMedAreaCityMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_area_city_mapper.ComMedAreaCityMapper, 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_med_area_city_delete.csv')) + primary_keys_prefc_cd = [{'prefc_cd': columns['prefc_cd']} for columns in expect_data_list] + primary_keys_med_sphe_cd = [{'med_sphe_cd': columns['med_sphe_cd']} for columns in expect_data_list] + primary_keys_jis_prefc_cd = [{'jis_prefc_cd': columns['jis_prefc_cd']} for columns in expect_data_list] + primary_keys_jis_city_cd = [{'jis_city_cd': columns['jis_city_cd']} for columns in expect_data_list] + actual_data_list = [] + sp_field_select_sql = """\ + SELECT * FROM src05.com_med_area_city + WHERE + prefc_cd = :prefc_cd + AND + med_sphe_cd = :med_sphe_cd + AND + jis_prefc_cd = :jis_prefc_cd + AND + jis_city_cd = :jis_city_cd + """ + for param_prefc_cd, param_med_sphe_cd, param_keys_jis_prefc_cd, param_jis_city_cd in zip( + primary_keys_prefc_cd, + primary_keys_med_sphe_cd, + primary_keys_jis_prefc_cd, + primary_keys_jis_city_cd): + sp_field_data = self.db.execute_select( + sp_field_select_sql, + {**param_prefc_cd, **param_med_sphe_cd, **param_keys_jis_prefc_cd, **param_jis_city_cd}) + assert len(sp_field_data) == 1, '1件取得できていること' + actual_data_list.append(sp_field_data[0]) + + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', '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 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}が、期待値以降であること'