COM_薬局 単体テスト 新規作成

This commit is contained in:
野間 2023-04-18 18:00:48 +09:00
parent 3c814d5477
commit c24379280f
6 changed files with 204 additions and 0 deletions

View File

@ -0,0 +1 @@
"102","9","9","9","C","200501","200601","7","0","9","10","11","12","13","14","15","6","17","18","19","20","221-000","22","23","24","25","26","27","28","29","30","31","32","3","34","35","2","37","38","9","204001","1","204201","43","44","45","46","47"
1 102 9 9 9 C 200501 200601 7 0 9 10 11 12 13 14 15 6 17 18 19 20 221-000 22 23 24 25 26 27 28 29 30 31 32 3 34 35 2 37 38 9 204001 1 204201 43 44 45 46 47

View File

@ -0,0 +1 @@
"102","1","2","3","A","200501","200601","7","8","9","10","11","12","13","14","15","6","17","18","19","20","221-000","22","23","24","25","26","27","28","29","30","31","32","3","34","35","2","37","38","9","204001","1","204201","43","44","45","46","47"
1 102 1 2 3 A 200501 200601 7 8 9 10 11 12 13 14 15 6 17 18 19 20 221-000 22 23 24 25 26 27 28 29 30 31 32 3 34 35 2 37 38 9 204001 1 204201 43 44 45 46 47

View File

@ -0,0 +1,2 @@
"dcf_dsf_inst_cd","inst_div_cd","addr_unknown_reason_cd","form_inst_name_kana","inst_name_kana","form_inst_name_kanji","inst_name_kanji","close_flg","estab_sche_flg","close_start_ym","estab_sche_ym","inst_repre_kana","inst_repre","phone_number_non_flg","unconf_flg","inst_phone_number","inst_addr_kana","inst_addr","postal_number","village_cd","prefc_cd","city_cd","addr_display_number","addr_cnt_kana","addr_cnt","manage_cd","delete_sche_reason_cd","dup_opp_cd","supervising_pharmacist","supervising_pharmacist_kana","franchise_hq_cd","inst_pharm_div","abolish_ymd","delete_flg","filler_1","filler_2","filler_3","filler_4","filler_5","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id"
"123","2","6","13","15","12","14","1","9","204201","204001","38","37","3","7","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/18 10:27:33","com_pharm_mapper"
1 dcf_dsf_inst_cd inst_div_cd addr_unknown_reason_cd form_inst_name_kana inst_name_kana form_inst_name_kanji inst_name_kanji close_flg estab_sche_flg close_start_ym estab_sche_ym inst_repre_kana inst_repre phone_number_non_flg unconf_flg inst_phone_number inst_addr_kana inst_addr postal_number village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt manage_cd delete_sche_reason_cd dup_opp_cd supervising_pharmacist supervising_pharmacist_kana franchise_hq_cd inst_pharm_div abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
2 123 2 6 13 15 12 14 1 9 204201 204001 38 37 3 7 34 23 22 221-000 17181920 17 18 24 29303132 25262728 35 8 91011 43 44 454647 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/18 10:27:33 com_pharm_mapper 2023/04/18 10:27:33 com_pharm_mapper

View File

@ -0,0 +1,3 @@
"dcf_dsf_inst_cd","inst_div_cd","addr_unknown_reason_cd","form_inst_name_kana","inst_name_kana","form_inst_name_kanji","inst_name_kanji","close_flg","estab_sche_flg","close_start_ym","estab_sche_ym","inst_repre_kana","inst_repre","phone_number_non_flg","unconf_flg","inst_phone_number","inst_addr_kana","inst_addr","postal_number","village_cd","prefc_cd","city_cd","addr_display_number","addr_cnt_kana","addr_cnt","manage_cd","delete_sche_reason_cd","dup_opp_cd","supervising_pharmacist","supervising_pharmacist_kana","franchise_hq_cd","inst_pharm_div","abolish_ymd","delete_flg","filler_1","filler_2","filler_3","filler_4","filler_5","regist_date","create_user","update_date","update_user","sys_regist_date","regist_prgm_id","sys_update_date","update_prgm_id"
"123","2","6","13","15","12","14","1","9","204201","204001","38","37","3","6","34","23","22","221-000","17181920","17","18","24","29303132","25262728","35","8","91011","43","44","454647","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/04/18 10:27:33","com_pharm_mapper","2023/04/18 10:27:33","com_pharm_mapper"
"456","66","0","正カナ","略カナ","正漢字","略漢字","8","4","204812","204411","代カナ","代漢","0","6","119991234","住所カナ","住所漢字","001-6234","61626364","61","62","11","ケシトチ","県市通丁目","11","7","555657","薬剤師漢字","薬剤師カナ","998877","2","NULL","0","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","NULL","2023/4/18 10:27:00","com_pharm_mapper","2023/4/18 10:27:00","com_pharm_mapper"
1 dcf_dsf_inst_cd inst_div_cd addr_unknown_reason_cd form_inst_name_kana inst_name_kana form_inst_name_kanji inst_name_kanji close_flg estab_sche_flg close_start_ym estab_sche_ym inst_repre_kana inst_repre phone_number_non_flg unconf_flg inst_phone_number inst_addr_kana inst_addr postal_number village_cd prefc_cd city_cd addr_display_number addr_cnt_kana addr_cnt manage_cd delete_sche_reason_cd dup_opp_cd supervising_pharmacist supervising_pharmacist_kana franchise_hq_cd inst_pharm_div abolish_ymd delete_flg filler_1 filler_2 filler_3 filler_4 filler_5 regist_date create_user update_date update_user sys_regist_date regist_prgm_id sys_update_date update_prgm_id
2 123 2 6 13 15 12 14 1 9 204201 204001 38 37 3 6 34 23 22 221-000 17181920 17 18 24 29303132 25262728 35 8 91011 43 44 454647 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/04/18 10:27:33 com_pharm_mapper 2023/04/18 10:27:33 com_pharm_mapper
3 456 66 0 正カナ 略カナ 正漢字 略漢字 8 4 204812 204411 代カナ 代漢 0 6 119991234 住所カナ 住所漢字 001-6234 61626364 61 62 11 ケシトチ 県市通丁目 11 7 555657 薬剤師漢字 薬剤師カナ 998877 2 NULL 0 NULL NULL NULL NULL NULL NULL NULL NULL NULL 2023/4/18 10:27:00 com_pharm_mapper 2023/4/18 10:27:00 com_pharm_mapper

View File

@ -0,0 +1,197 @@
import os.path as path
from datetime import datetime
import pytest
from src.batch.common.batch_config import BatchConfig
from src.batch.ultmarc.utmp_tables.table_mapper.concrete import com_pharm_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 TestComPharmMapper:
""" レイアウト区分102: COM_薬局 """
db: Database
batch_config: BatchConfig
test_file_path: str = path.dirname(__file__)
@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):
"""
Cases:
COM_薬局テーブルにレコードを登録する
Arranges:
- CSVデータを用意し読み込む
- 追加対象となるレコードを削除する
Expects:
- 登録内容が期待値と一致すること
"""
# Arrange
# 処理日設定
self.batch_config.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_pharm_insert.csv'))
# 一旦全データをDBから削除
delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'1': '1'})
self.db.execute(delete_sql, delete_parameter)
# Act
for line_number, line in enumerate(test_dat_file, start=1):
sut: com_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db)
assert type(sut) is com_pharm_mapper.ComPharmMapper, 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_pharm_insert.csv'))
primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list]
actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})"
actual_data_list = self.db.execute_select(actual_select_sql)
# 期待値検査
ignore_columns = ['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 ['regist_ymd', 'sys_regist_date', 'sys_update_date']:
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_config.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_pharm_update.csv'))
# 一旦全データをDBから削除
delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'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_pharm_before_update.csv'))
for test_data in test_sql_data_list:
insert_sql, insert_parameter = create_insert_sql_with_parameter(
'src05.com_pharm',
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_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db)
assert type(sut) is com_pharm_mapper.ComPharmMapper, 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_pharm_update.csv'))
primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list]
actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})"
actual_data_list = self.db.execute_select(actual_select_sql)
# 期待値検査
ignore_columns = ['sys_update_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_config.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_pharm_delete.csv'))
# 一旦全データをDBから削除
delete_sql, delete_parameter = create_delete_sql_with_parameter('src05.com_pharm', {'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_pharm_before_delete.csv'))
for test_data in test_sql_data_list:
insert_sql, insert_parameter = create_insert_sql_with_parameter(
'src05.com_pharm',
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_pharm_mapper.ComPharmMapper = create_ultmarc_table_mapper_sut(line, self.db)
assert type(sut) is com_pharm_mapper.ComPharmMapper, 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_pharm_delete.csv'))
primary_keys = [f"'{primary_key['dcf_dsf_inst_cd']}'" for primary_key in expect_data_list]
actual_select_sql = f"SELECT * FROM src05.com_pharm WHERE dcf_dsf_inst_cd IN ({','.join(primary_keys)})"
actual_data_list = self.db.execute_select(actual_select_sql)
# 期待値検査
ignore_columns = ['sys_update_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}が、期待値以降であること'