From ea9b52c21eccb4506b05f8992f24142d2d10c655 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Tue, 11 Apr 2023 11:54:40 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20COM=5F=E5=8C=BB=E5=B8=AB=E5=8B=A4?= =?UTF-8?q?=E5=8B=99=E5=85=88=E3=81=AE=E7=99=BB=E9=8C=B2=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=92=E5=86=8D=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concrete/com_dr_wrkplace_mapper.py | 12 +- .../utmp_tables/tables/com_dr_wrkplace.py | 36 +- .../com_dr_wrkplace_insert.csv | 10 + .../db_com_blng_sec_before_insert.csv | 9 + .../expect_com_dr_wrkplace_insert.csv | 11 + .../test_com_dr_wrkplace_mapper.py | 343 ++++-------------- 6 files changed, 128 insertions(+), 293 deletions(-) create mode 100644 ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/com_dr_wrkplace_insert.csv create mode 100644 ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/db_com_blng_sec_before_insert.csv create mode 100644 ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/expect_com_dr_wrkplace_insert.csv diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_dr_wrkplace_mapper.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_dr_wrkplace_mapper.py index 0e816f06..493eb8a4 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_dr_wrkplace_mapper.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/table_mapper/concrete/com_dr_wrkplace_mapper.py @@ -4,7 +4,7 @@ from src.batch.ultmarc.utmp_tables.tables.com_dr_wrkplace import ComDrWrkplace class ComDrWrkplaceMapper(UltmarcTableMapper): - """COM_医師勤務先 登録処理""" + """レイアウト区分501-01:COM_医師勤務先 登録処理""" # レコード存在確認SQL RECORD_EXISTS_QUERY = """\ @@ -171,11 +171,13 @@ class ComDrWrkplaceMapper(UltmarcTableMapper): return # 必ず1件 com_blng_sec_record = com_blng_sec_records[0] - if com_blng_sec_record['blig_sec_kane'] != '' and com_blng_sec_record['blig_sec_kane'] is not None: - self.record.sectname_kana = com_blng_sec_record['blig_sec_kane'] + if com_blng_sec_record['blng_sec_kana'] != '' and com_blng_sec_record['blng_sec_kana'] is not None: + self.record.sectname_kana = com_blng_sec_record['blng_sec_kana'] + self.query_parameter['sectname_kana'] = com_blng_sec_record['blng_sec_kana'] - if com_blng_sec_record['blig_sec_name'] != '' and com_blng_sec_record['blig_sec_name'] is not None: - self.record.sectname = com_blng_sec_record['blig_sec_name'] + if com_blng_sec_record['blng_sec_name'] != '' and com_blng_sec_record['blng_sec_name'] is not None: + self.record.sectname = com_blng_sec_record['blng_sec_name'] + self.query_parameter['sectname'] = com_blng_sec_record['blng_sec_name'] def __make_queries(self): # レコードの存在確認 diff --git a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_dr_wrkplace.py b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_dr_wrkplace.py index ec501438..9472206d 100644 --- a/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_dr_wrkplace.py +++ b/ecs/jskult-batch-daily/src/batch/ultmarc/utmp_tables/tables/com_dr_wrkplace.py @@ -2,7 +2,7 @@ from src.batch.ultmarc.utmp_tables.tables.ultmarc_table import UltmarcTable class ComDrWrkplace(UltmarcTable): - """COM_医師勤務先""" + """レイアウト区分501-01:COM_医師勤務先""" maint_flag: str # 修正区分 dcfdr_id: str # 個人コード(ID) dcfdr_code: str # 個人コード(個人コード) @@ -24,26 +24,26 @@ class ComDrWrkplace(UltmarcTable): def __init__(self, record: list[str]): super().__init__(record) - self.maintflag = record[4] - self.dcfdr_id = record[1] - self.dcfdr_code = record[2] - self.dcfdr_yobi = record[3].strip() - self.hp_id = record[5] - self.hp_code = record[6] - self.hp_yobi = record[7].strip() - self.drretflag = record[8] - self.maintdate = record[9] - self.trndate = record[10] - self.postcode = record[11].strip() - self.identitycode = record[12].strip() + self.maintflag = record[4] + self.dcfdr_id = record[1] + self.dcfdr_code = record[2] + self.dcfdr_yobi = record[3].strip() + self.hp_id = record[5] + self.hp_code = record[6] + self.hp_yobi = record[7].strip() + self.drretflag = record[8] + self.maintdate = record[9] + self.trndate = record[10] + self.postcode = record[11].strip() + self.identitycode = record[12].strip() # 所属部科の集合項目 - self.sectcode = record[13].strip() - self.sectname = record[14].strip() + self.sectcode = record[13].strip() + self.sectname = record[14].strip() self.sectname_kana = record[15].strip() - - self.notdm_flg = record[16].strip() - + + self.notdm_flg = record[16].strip() + # ID、コード、予備を結合してフル桁コードに変換 self.full_dcfdr_code = ''.join([self.dcfdr_id, self.dcfdr_code, self.dcfdr_yobi]) self.full_hp_code = ''.join([self.hp_id, self.hp_code, self.hp_yobi]) diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/com_dr_wrkplace_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/com_dr_wrkplace_insert.csv new file mode 100644 index 00000000..c0abf3ce --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/com_dr_wrkplace_insert.csv @@ -0,0 +1,10 @@ +"502","01","995783","","A","00","5414992","","2","20141113","20141114","501","","","","","" +"502","01","995783","","A","00","5507600","","2","20141113","20141114","133","144","9112","","","" +"502","01","997682","","A","00","5402984","","2","20141113","20141114","165","144","1512","","","" +"502","01","997682","","A","00","5408060","","2","20141113","20141114","","144","6802","","","" +"502","01","997682","","A","00","5412977","","2","20141113","20141114","","144","6720","","","" +"502","01","997906","","A","00","5409446","","2","20141113","20141114","501","","1118","","","" +"502","01","997906","","A","00","5503358","","2","20141113","20141114","172","144","1118","","","" +"502","01","997906","","A","00","5504428","","2","20141113","20141114","","144","7212","","","" +"502","01","997906","","A","00","5507600","","2","20141113","20141114","","144","9114","","","" +"502","01","999613","","A","00","5504428","","2","20141113","20141114","","144","5140","","","" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/db_com_blng_sec_before_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/db_com_blng_sec_before_insert.csv new file mode 100644 index 00000000..bb604b15 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/db_com_blng_sec_before_insert.csv @@ -0,0 +1,9 @@ +"blng_sec_cd","blng_sec_kana","blng_sec_name","regist_ymd","update_ymd","delete_ymd","inst_category","trt_category","category_sort","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"1512","シヨウカキゲカ","消化器外科","20150825","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-25 00:10:58","clsComBlngSec","2022-05-16 22:18:28","clsComBlngSec" +"6802","シヨウカキゲカガク1","消化器外科学Ⅰ","20150825","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-25 00:10:58","clsComBlngSec","2022-05-30 22:18:48","clsComBlngSec" +"6720","シヨウカキゲカガク","消化器外科学","20150825","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-25 00:10:58","clsComBlngSec","2019-12-23 22:13:44","clsComBlngSec" +"1118","ケツエキナイカ","血液内科","20150825","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-25 00:10:58","clsComBlngSec","2016-05-17 00:13:18","clsComBlngSec" +"7212","ユケツ.サイボウチリヨウガク","輸血・細胞治療学","20150818","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-18 00:12:58","clsComBlngSec","2021-01-11 22:15:40","clsComBlngSec" +"5140","ヤクリガク","薬理学","20150818","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-18 00:12:58","clsComBlngSec","2022-08-22 22:23:47","clsComBlngSec" +"9112","ハツセイ.セイシヨクブモン","発生・生殖部門","20150818","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-18 00:12:58","clsComBlngSec","2022-08-01 22:23:53","clsComBlngSec" +"9114","サイボウイシヨクブモン","細胞移植部門","20150818","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2015-08-18 00:12:58","clsComBlngSec","2022-08-01 22:23:53","clsComBlngSec" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/expect_com_dr_wrkplace_insert.csv b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/expect_com_dr_wrkplace_insert.csv new file mode 100644 index 00000000..3f8923af --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/expect_com_dr_wrkplace_insert.csv @@ -0,0 +1,11 @@ +"dcf_dsf_inst_cd","dcf_pcf_dr_cd","blng_sec_cd","post_cd","identity_cd","aply_start_ymd","blng_sec_name_kana","blng_sec_name","notdm_flg","regist_ymd","update_ymd","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id" +"005414992","01995783",,"501",,"2020-02-22",,,,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 14:54:00","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005507600","01995783","9112","133","144","2020-02-22","ハツセイ.セイシヨクブモン","発生・生殖部門",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:16","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005402984","01997682","1512","165","144","2020-02-22","シヨウカキゲカ","消化器外科",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:16","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005408060","01997682","6802",,"144","2020-02-22","シヨウカキゲカガク1","消化器外科学Ⅰ",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:16","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005412977","01997682","6720",,"144","2020-02-22","シヨウカキゲカガク","消化器外科学",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:16","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005409446","01997906","1118","501",,"2020-02-22","ケツエキナイカ","血液内科",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:16","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005503358","01997906","1118","172","144","2020-02-22","ケツエキナイカ","血液内科",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005504428","01997906","7212",,"144","2020-02-22","ユケツ.サイボウチリヨウガク","輸血・細胞治療学",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005507600","01997906","9114",,"144","2020-02-22","サイボウイシヨクブモン","細胞移植部門",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" +"005504428","01999613","5140",,"144","2020-02-22","ヤクリガク","薬理学",,"2022-02-02","NULL","NULL","NULL","NULL","NULL","2022-02-02 10:45:17","com_dr_wrkplace_mapper","2022-02-02 14:54:00","com_dr_wrkplace_mapper" diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/test_com_dr_wrkplace_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/test_com_dr_wrkplace_mapper.py index 12fe23a2..6616176f 100644 --- a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/test_com_dr_wrkplace_mapper.py +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/com_dr_wrkplace/test_com_dr_wrkplace_mapper.py @@ -1,4 +1,5 @@ -from datetime import date, datetime +import os.path as path +from datetime import datetime import pytest @@ -7,12 +8,11 @@ from src.batch.ultmarc.utmp_tables.table_mapper.concrete import \ com_dr_wrkplace_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_common_column_names, - create_ultmarc_common_column_values, create_ultmarc_table_mapper_sut, - create_ultmarc_test_csv, get_module_name) + create_ultmarc_test_data_from_csv) class TestComDrWrkplaceMapper: @@ -20,24 +20,26 @@ class TestComDrWrkplaceMapper: db: Database batch_config: BatchConfig - dr_wrkplace_table_columns = [ - "dcf_dsf_inst_cd", "dcf_pcf_dr_cd", "blng_sec_cd", "post_cd", "identity_cd", - "aply_start_ymd", "blng_sec_name_kana", "blng_sec_name", "notdm_flg"] \ - + create_ultmarc_common_column_names() - # 削除日カラムはないので消す - dr_wrkplace_table_columns.remove('delete_ymd') + test_file_path: str = path.dirname(__file__) + # dr_wrkplace_table_columns = [ + # "dcf_dsf_inst_cd", "dcf_pcf_dr_cd", "blng_sec_cd", "post_cd", "identity_cd", + # "aply_start_ymd", "blng_sec_name_kana", "blng_sec_name", "notdm_flg"] + # + create_ultmarc_common_column_names() + # # 削除日カラムはないので消す + # dr_wrkplace_table_columns.remove('delete_ymd') - dr_wrkplace_his_table_columns = [ - "dr_wrkplace_his_key", "dcf_dsf_inst_cd", "dcf_pcf_dr_cd", "blng_sec_cd", "post_cd", "identity_cd", - "aply_start_ymd", "blng_sec_name_kana", "blng_sec_name", "notdm_flg", "aply_end_ymd"] \ - + create_ultmarc_common_column_names() - # 削除日カラムはないので消す - dr_wrkplace_his_table_columns.remove('delete_ymd') + # dr_wrkplace_his_table_columns = [ + # "dr_wrkplace_his_key", "dcf_dsf_inst_cd", "dcf_pcf_dr_cd", "blng_sec_cd", "post_cd", "identity_cd", + # "aply_start_ymd", "blng_sec_name_kana", "blng_sec_name", "notdm_flg", "aply_end_ymd"] \ + # + create_ultmarc_common_column_names() + # # 削除日カラムはないので消す + # dr_wrkplace_his_table_columns.remove('delete_ymd') - @pytest.fixture(autouse=True, scope='function') + @ 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() @@ -50,7 +52,7 @@ class TestComDrWrkplaceMapper: self.db.rollback() self.db.disconnect() - def test_insert_record(self, expect_datetime: datetime, expect_date_str: str): + def test_insert_record(self): """ Cases: COM_DCF医師勤務先テーブルにレコードを登録する @@ -65,24 +67,8 @@ class TestComDrWrkplaceMapper: # Arrange # 処理日設定 self.batch_config.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') - # テストデータ作成 - csv_floating_data_lst = [ - ['01', '995783', '00', '5414992', '2', '501', '', '', '', '', '1', 'A'], - ['01', '995783', '00', '5507600', '2', '133', '144', '9112', '', '', '', 'A'], - ['01', '997682', '00', '5402984', '2', '165', '144', '1512', '', '', '', 'A'], - ['01', '997682', '00', '5408060', '2', '', '144', '6802', '', '', '', 'A'], - ['01', '997682', '00', '5412977', '2', '', '144', '6720', '', '', '', 'A'], - ['01', '997906', '00', '5409446', '2', '501', '', '1118', '', '', '', 'A'], - ['01', '997906', '00', '5503358', '2', '172', '144', '1118', '', '', '', 'A'], - ['01', '997906', '00', '5504428', '2', '', '144', '7212', '', '', '', 'A'], - ['01', '997906', '00', '5507600', '2', '', '144', '9114', '内分泌・骨代謝外来', 'ナイブンピ.ホネタイシヤガイライ', '', 'A'], - ['01', '999613', '00', '5504428', '2', '', '144', '5140', '内分泌・骨代謝外来', 'ナイブンピ.ホネタイシヤガイライ', '', 'A'], - ] - test_data_list = [ - f'"502","{data[0]}","{data[1]}",,"{data[11]}","{data[2]}","{data[3]}",,"{data[4]}","20141113","20141114","{data[5]}","{data[6]}","{data[7]}","{data[8]}","{data[9]}","{data[10]}"' - for data in csv_floating_data_lst - ] - test_dat_file = create_ultmarc_test_csv(test_data_list) + # テスト用のCSVを読み込む + test_dat_file = create_ultmarc_test_data_from_csv(path.join(self.test_file_path, 'com_dr_wrkplace_insert.csv')) # 一旦全データをDBから削除 # COM_医師勤務先 delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_dr_wrkplace', {'1': '1'}) @@ -90,252 +76,69 @@ class TestComDrWrkplaceMapper: # COM_医師勤務先履歴 delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_dr_wrkplace_his', {'1': '1'}) self.db.execute(delete_sql, delete_parameter) - - # sut(system under test)作成 - for i, line in enumerate(test_dat_file, start=1): - sut: com_dr_wrkplace_mapper.ComDrWrkplaceMapper = create_ultmarc_table_mapper_sut(line, self.db) - assert type(sut) is com_dr_wrkplace_mapper.ComDrWrkplaceMapper, f'{i}行目:マッパークラスが期通りか' - - # Act - sut.make_query() - sut.execute_queries() - - # Assert - # 期待値作成 - # 期待値となるモジュール名 - module_name = get_module_name(com_dr_wrkplace_mapper) - expect_data = csv_floating_data_lst[i - 1] - - expect_row = [ - f'{expect_data[2]}{expect_data[3]}', - f'{expect_data[0]}{expect_data[1]}', - expect_data[7], - expect_data[5], - expect_data[6], - datetime.date(expect_datetime), - expect_data[9], - expect_data[8], - expect_data[10] - ] - ultmarc_common_column_values = create_ultmarc_common_column_values( - regist_ymd=datetime.date(expect_datetime), - sys_regist_date=expect_datetime, - regist_prgm_id=module_name, - sys_update_date=expect_datetime, - update_prgm_id=module_name - ) - # 削除日カラムが存在しないので消す - ultmarc_common_column_values.pop(2) - expect_row += ultmarc_common_column_values - - expect_rows = [{c: r for c, r in zip(self.dr_wrkplace_table_columns, expect_row)}] - dcf_pcf_dr_cd = f'{expect_data[0]}{expect_data[1]}' - dcf_dcf_inst_cd = f'{expect_data[2]}{expect_data[3]}' - actual_rows = self.db.execute_select(f"SELECT * FROM src05.com_dr_wrkplace WHERE dcf_dsf_inst_cd = '{dcf_dcf_inst_cd}' AND dcf_pcf_dr_cd = '{dcf_pcf_dr_cd}'") - - # 期待値検査 - assert_table_results(actual_rows, expect_rows, line_number=i, ignore_col_name=['sys_update_date', 'sys_regist_date']) - - # 動的日付項目の個別確認 - for actual_row, expect_row in zip(actual_rows, expect_rows): - for actual_col_name, expect_col_name in zip(actual_row, expect_row): - if actual_col_name in ['sys_regist_date', 'sys_update_date']: - assert actual_row[actual_col_name] <= expect_row[expect_col_name], f'{i}行目:{actual_col_name}が、期待値の日時以前であること' - - # 履歴テーブルの存在チェック - history_table = self.db.execute_select(f"SELECT * FROM src05.com_dr_wrkplace_his WHERE dcf_dsf_inst_cd = '{dcf_dcf_inst_cd}' AND dcf_pcf_dr_cd = '{dcf_pcf_dr_cd}'") - assert len(history_table) == 0, '履歴テーブルが作成されていないこと' - - def test_update_record(self, expect_datetime: datetime, expect_date_str: str): - """ - Cases: - COM_DCF医師勤務先テーブルのレコードを更新する - Arranges: - - CSVデータを用意する - - 追加対象となるレコードを削除する - Expects: - - COM_医師勤務先の登録内容が期待値と一致すること - - COM_医師勤務先履歴の登録内容が期待値と一致すること - """ - - # Arrange - # 処理日設定 - self.batch_config.syor_date = '2020/02/23' - # テストデータ作成 - csv_floating_data_lst = [ - ['01', '997906', '00', '5409446', '2', '', '', '', '', '', '@', 'B'], - ['01', '995783', '00', '5507600', '2', '@', '802', '@', '', '', '', 'B'], - ['01', '997682', '00', '5402984', '2', '165', '@', '', '', '', '', 'B'], - ['01', '999613', '00', '5504428', '2', '501', '', '9999', '内分泌・骨代謝外来', 'ナイブンピ.ホネタイシヤガイライ', '', 'B'], - ] - test_data_list = [ - f'"502","{data[0]}","{data[1]}",,"{data[11]}","{data[2]}","{data[3]}",,"{data[4]}","20141113","20141114","{data[5]}","{data[6]}","{data[7]}","{data[8]}","{data[9]}","{data[10]}"' - for data in csv_floating_data_lst - ] - test_dat_file = create_ultmarc_test_csv(test_data_list) - # 一旦全データをDBから削除 - # COM_医師勤務先 - delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_dr_wrkplace', {'1': '1'}) - self.db.execute(delete_sql, delete_parameter) - # COM_医師勤務先履歴 - delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_dr_wrkplace_his', {'1': '1'}) + # COM_所属部科 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_blng_sec', {'1': '1'}) self.db.execute(delete_sql, delete_parameter) - db_floating_data_list = [ - ['005414992', '01995783', '', '501', '', '2020-02-22', '', '', ''], - ['005507600', '01995783', '9112', '133', '144', '2020-02-22', 'ハツセイ.セイシヨクブモン', '発生・生殖部門', '1'], - ['005402984', '01997682', '1512', '165', '144', '2020-02-22', 'シヨウカキゲカ', '消化器外科', ''], - ['005408060', '01997682', '6802', '', '144', '2020-02-22', 'シヨウカキゲカガク1', '消化器外科学Ⅰ', ''], - ['005412977', '01997682', '6720', '', '144', '2020-02-22', 'シヨウカキゲカガク', '消化器外科学', ''], - ['005409446', '01997906', '1118', '501', '', '2020-02-22', 'ケツエキナイカ', '血液内科', '1'], - ['005503358', '01997906', '1118', '172', '144', '2020-02-22', 'ケツエキナイカ', '血液内科', ''], - ['005504428', '01997906', '7212', '', '144', '2020-02-22', 'ユケツ.サイボウチリヨウガク', '輸血・細胞治療学', ''], - ['005507600', '01997906', '9114', '', '144', '2020-02-22', 'サイボウイシヨクブモン', '細胞移植部門', ''], - ['005504428', '01999613', '5140', '', '144', '2020-02-22', 'ヤクリガク', '薬理学', ''] - ] - # モジュール名 - module_name = get_module_name(com_dr_wrkplace_mapper) - # テスト対象のデータをDBに登録 - for row in db_floating_data_list: - (dcf_dsf_inst_cd, dcf_pcf_dr_cd, blng_sec_cd, post_cd, identity_cd, - aply_start_ymd, blng_sec_name_kana, blng_sec_name, not_db_flg) = row - # DBに登録するテストデータ - test_sql_data = [ - dcf_dsf_inst_cd, dcf_pcf_dr_cd, blng_sec_cd, post_cd, identity_cd, - aply_start_ymd, blng_sec_name_kana, blng_sec_name, not_db_flg - ] - common_ultmarc_values = create_ultmarc_common_column_values( - regist_ymd=expect_date_str, - sys_regist_date=expect_datetime, - regist_prgm_id=module_name, - sys_update_date=expect_datetime, - update_prgm_id=module_name - ) - # 削除日カラムが存在しないので消す - common_ultmarc_values.pop(2) - test_sql_data += common_ultmarc_values + # COM_所属部科を登録 + test_sql_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'db_com_blng_sec_before_insert.csv')) + for test_data in test_sql_data_list: insert_sql, insert_parameter = create_insert_sql_with_parameter( - 'src05.com_dr_wrkplace', - self.dr_wrkplace_table_columns, - test_sql_data + 'src05.com_blng_sec', + test_data.keys(), + test_data.values() ) self.db.execute(insert_sql, insert_parameter) - # 期待値データを先に作る - # 医師勤務先 - expect_dr_wrkplace_rows = [ - ['005414992', '01995783', '', '501', '', date(2020, 2, 22), '', '', ''], - ['005507600', '01995783', '9999', '', '802', date(2020, 2, 23), '', '', '1'], - ['005402984', '01997682', '1512', '165', '', date(2020, 2, 23), 'シヨウカキゲカ', '消化器外科', ''], - ['005408060', '01997682', '6802', '', '144', date(2020, 2, 22), 'シヨウカキゲカガク1', '消化器外科学Ⅰ', ''], - ['005412977', '01997682', '6720', '', '144', date(2020, 2, 22), 'シヨウカキゲカガク', '消化器外科学', ''], - ['005409446', '01997906', '1118', '501', '', date(2020, 2, 22), 'ケツエキナイカ', '血液内科', ''], - ['005503358', '01997906', '1118', '172', '144', date(2020, 2, 22), 'ケツエキナイカ', '血液内科', ''], - ['005504428', '01997906', '7212', '', '144', date(2020, 2, 22), 'ユケツ.サイボウチリヨウガク', '輸血・細胞治療学', ''], - ['005507600', '01997906', '9114', '', '144', date(2020, 2, 22), 'サイボウイシヨクブモン', '細胞移植部門', ''], - ['005504428', '01999613', '9999', '501', '144', date(2020, 2, 23), 'ナイブンピ.ホネタイシヤガイライ', '内分泌・骨代謝外来', ''] - ] - # 医師勤務先履歴 - # 更新されない行はNoneで埋める - expect_dr_wrkplace_his_rows = [ - None, - [1, '005507600', '01995783', '9112', '133', '144', '20200222', 'ハツセイ.セイシヨクブモン', '発生・生殖部門', '1', '20200222'], - [1, '005402984', '01997682', '1512', '165', '144', '20200222', 'シヨウカキゲカ', '消化器外科', '', '20200222'], - None, - None, - None, - None, - None, - None, - [1, '005504428', '01999613', '5140', '999', '144', '20200222', 'ヤクリガク', '薬理学', '', '20200222'] - ] - # 更新された行を示す(1=True, 0=False) - is_update_rows = [bool(flag) for flag in [0, 1, 1, 0, 0, 1, 0, 0, 0, 1]] - # 履歴が登録される行を示す(1=True, 0=False) - is_historical_rows = [bool(flag) for flag in [0, 1, 1, 0, 0, 0, 0, 0, 0, 1]] - # sut(system under test)作成 + # Act for line_number, line in enumerate(test_dat_file, start=1): sut: com_dr_wrkplace_mapper.ComDrWrkplaceMapper = create_ultmarc_table_mapper_sut(line, self.db) assert type(sut) is com_dr_wrkplace_mapper.ComDrWrkplaceMapper, f'{line_number}行目:マッパークラスが期通りか' - # Act + sut.make_query() sut.execute_queries() # Assert - # 期待値作成 - # 期待値となるモジュール名 - module_name = get_module_name(com_dr_wrkplace_mapper) - for i, expect_dr_wrkplace_row in enumerate(expect_dr_wrkplace_rows, start=1): - ultmarc_common_column_values = create_ultmarc_common_column_values( - regist_ymd=datetime.date(expect_datetime), - update_ymd=datetime.date(expect_datetime) if is_update_rows[i - 1] else None, - sys_regist_date=expect_datetime, - regist_prgm_id=module_name, - sys_update_date=expect_datetime, - update_prgm_id=module_name - ) - # 削除日カラムが存在しないので消す - ultmarc_common_column_values.pop(2) - expect_dr_wrkplace_row += ultmarc_common_column_values + # 期待値ファイルを読み込む + expect_data_list = create_db_data_from_csv(path.join(self.test_file_path, 'expect_com_dr_wrkplace_insert.csv')) + primary_keys_dcf_dsf_inst_cd = [{'dcf_dsf_inst_cd': columns['dcf_dsf_inst_cd']} for columns in expect_data_list] + primary_keys_dcf_pcf_dr_cd = [{'dcf_pcf_dr_cd': columns['dcf_pcf_dr_cd']} for columns in expect_data_list] + # 複合主キーのため、1件ずつ取得して期待値を作る + actual_dr_data_list = [] + actual_dr_select_sql = """\ + SELECT * FROM src05.com_dr_wrkplace + WHERE + dcf_dsf_inst_cd = :dcf_dsf_inst_cd + AND dcf_pcf_dr_cd = :dcf_pcf_dr_cd\ + """ + actual_his_select_sql = """\ + SELECT * FROM src05.com_dr_wrkplace_his + WHERE + dcf_dsf_inst_cd = :dcf_dsf_inst_cd + AND dcf_pcf_dr_cd = :dcf_pcf_dr_cd + """ + for param_dcf_dsf_inst_cd, param_dcf_pcf_dr_cd in zip(primary_keys_dcf_dsf_inst_cd, primary_keys_dcf_pcf_dr_cd): + # COM_医師勤務先の取得 + actual_dr_data = self.db.execute_select( + actual_dr_select_sql, + {**param_dcf_dsf_inst_cd, **param_dcf_pcf_dr_cd}) + assert len(actual_dr_data) == 1, '1件取得できていること' + actual_dr_data_list.append(actual_dr_data[0]) - expect_rows = [{c: r for c, r in zip(self.dr_wrkplace_table_columns, expect_dr_wrkplace_row)}] - dcf_dcf_inst_cd = expect_dr_wrkplace_row[0] - dcf_pcf_dr_cd = expect_dr_wrkplace_row[1] - actual_rows = self.db.execute_select(f"SELECT * FROM src05.com_dr_wrkplace WHERE dcf_dsf_inst_cd = '{dcf_dcf_inst_cd}' AND dcf_pcf_dr_cd = '{dcf_pcf_dr_cd}'") + # COM_医師勤務先履歴の取得 + # 取得できないこと + actual_his_data = self.db.execute_select( + actual_his_select_sql, + {**param_dcf_dsf_inst_cd, **param_dcf_pcf_dr_cd}) + assert len(actual_his_data) == 0, '履歴が作成されていないこと' - # 期待値検査 - assert_table_results(actual_rows, expect_rows, line_number=i, ignore_col_name=['sys_update_date', 'sys_regist_date']) - - # 動的日付項目の個別確認 - for actual_row, expect_row in zip(actual_rows, expect_rows): - for actual_col_name, expect_col_name in zip(actual_row, expect_row): - actual_value = actual_row[actual_col_name] - expect_value = expect_row[expect_col_name] - if actual_col_name == 'sys_regist_date': - assert actual_row[actual_col_name] == expect_row[expect_col_name], f'{i}行目:{actual_col_name}が、期待値の日時と一致すること' - if actual_col_name == 'sys_update_date': - # 更新されている場合 - if is_update_rows[i - 1] is True: - assert actual_value <= expect_value, f'{i}行目:{actual_col_name}が、期待値の日時以前であること' - else: - assert actual_value == expect_value, f'{i}行目:{actual_col_name}が、期待値の日時と一致すること' - - # 履歴テーブルの存在チェック - actual_history_rows = self.db.execute_select(f"SELECT * FROM src05.com_dr_wrkplace_his WHERE dcf_dsf_inst_cd = '{dcf_dcf_inst_cd}' AND dcf_pcf_dr_cd = '{dcf_pcf_dr_cd}'") - # 履歴作成対象かどうか - if is_historical_rows[i - 1] is False: - assert len(actual_history_rows) == 0, '履歴テーブルが作成されていないこと' - else: - # 件数確認 - assert len(actual_history_rows) == 1, '履歴テーブルが作成されていること' - - # 期待値作成 - expect_history_row = expect_dr_wrkplace_his_rows[i - 1] - # アルトマーク共通カラムを追加 - ultmarc_common_column_values = create_ultmarc_common_column_values( - regist_ymd=expect_date_str, - sys_regist_date=expect_datetime, - regist_prgm_id=module_name, - sys_update_date=expect_datetime, - update_prgm_id=module_name - ) - # 削除日カラムが存在しないので消す - ultmarc_common_column_values.pop(2) - # アルトマーク共通カラムを追加(事前に宣言されているものを流用する) - expect_history_row += ultmarc_common_column_values - # ヘッダーを追加 - expect_history_rows_with_column = [{c: r for c, r in zip(self.dr_wrkplace_his_table_columns, expect_history_row)}] - - assert_table_results(actual_history_rows, expect_history_rows_with_column, line_number=i, ignore_col_name=['sys_update_date', 'sys_regist_date', 'dr_wrkplace_his_key']) - - # 動的日付項目の個別確認 - for actual_row, expect_row in zip(actual_history_rows, expect_history_rows_with_column): - for actual_col_name, expect_col_name in zip(actual_row, expect_row): - actual_value = actual_row[actual_col_name] - expect_value = expect_row[expect_col_name] - if actual_col_name == 'dr_wrkplace_his_key': - assert actual_value >= expect_value, f'{i}行目:{actual_col_name}が、期待値の連番以上以前であること' - if actual_col_name == 'sys_regist_date': - assert actual_row[actual_col_name] == expect_row[expect_col_name], f'{i}行目:{actual_col_name}が、期待値の日時と一致すること' - if actual_col_name == 'sys_update_date': - assert actual_value <= expect_value, f'{i}行目:{actual_col_name}が、期待値の日時以前であること' + # 期待値検査 + ignore_columns = ['regist_ymd', 'sys_update_date', 'sys_regist_date', 'aply_start_ymd'] + assert_table_results(actual_dr_data_list, expect_data_list, ignore_col_name=ignore_columns) + # 動的日付項目の個別確認 + line_number = 0 + for actual_row, expect_row in zip(actual_dr_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', 'aply_start_ymd']: + assert actual_row[actual_col_name] >= expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値以降であること'