diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_prefc_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_prefc_mapper.py new file mode 100644 index 00000000..475a6b9a --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_med_prefc_mapper.py @@ -0,0 +1,129 @@ +from src.batch.ultmarc.utmp_tables.table_mapper.ultmarc_table_mapper import \ + UltmarcTableMapper +from src.batch.ultmarc.utmp_tables.tables.com_med_prefc import ComMedPrefc + + +class ComMedPrefcMapper(UltmarcTableMapper): + """レイアウト区分121: COM_医療圏都道府県 登録処理""" + + # レコード存在確認SQL + RECORD_EXISTS_QUERY = """\ + SELECT + COUNT(*) AS count_num + FROM + src05.com_med_prefc + WHERE + pref_code = :pref_code + """ + # データ登録用SQL + INSERT_QUERY = """\ + INSERT INTO src05.com_med_prefc + ( + pref_code, + rev_date, + post_date, + psy_bednumtg, + psy_bednumgen, + psy_bednumdate, + psy_eqbednum, + tb_bednumtg, + tb_bednumgen, + tb_bednumdate, + tb_eqbednum, + inf_bednumtg, + inf_bednumgen, + inf_bednumdate, + inf_eqbednum, + regist_ymd, + sys_regist_date, + regist_prgm_id, + sys_update_date, + update_prgm_id + ) + VALUES ( + :pref_code, + :rev_date, + :post_date, + :psy_bednum_tg, + :psy_bednum_gen, + :psy_bednum_date, + :psy_eqbed_num, + :tb_bednum_tg, + :tb_bednum_gen, + :tb_bednum_date, + :tb_eqbed_num, + :inf_bednum_tg, + :inf_bednum_gen, + :inf_bednum_date, + :inf_eqbed_num, + :execute_date_str_ymd, + :execute_datetime, + :program_name, + :execute_datetime, + :program_name + ) + """ + + # データ更新用SQL + UPDATE_QUERY = """\ + UPDATE + src05.com_med_prefc + SET + rev_date = :rev_date, + post_date = :post_date, + psy_bednumtg = :psy_bednum_tg, + psy_bednumgen = :psy_bednum_gen, + psy_bednumdate = :psy_bednum_date, + psy_eqbednum = :psy_eqbed_num, + tb_bednumtg = :tb_bednum_tg, + tb_bednumgen = :tb_bednum_gen, + tb_bednumdate = :tb_bednum_date, + tb_eqbednum = :tb_eqbed_num, + inf_bednumtg = :inf_bednum_tg, + inf_bednumgen = :inf_bednum_gen, + inf_bednumdate = :inf_bednum_date, + inf_eqbednum = :inf_eqbed_num, + update_ymd = :execute_date_str_ymd, + sys_update_date = :execute_datetime, + update_prgm_id = :program_name + WHERE + pref_code = :pref_code + """ + + # 修正区分が「C(削除)」の場合、物理削除 + PHYSICAL_DELETE_QUERY = """\ + DELETE FROM + src05.com_med_prefc + WHERE + pref_code = :pref_code + """ + + record: ComMedPrefc + + def __init__(self, record: list[str], db) -> None: + super().__init__(record, db, ComMedPrefc) + 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): + # 修正区分がC(削除)の場合、物理削除 + if self.record.maintflag == 'C': + 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_prefc.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_med_prefc.py new file mode 100644 index 00000000..e08adc88 --- /dev/null +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_med_prefc.py @@ -0,0 +1,48 @@ +from src.batch.ultmarc.utmp_tables.tables.ultmarc_table import UltmarcTable + + +class ComMedPrefc(UltmarcTable): + """レイアウト区分121: COM_医療圏都道府県""" + pref_code: str # 都道府県コード + rev_date: str # 医療圏メンテナンス年月日 + post_date: str # 公示年月日 + psy_bednum_tg: str # 精神_基準病床数 or 整備目標数 + psy_bednum_gen: str # 精神_既存病床数(病床数) + psy_bednum_date: str # 精神_既存病床数(年月日) + psy_eqbed_num: str # 精神_過不足病床数(差引) + tb_bednum_tg: str # 結核_基準病床数 or 整備目標数 + tb_bednum_gen: str # 結核_既存病床数(病床数) + tb_bednum_date: str # 結核_既存病床数(年月日) + tb_eqbed_num: str # 結核_過不足病床数(差引) + inf_bednum_tg: str # 感染症_基準病床数 or 整備目標数 + inf_bednum_gen: str # 感染症_既存病床数(病床数) + inf_bednum_date: str # 感染症_既存病床数(年月日) + inf_eqbed_num: str # 感染症_過不足病床数(差引) + maintflag: str # 修正区分 + + def __init__(self, record: list[str]): + super().__init__(record) + self.pref_code = record[1] + self.maintflag = record[2] + self.rev_date = record[5] + self.post_date = record[6] + self.psy_bednum_tg = record[7].strip() + self.psy_bednum_gen = record[8].strip() + self.psy_bednum_date = record[9] + self.psy_eqbed_num = record[10] + self.tb_bednum_tg = record[11].strip() + self.tb_bednum_gen = record[12].strip() + self.tb_bednum_date = record[13] + self.tb_eqbed_num = record[14] + self.inf_bednum_tg = record[15].strip() + self.inf_bednum_gen = record[16].strip() + self.inf_bednum_date = record[17] + self.inf_eqbed_num = record[18] + + # decimal型のカラム値は、空文字で渡ってきた場合はNULLに変換する + self.psy_bednum_tg = self.psy_bednum_tg if len(self.psy_bednum_tg) > 0 else None + self.psy_bednum_gen = self.psy_bednum_gen if len(self.psy_bednum_gen) > 0 else None + self.tb_bednum_tg = self.tb_bednum_tg if len(self.tb_bednum_tg) > 0 else None + self.tb_bednum_gen = self.tb_bednum_gen if len(self.tb_bednum_gen) > 0 else None + self.inf_bednum_tg = self.inf_bednum_tg if len(self.inf_bednum_tg) > 0 else None + self.inf_bednum_gen = self.inf_bednum_gen if len(self.inf_bednum_gen) > 0 else None 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 479253dc..7a60ed63 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 @@ -34,6 +34,8 @@ from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_inst_att_mapper imp ComInstAttMapper from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_cop_hp_mapper import \ ComCopHpMapper +from src.batch.ultmarc.utmp_tables.table_mapper.concrete.com_med_prefc_mapper import \ + ComMedPrefcMapper from src.batch.ultmarc.utmp_tables.table_mapper.concrete.null_mapper import \ NullMapper @@ -103,7 +105,7 @@ COM_TABLE_LIST = { # COM_政策医療 "028": ComPolicyMedMapper, # COM_医療圏都道府県 - "121": NullMapper, + "121": ComMedPrefcMapper, # COM_医療圏3次マスタ "122": NullMapper, # COM_二次医療圏 diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/__init__.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/__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_prefc/com_med_prefc_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_delete.csv new file mode 100644 index 00000000..2416d338 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_delete.csv @@ -0,0 +1,3 @@ +"121","01","C","20141118","20141122","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4" +"121","09","C","20141118","20141122","","","","","","","","","","","","","","" +"121","03","C","20141118","20141122","20170101","20170329","9420","9454","20170930","39","39","139","20170930","707","70","70","20170930","7" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_insert.csv new file mode 100644 index 00000000..0f161d10 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_insert.csv @@ -0,0 +1,4 @@ +"121","01","A","20141118","20141122","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4" +"121","02","A","20141118","20141122","20160601","20130722","3870","4511","20130101","641","60","66","20130101","6","32","20","20130101","-12" +"121","03","A","20141118","20141122","20140101","20130329","4420","4454","20120930","34","30","137","20120930","107","40","40","20120930","0" +"121","99","A","","","20140101","20130329","123456","123456","20120930","1234567","123456","123456","20120930","1234567","123456","123465","20120930","1234567" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_update.csv new file mode 100644 index 00000000..0c5f5b39 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/com_med_prefc_update.csv @@ -0,0 +1,3 @@ +"121","01","A","20141118","20141122","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4" +"121","02","A","20141118","20141122","","","","","","","","","","","","","","" +"121","03","B","20141118","20141122","20170101","20170329","9420","9454","20170930","39","39","139","20170930","707","70","70","20170930","7" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_delete.csv new file mode 100644 index 00000000..892066e1 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_delete.csv @@ -0,0 +1,4 @@ +"pref_code","rev_date","post_date","psy_bednumtg","psy_bednumgen","psy_bednumdate","psy_eqbednum","tb_bednumtg","tb_bednumgen","tb_bednumdate","tb_eqbednum","inf_bednumtg","inf_bednumgen","inf_bednumdate","inf_eqbednum","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","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4","20171019","20171019","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:01:04","clsComMedPrefc" +"02","","","NULL","NULL","","","NULL","NULL","","","NULL","NULL","","","20171019","20171019","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:01:04","clsComMedPrefc" +"03","20170101","20170329","9420","9454","20170930","39","39","139","20170930","707","70","70","20170930","7","20171019","20171019","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:01:04","clsComMedPrefc" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_update.csv new file mode 100644 index 00000000..d5ea9119 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/db_com_med_prefc_before_update.csv @@ -0,0 +1,4 @@ +"pref_code","rev_date","post_date","psy_bednumtg","psy_bednumgen","psy_bednumdate","psy_eqbednum","tb_bednumtg","tb_bednumgen","tb_bednumdate","tb_eqbednum","inf_bednumtg","inf_bednumgen","inf_bednumdate","inf_eqbednum","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","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:00:05","clsComMedPrefc" +"02","20160601","20130722","3870","4511","20130101","641","60","66","20130101","6","32","20","20130101","-12","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:00:05","clsComMedPrefc" +"03","20140101","20130329","4420","4454","20120930","34","30","137","20120930","107","40","40","20120930","0","20171019","NULL","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:00:05","clsComMedPrefc" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_delete.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_delete.csv new file mode 100644 index 00000000..891196ec --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_delete.csv @@ -0,0 +1,2 @@ +"pref_code","rev_date","post_date","psy_bednumtg","psy_bednumgen","psy_bednumdate","psy_eqbednum","tb_bednumtg","tb_bednumgen","tb_bednumdate","tb_eqbednum","inf_bednumtg","inf_bednumgen","inf_bednumdate","inf_eqbednum","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"02","","","NULL","NULL","","","NULL","NULL","","","NULL","NULL","","","20171019","20171019","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2017/10/19 12:01:04","clsComMedPrefc" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_insert.csv new file mode 100644 index 00000000..a6b694f7 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_insert.csv @@ -0,0 +1,5 @@ +"pref_code","rev_date","post_date","psy_bednumtg","psy_bednumgen","psy_bednumdate","psy_eqbednum","tb_bednumtg","tb_bednumgen","tb_bednumdate","tb_eqbednum","inf_bednumtg","inf_bednumgen","inf_bednumdate","inf_eqbednum","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","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 12:00:05","com_med_prefc_mapper","2023/05/11 12:00:05","com_med_prefc_mapper" +"02","20160601","20130722","3870","4511","20130101","641","60","66","20130101","6","32","20","20130101","-12","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 12:00:05","com_med_prefc_mapper","2023/05/11 12:00:05","com_med_prefc_mapper" +"03","20140101","20130329","4420","4454","20120930","34","30","137","20120930","107","40","40","20120930","0","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 12:00:05","com_med_prefc_mapper","2023/05/11 12:00:05","com_med_prefc_mapper" +"99","20140101","20130329","123456","123456","20120930","1234567","123456","123456","20120930","1234567","123456","123465","20120930","1234567","20230511","NULL","NULL","NULL","NULL","NULL","2023/05/11 12:00:05","com_med_prefc_mapper","2023/05/11 12:00:05","com_med_prefc_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_update.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_update.csv new file mode 100644 index 00000000..7d595e49 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/expect_com_med_prefc_update.csv @@ -0,0 +1,4 @@ +"pref_code","rev_date","post_date","psy_bednumtg","psy_bednumgen","psy_bednumdate","psy_eqbednum","tb_bednumtg","tb_bednumgen","tb_bednumdate","tb_eqbednum","inf_bednumtg","inf_bednumgen","inf_bednumdate","inf_eqbednum","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","20130501","20130329","18967","19615","20130201","648","143","205","20130201","62","98","94","20130201","-4","20171019","20230511","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2023/05/11 12:01:04","com_med_prefc_mapper" +"02","","","NULL","NULL","","","NULL","NULL","","","NULL","NULL","","","20171019","20230511","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2023/05/11 12:01:04","com_med_prefc_mapper" +"03","20170101","20170329","9420","9454","20170930","39","39","139","20170930","707","70","70","20170930","7","20171019","20230511","NULL","NULL","NULL","NULL","2017/10/19 12:00:05","clsComMedPrefc","2023/05/11 12:01:04","com_med_prefc_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/test_com_med_prefc_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/test_com_med_prefc_mapper.py new file mode 100644 index 00000000..495e1cca --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_med_prefc/test_com_med_prefc_mapper.py @@ -0,0 +1,220 @@ +import os.path as path +from datetime import datetime +from decimal import Decimal + +import pytest + +from src.batch.common.batch_context import BatchContext +from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_med_prefc_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 TestComMedPrefcMapper: + """レイアウト区分121: COM_医療圏都道府県""" + + db: Database + batch_context: BatchContext + test_file_path: str = path.dirname(__file__) + + # decimal型のカラム群 + decimal_columns = [ + 'psy_bednumtg', + 'psy_bednumgen', + 'tb_bednumtg', + 'tb_bednumgen', + 'inf_bednumtg', + 'inf_bednumgen' + ] + + @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_prefc_insert.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_prefc', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + + # Act + for line_number, line in enumerate(test_dat_file, start=1): + sut: com_med_prefc_mapper.ComMedPrefcMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_prefc_mapper.ComMedPrefcMapper, 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_prefc_insert.csv')) + primary_keys = [f"'{primary_key['pref_code']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_med_prefc WHERE pref_code IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'sys_update_date', 'sys_regist_date'] + self.decimal_columns + 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 actual_col_name in self.decimal_columns: + if expect_row[expect_col_name] is not None and len(expect_row[expect_col_name]) > 0: + assert actual_row[actual_col_name] == Decimal(expect_row[expect_col_name]), 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_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_prefc_update.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_prefc', {'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_prefc_before_update.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_med_prefc', + 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_prefc_mapper.ComMedPrefcMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_prefc_mapper.ComMedPrefcMapper, 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_prefc_update.csv')) + primary_keys = [f"'{primary_key['pref_code']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_med_prefc WHERE pref_code IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'sys_update_date', 'sys_regist_date'] + self.decimal_columns + 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: + if actual_col_name in self.decimal_columns: + if expect_row[expect_col_name] is not None and len(expect_row[expect_col_name]) > 0: + assert actual_row[actual_col_name] == Decimal(expect_row[expect_col_name]), 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_prefc_delete.csv')) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_med_prefc', {'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_prefc_before_delete.csv')) + for test_data in test_sql_data_list: + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_med_prefc', + 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_prefc_mapper.ComMedPrefcMapper = create_ultmarc_table_mapper_sut(line, self.db) + assert type(sut) is com_med_prefc_mapper.ComMedPrefcMapper, 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_prefc_delete.csv')) + primary_keys = [f"'{primary_key['pref_code']}'" for primary_key in expect_data_list] + actual_select_sql = f"SELECT * FROM src05.com_med_prefc WHERE pref_code IN ({','.join(primary_keys)})" + actual_data_list = self.db.execute_select(actual_select_sql) + # 期待値検査 + ignore_columns = ['regist_ymd', 'update_ymd', 'sys_update_date', 'sys_regist_date'] + self.decimal_columns + 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: + if actual_col_name in self.decimal_columns: + if expect_row[expect_col_name] is not None and len(expect_row[expect_col_name]) > 0: + assert actual_row[actual_col_name] == Decimal(expect_row[expect_col_name]), f'{line_number}行目:{actual_col_name}が、期待値と一致すること' + else: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること'