feat: can_run_business_day_updateのテスト実装
This commit is contained in:
parent
881ebeb7e3
commit
24c369b69e
@ -135,6 +135,7 @@ class JskultBatchStatusManager:
|
||||
"""
|
||||
try:
|
||||
# 自身(後続処理 or 日付テーブル更新)のレコードを取得する
|
||||
self._db.connect()
|
||||
record = self._db.execute_select(
|
||||
"""
|
||||
SELECT
|
||||
@ -152,7 +153,7 @@ class JskultBatchStatusManager:
|
||||
record_count = len(record)
|
||||
|
||||
if record_count == 0:
|
||||
raise ValueError("レコードの取得が出来ませんでした。")
|
||||
raise BatchOperationException("レコードの取得が出来ませんでした。")
|
||||
|
||||
# 起動回数のインクリメント
|
||||
self._increment_run_count()
|
||||
@ -227,8 +228,7 @@ class JskultBatchStatusManager:
|
||||
record = self._db.execute_select(
|
||||
"""
|
||||
SELECT
|
||||
total_run_count,
|
||||
process_status
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
@ -242,7 +242,6 @@ class JskultBatchStatusManager:
|
||||
raise BatchOperationException("レコードの取得が出来ませんでした。")
|
||||
|
||||
total_run_count = record[0]['total_run_count']
|
||||
process_status = record[0]['process_status']
|
||||
|
||||
self._db.execute(
|
||||
"""
|
||||
@ -250,7 +249,7 @@ class JskultBatchStatusManager:
|
||||
internal07.upsert_jskult_batch_status_manage(
|
||||
:process_name,
|
||||
:process_type,
|
||||
:process_status,
|
||||
NULL,
|
||||
:total_run_count,
|
||||
NULL
|
||||
)
|
||||
@ -258,7 +257,6 @@ class JskultBatchStatusManager:
|
||||
{
|
||||
'process_name': self._process_name,
|
||||
'process_type': self._process_type,
|
||||
'process_status': process_status,
|
||||
'total_run_count': total_run_count + 1,
|
||||
}
|
||||
)
|
||||
@ -361,7 +359,7 @@ class JskultBatchStatusManager:
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = :process_name
|
||||
AND process_status = process_status
|
||||
AND process_status = :process_status
|
||||
AND process_date = src07.get_syor_date();
|
||||
""",
|
||||
{
|
||||
@ -426,7 +424,7 @@ class JskultBatchStatusManager:
|
||||
self._db.execute(
|
||||
"""
|
||||
CALL
|
||||
upsert_jskult_batch_status_manage(
|
||||
internal07.upsert_jskult_batch_status_manage(
|
||||
:process_name,
|
||||
:process_type,
|
||||
NULL,
|
||||
|
||||
0
ecs/jskult-batch/tests/__init__.py
Normal file
0
ecs/jskult-batch/tests/__init__.py
Normal file
@ -3,6 +3,7 @@ import datetime
|
||||
import pytest
|
||||
|
||||
from src.db.database import Database
|
||||
from src.error.exceptions import MaxRunCountReachedException
|
||||
from src.manager.jskult_batch_status_manager import JskultBatchStatusManager
|
||||
|
||||
|
||||
@ -204,3 +205,395 @@ class TestJskultBatchStatusManager:
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_post_process_failed(self):
|
||||
"""
|
||||
完了しているデータ取り込み件数と受信ファイル数が一致していない場合、falseが返却されること
|
||||
起動回数が+1されていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('unittest_process_name', '2025-05-30', 'unittest_process_type',
|
||||
'start', '0', '0'),
|
||||
('data_import_process_1', '2025-05-30','data_import',
|
||||
'done', '0', '0'),
|
||||
('data_import_process_2', '2025-05-30','data_import',
|
||||
'done', '0', '0'),
|
||||
('data_import_process_3', '2025-05-30','data_import',
|
||||
'done', '0', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'unittest_process_name',
|
||||
'unittest_process_type',
|
||||
3,
|
||||
4
|
||||
)
|
||||
actual = sut.can_run_post_process()
|
||||
|
||||
# Assert
|
||||
assert actual is False
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'unittest_process_name'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_post_process_raise_max_run_count_reached_exception(self):
|
||||
"""
|
||||
完了しているデータ取り込み件数と受信ファイル数が一致していないかつ、最大起動回数に到達している場合、例外が送出されること
|
||||
最大起動回数フラグが1になっていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('unittest_process_name', '2025-05-30', 'unittest_process_type',
|
||||
'start', '2', '0'),
|
||||
('data_import_process_1', '2025-05-30','data_import',
|
||||
'done', '0', '0'),
|
||||
('data_import_process_2', '2025-05-30','data_import',
|
||||
'done', '0', '0'),
|
||||
('data_import_process_3', '2025-05-30','data_import',
|
||||
'done', '0', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'unittest_process_name',
|
||||
'unittest_process_type',
|
||||
3,
|
||||
4
|
||||
)
|
||||
with pytest.raises(MaxRunCountReachedException):
|
||||
sut.can_run_post_process()
|
||||
|
||||
# Assert
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
max_run_count_flg
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'unittest_process_name'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['max_run_count_flg'] == 1
|
||||
|
||||
def test_can_run_business_day_update_success(self):
|
||||
"""
|
||||
後続処理3件が完了している場合、trueが返却されること
|
||||
起動回数が+1されていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('jskult-batch-business-day-update', '2025-05-30', 'update_business_day',
|
||||
'start', '0', '0'),
|
||||
('jskult-batch-trn-result-data-bio-lot', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-dcf-inst-merge-io', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-mst-inst-all', '2025-05-30','post_process',
|
||||
'done', '1', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'jskult-batch-business-day-update',
|
||||
'business_day_update',
|
||||
3,
|
||||
3
|
||||
)
|
||||
actual = sut.can_run_business_day_update()
|
||||
|
||||
# Assert
|
||||
assert actual is True
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'jskult-batch-business-day-update'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_business_day_update_failed_because_bio_lot_doing(self):
|
||||
"""
|
||||
後続処理3件のうち、生物由来ロット分解が終了していない場合、falseが返却されること
|
||||
起動回数が+1されていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('jskult-batch-business-day-update', '2025-05-30', 'update_business_day',
|
||||
'start', '0', '0'),
|
||||
('jskult-batch-trn-result-data-bio-lot', '2025-05-30','post_process',
|
||||
'doing', '1', '0'),
|
||||
('jskult-batch-dcf-inst-merge-io', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-mst-inst-all', '2025-05-30','post_process',
|
||||
'done', '1', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'jskult-batch-business-day-update',
|
||||
'update_business_day',
|
||||
3,
|
||||
3
|
||||
)
|
||||
actual = sut.can_run_business_day_update()
|
||||
|
||||
# Assert
|
||||
assert actual is False
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'jskult-batch-business-day-update'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_business_day_update_failed_because_dcf_inst_merge_io_doing(self):
|
||||
"""
|
||||
後続処理3件のうち、DCF削除新規マスタ作成が終了していない場合、falseが返却されること
|
||||
起動回数が+1されていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('jskult-batch-business-day-update', '2025-05-30', 'update_business_day',
|
||||
'start', '0', '0'),
|
||||
('jskult-batch-trn-result-data-bio-lot', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-dcf-inst-merge-io', '2025-05-30','post_process',
|
||||
'doing', '1', '0'),
|
||||
('jskult-batch-mst-inst-all', '2025-05-30','post_process',
|
||||
'done', '1', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'jskult-batch-business-day-update',
|
||||
'update_business_day',
|
||||
3,
|
||||
3
|
||||
)
|
||||
actual = sut.can_run_business_day_update()
|
||||
|
||||
# Assert
|
||||
assert actual is False
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'jskult-batch-business-day-update'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_business_day_update_failed_because_mst_inst_all_doing(self):
|
||||
"""
|
||||
後続処理3件のうち、メルク施設マスタ作成が終了していない場合、falseが返却されること
|
||||
起動回数が+1されていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('jskult-batch-business-day-update', '2025-05-30', 'update_business_day',
|
||||
'start', '0', '0'),
|
||||
('jskult-batch-trn-result-data-bio-lot', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-dcf-inst-merge-io', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-mst-inst-all', '2025-05-30','post_process',
|
||||
'doing', '1', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'jskult-batch-business-day-update',
|
||||
'update_business_day',
|
||||
3,
|
||||
3
|
||||
)
|
||||
actual = sut.can_run_business_day_update()
|
||||
|
||||
# Assert
|
||||
assert actual is False
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
total_run_count
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'jskult-batch-business-day-update'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['total_run_count'] == 1
|
||||
|
||||
def test_can_run_business_day_update_raise_max_run_count_reached_exception(self):
|
||||
"""
|
||||
後続処理3件のいずれかが終了していないかつ、最大起動回数に到達している場合、例外が送出されること
|
||||
最大起動回数フラグが1になっていること
|
||||
"""
|
||||
# Arrange
|
||||
# 日付テーブルを登録
|
||||
db = Database.get_instance()
|
||||
db.connect()
|
||||
db.execute("""
|
||||
INSERT INTO src07.hdke_tbl
|
||||
(syor_date, bch_actf, dump_sts_kbn,
|
||||
creater, create_date, updater, update_date)
|
||||
VALUES
|
||||
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
|
||||
""")
|
||||
|
||||
# バッチステータス管理テーブルを登録
|
||||
db.execute("""
|
||||
INSERT INTO internal07.jskult_batch_status_manage
|
||||
(process_name, process_date, process_type,
|
||||
process_status, total_run_count, max_run_count_flg)
|
||||
VALUES
|
||||
('jskult-batch-business-day-update', '2025-05-30', 'update_business_day',
|
||||
'start', '2', '0'),
|
||||
('jskult-batch-trn-result-data-bio-lot', '2025-05-30','post_process',
|
||||
'doing', '1', '0'),
|
||||
('jskult-batch-dcf-inst-merge-io', '2025-05-30','post_process',
|
||||
'done', '1', '0'),
|
||||
('jskult-batch-mst-inst-all', '2025-05-30','post_process',
|
||||
'done', '1', '0')
|
||||
""")
|
||||
|
||||
# Act
|
||||
sut = JskultBatchStatusManager(
|
||||
'jskult-batch-business-day-update',
|
||||
'update_business_day',
|
||||
3,
|
||||
4
|
||||
)
|
||||
with pytest.raises(MaxRunCountReachedException):
|
||||
sut.can_run_business_day_update()
|
||||
|
||||
# Assert
|
||||
actual_record = db.execute_select("""
|
||||
SELECT
|
||||
max_run_count_flg
|
||||
FROM
|
||||
internal07.jskult_batch_status_manage
|
||||
WHERE
|
||||
process_name = 'jskult-batch-business-day-update'
|
||||
AND process_date = '2025-05-30'
|
||||
""")[0]
|
||||
|
||||
assert actual_record['max_run_count_flg'] == 1
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user