From cd15c199ec5eb08d8565fc2a3a1a02b0a8eb14a0 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Fri, 7 Apr 2023 10:46:07 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20COM=5F=E5=87=BA=E8=BA=AB=E6=A0=A1?= =?UTF-8?q?=E3=81=AE=E6=9B=B4=E6=96=B0=E3=82=AF=E3=82=A8=E3=83=AA=E3=81=AE?= =?UTF-8?q?=E7=A2=BA=E8=AA=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../table_mapper/test_com_alma_mapper.py | 107 +++++++++++++++++- .../tests/testing_utility.py | 51 +++++---- 2 files changed, 130 insertions(+), 28 deletions(-) diff --git a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_alma_mapper.py b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_alma_mapper.py index b5bf2f1b..26c182b2 100644 --- a/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_alma_mapper.py +++ b/ecs/jskult-batch-daily/tests/batch/ultmarc/utmp_tables/table_mapper/test_com_alma_mapper.py @@ -9,6 +9,7 @@ from src.batch.ultmarc.utmp_tables.ultmarc_table_mapper_factory import \ 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_test_csv, get_module_name) @@ -55,12 +56,12 @@ class TestComAlmaMapper: test_dat_file = create_ultmarc_test_csv( '"004","001","A","20141113","20141114","北大","1","2014/11/21 22:53","VANLOAD",,,"2014/11/21 22:53"' ) - # テスト対象のデータをDBから削除 - delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_alma', {'alma_cd': '001'}) + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_alma', {'1': '1'}) self.db.execute(delete_sql, delete_parameter) # sut(system under test)作成 - for line in test_dat_file: + for i, line in enumerate(test_dat_file, start=1): layout_class = line.layout_class record_id = line.record_id factory = UltmarcTableMapperFactory() @@ -70,7 +71,7 @@ class TestComAlmaMapper: records=line.records, db=self.db ) - assert type(sut) is com_alma_mapper.ComAlmaMapper, 'マッパークラスが期待通りか' + assert type(sut) is com_alma_mapper.ComAlmaMapper, f'{i}行目:マッパークラスが期待通りか' # Act sut.make_query() @@ -80,9 +81,103 @@ class TestComAlmaMapper: # 期待値となるモジュール名 module_name = get_module_name(com_alma_mapper) # 実行日時 - expect_row = ["001", "北大"] + create_ultmarc_common_column_values(expect_datetime, expect_date_str, module_name) + expect_row = ["001", "北大"] + 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 + ) expect_rows = [{c: r for c, r in zip(self.table_columns, expect_row)}] actual_rows = self.db.execute_select("SELECT * FROM src05.com_alma WHERE alma_cd = '001'") # 期待値検査 - assert_table_results(actual_rows, expect_rows) + assert_table_results(actual_rows, expect_rows, line_number=i, ignore_col_name=['sys_regist_date', 'sys_update_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'{actual_col_name}が、期待値の日時以前であること' + + def test_update_record_one(self, expect_datetime: datetime, expect_date_str: str): + """ + Cases: + COM_出身校テーブルにレコードを1件更新する + Arranges: + - CSVデータを用意する + - 追加対象となるレコードを登録する + Expects: + - 登録内容が期待値と一致すること + """ + + # Arrange + # 処理日設定 + self.batch_config.syor_date = datetime.strftime(datetime.now(), '%Y/%m/%d') + # テストデータ1件作成 + test_dat_file = create_ultmarc_test_csv( + '"004","001","B","20141113","20141114","テスト大","1","2014/11/21 22:53","VANLOAD",,,"2014/11/21 22:53"' + ) + + # モジュール名 + module_name = get_module_name(com_alma_mapper) + # DBに登録するテストデータ + test_sql_data = ["001", "北大"] + create_ultmarc_common_column_values( + regist_ymd=expect_date_str, + sys_regist_date=expect_datetime.replace(microsecond=0), + regist_prgm_id=module_name, + sys_update_date=expect_datetime, + update_prgm_id=module_name + ) + + # 一旦全データをDBから削除 + delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_alma', {'1': '1'}) + self.db.execute(delete_sql, delete_parameter) + # テスト対象のデータをDBに登録 + insert_sql, insert_parameter = create_insert_sql_with_parameter( + 'src05.com_alma', + self.table_columns, + test_sql_data + ) + self.db.execute(insert_sql, insert_parameter) + + # sut(system under test)作成 + for i, line in enumerate(test_dat_file, start=1): + layout_class = line.layout_class + record_id = line.record_id + factory = UltmarcTableMapperFactory() + sut: com_alma_mapper.ComAlmaMapper = factory.create( + layout_class=layout_class, + record_id=record_id, + records=line.records, + db=self.db + ) + assert type(sut) is com_alma_mapper.ComAlmaMapper, f'{i}行目: マッパークラスが期待通りか' + + # Act + sut.make_query() + sut.execute_queries() + + # Assert + # 期待値となるモジュール名 + module_name = get_module_name(com_alma_mapper) + # 実行日時 + expect_row = ["001", "テスト大"] + create_ultmarc_common_column_values( + regist_ymd=expect_date_str, + update_ymd=expect_date_str, + sys_regist_date=expect_datetime.replace(microsecond=0), + regist_prgm_id=module_name, + sys_update_date=datetime.now(), + update_prgm_id=module_name + ) + expect_rows = [{c: r for c, r in zip(self.table_columns, expect_row)}] + actual_rows = self.db.execute_select("SELECT * FROM src05.com_alma WHERE alma_cd = '001'") + + # 期待値検査 + 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 == 'sys_regist_date': + assert actual_row[actual_col_name] == expect_row[expect_col_name], f'{actual_col_name}が、期待値の日時と一致すること' + if actual_col_name == 'sys_update_date': + assert actual_row[actual_col_name] < expect_row[expect_col_name], f'{actual_col_name}が、期待値の日時以前であること' diff --git a/ecs/jskult-batch-daily/tests/testing_utility.py b/ecs/jskult-batch-daily/tests/testing_utility.py index f9d1aa2f..a517af1b 100644 --- a/ecs/jskult-batch-daily/tests/testing_utility.py +++ b/ecs/jskult-batch-daily/tests/testing_utility.py @@ -1,7 +1,6 @@ """テスト用共通処理関数""" import io -from datetime import datetime from types import ModuleType from src.batch.ultmarc.datfile import DatFile @@ -80,30 +79,38 @@ def create_delete_sql_with_parameter(table_name: str, delete_parameter: dict[str return delete_sql, delete_parameter -def create_ultmarc_common_column_values(expect_datetime: datetime, expect_date_str: str, module_name: str) -> list: +def create_ultmarc_common_column_values(**kwargs) -> list: """アルトマークテーブル共通のカラムを作成 Args: - expect_datetime (datetime): テスト実行年月日時分秒 - expect_date_str (str): テスト実行年月日の文字列 - module_name (str): モジュール名 - + kwargs 有効なキー一覧 + regist_ymd (str): 登録年月日 + update_ymd (str): 更新年月日 + delete_ymd (str): 削除年月日 + regist_date (datetime): 登録日時 + create_user (str): 登録者 + update_date (datetime): 更新日時 + update_user (str): 更新者 + sys_regist_date (datetime): システム登録日時 + regist_prgm_id (str): 登録プログラムid + sys_update_date (datetime): システム更新日時 + update_prgm_id (str): 更新プログラムid Returns: list: 共通カラム値 """ return [ - expect_date_str, # 登録年月日(regist_ymd) - None, # 更新年月日(update_ymd) - None, # 削除年月日(delete_ymd) - None, # 登録日時(regist_date) - None, # 登録者(create_user) - None, # 更新日時(update_date) - None, # 更新者(update_user) - expect_datetime, # システム登録日時(sys_regist_date) - module_name, # 登録プログラムid(regist_prgm_id) - expect_datetime, # システム更新日時(sys_update_date) - module_name # 更新プログラムid(update_prgm_id) + kwargs.get('regist_ymd'), # 登録年月日(regist_ymd) + kwargs.get('update_ymd'), # 更新年月日(update_ymd) + kwargs.get('delete_ymd'), # 削除年月日(delete_ymd) + kwargs.get('regist_date'), # 登録日時(regist_date) + kwargs.get('create_user'), # 登録者(create_user) + kwargs.get('update_date'), # 更新日時(update_date) + kwargs.get('update_user'), # 更新者(update_user) + kwargs.get('sys_regist_date'), # システム登録日時(sys_regist_date) + kwargs.get('regist_prgm_id'), # 登録プログラムid(regist_prgm_id) + kwargs.get('sys_update_date'), # システム更新日時(sys_update_date) + kwargs.get('update_prgm_id') # 更新プログラムid(update_prgm_id) ] @@ -119,7 +126,7 @@ def get_module_name(module: ModuleType) -> str: return module.__name__.split('.')[-1] -def assert_table_results(actual_rows: list[dict], expect_rows: list[dict]) -> None: +def assert_table_results(actual_rows: list[dict], expect_rows: list[dict], line_number: int, ignore_col_name: list = None) -> None: """テーブル同士の取得結果突き合わせ Args: @@ -132,8 +139,8 @@ def assert_table_results(actual_rows: list[dict], expect_rows: list[dict]) -> No # 1カラムずつ調査 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'{actual_col_name}が、期待値の日時以前であること' + # テストメソッド側で個別に確認するものはスキップさせる + 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'{actual_col_name}が、期待値と一致すること' + assert actual_row[actual_col_name] == expect_row[expect_col_name], f'{line_number}行目:{actual_col_name}が、期待値と一致すること'