From 1a42020176ed6ee2b4de5d7d8795e229d2556c29 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 10 Apr 2023 23:41:12 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=90=E3=82=B0=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=80=82=E3=83=86=E3=82=B9=E3=83=88=E4=BF=AE=E6=AD=A3=E3=80=82?= =?UTF-8?q?=E3=82=82=E3=81=A3=E3=81=A8=E3=82=B3=E3=83=B3=E3=83=91=E3=82=AF?= =?UTF-8?q?=E3=83=88=E3=81=AB=E3=81=A7=E3=81=8D=E3=82=8B=E3=81=AF=E3=81=9A?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concrete/com_dr_wrkplace_mapper.py | 41 ++- .../test_com_dr_wrkplace_mapper.py | 341 ++++++++++++++++++ .../tests/testing_utility.py | 4 +- 3 files changed, 368 insertions(+), 18 deletions(-) create mode 100644 ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_dr_wrkplace_mapper.py 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 f8b578af..0e816f06 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 @@ -196,18 +196,20 @@ class ComDrWrkplaceMapper(UltmarcTableMapper): def __make_update_query(self): make_history_query = None # 履歴レコード作成判断となる、UPDATE SET句を作成 - set_clauses = self.__make_update_columns_with_historical() + set_clauses_with_historical = self.__make_update_columns_with_historical() + # 履歴レコード作成判断とならない、UPDATE SET句 + set_clause_without_historical = [] + # DM不可フラグの値をセット + # 履歴レコード作成判断とならないため、後から設定 + if self.record.notdm_flg != '': + notdm_flg = None if self.record.notdm_flg == '@' else self.record.notdm_flg + self.query_parameter['notdm_flg'] = notdm_flg + set_clause_without_historical.append(f'notdm_flg = {"NULL" if notdm_flg is None else ":notdm_flg"}') # 何かしら更新がある場合、履歴作成クエリを作成 - if len(set_clauses) != 0: - # DM不可フラグの値をセット - # 履歴レコード作成判断とならないため、後から設定 - if self.record.notdm_flg != '': - set_clauses.append('notdm_flg = :notdm_flg') - self.query_parameter['notdm_flg'] = self.record.sectname if self.record.sectcode != '@' else 'NULL' - + if len(set_clauses_with_historical) != 0: make_history_query = self.TO_HISTORY_QUERY - update_columns = ','.join(set_clauses) + update_columns = ','.join(set_clauses_with_historical + set_clause_without_historical) if len(update_columns) > 0: # 何かしら更新がある場合、末尾にカンマを付けてSET句を完成させる update_columns += ',' @@ -225,20 +227,25 @@ class ComDrWrkplaceMapper(UltmarcTableMapper): # 役職コード if self.record.postcode != '': set_clauses.append('post_cd = :postcode') - self.query_parameter['postcode'] = self.record.postcode if self.record.postcode != '@' else '' + self.query_parameter['postcode'] = '' if self.record.postcode == '@' else self.record.postcode # 大学順位 if self.record.identitycode != '': set_clauses.append('identity_cd = :identitycode') - self.query_parameter['identitycode'] = self.record.identitycode if self.record.identitycode != '@' else '' + self.query_parameter['identitycode'] = '' if self.record.identitycode == '@' else self.record.identitycode # 所属部科(集合項目) if self.record.sectcode != '': + # 所属部科コード + self.query_parameter['sectcode'] = '9999' if self.record.sectcode == '@' else self.record.sectcode set_clauses.append('blng_sec_cd = :sectcode') - set_clauses.append('blng_sec_name_kana = :sectname_kana') - set_clauses.append('blng_sec_name = :sectname') - self.query_parameter['sectcode'] = self.record.sectcode if self.record.sectcode != '@' else '9999' - self.query_parameter['sectname_kana'] = self.record.sectname_kana if self.record.sectcode != '@' else 'NULL' - # 全角文字なので、全角@が連携されるパターンがある - self.query_parameter['sectname'] = self.record.sectname if self.record.sectcode != '@' else 'NULL' + # 所属部科(カナ) + sectname_kana = None if self.record.sectname_kana == '@' else self.record.sectname_kana + self.query_parameter['sectname_kana'] = sectname_kana + set_clauses.append(f'blng_sec_name_kana = {"NULL" if sectname_kana is None else ":sectname_kana"}') + # 所属部科(漢字) + # 全角文字なので、修正項目として全角@が連携されるパターンがある + sectname = None if self.record.sectname == '@' else self.record.sectname + self.query_parameter['sectname'] = sectname + set_clauses.append(f'blng_sec_name = {"NULL" if sectname is None else ":sectname"}') # 何かしら更新がある場合、適用開始日をセットする if len(set_clauses) != 0: diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_dr_wrkplace_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_dr_wrkplace_mapper.py new file mode 100644 index 00000000..12fe23a2 --- /dev/null +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_dr_wrkplace_mapper.py @@ -0,0 +1,341 @@ +from datetime import date, datetime + +import pytest + +from src.batch.common.batch_config import BatchConfig +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_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) + + +class TestComDrWrkplaceMapper: + """COM_DCF医師勤務先""" + + 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') + + 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') + 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, expect_datetime: datetime, expect_date_str: str): + """ + Cases: + COM_DCF医師勤務先テーブルにレコードを登録する + Arranges: + - CSVデータを用意する + - 追加対象となるレコードを削除する + Expects: + - COM_医師勤務先の登録内容が期待値と一致すること + - COM_医師勤務先履歴にデータが登録されないこと + """ + + # 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) + # 一旦全データを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'}) + 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'}) + 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 + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_dr_wrkplace', + self.dr_wrkplace_table_columns, + test_sql_data + ) + 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)作成 + 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_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}'") + + # 期待値検査 + 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}が、期待値の日時以前であること' diff --git a/ecs/jskult-batch-daily/tests/testing_utility.py b/ecs/jskult-batch-daily/tests/testing_utility.py index 6f2c80f0..88934496 100644 --- a/ecs/jskult-batch-daily/tests/testing_utility.py +++ b/ecs/jskult-batch-daily/tests/testing_utility.py @@ -173,4 +173,6 @@ def assert_table_results(actual_rows: list[dict], expect_rows: list[dict], line_ if ignore_col_name is not None and actual_col_name in ignore_col_name: continue else: - assert actual_row[actual_col_name] == expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値と一致すること' + actual_value = actual_row[actual_col_name] + expect_value = expect_row[expect_col_name] + assert actual_value == expect_value, f'{line_number}行目:{actual_col_name}が、期待値と一致すること'