feat: バグ取りしながらテスト実装。can_run_processの判定がtrueになるパターンを実装。

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2025-05-27 17:00:09 +09:00
parent 274c7abec1
commit 881ebeb7e3
3 changed files with 125 additions and 57 deletions

View File

@ -83,7 +83,8 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
COUNT(*)
process_name,
process_date
FROM
internal07.jskult_batch_status_manage
WHERE
@ -93,7 +94,7 @@ class JskultBatchStatusManager:
{'process_name': self._process_name}
)
record_count = record[0]['count']
record_count = len(record)
if record_count == 0:
raise BatchOperationException("レコードの取得が出来ませんでした。")
@ -137,7 +138,8 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
COUNT(*)
process_name,
process_date
FROM
internal07.jskult_batch_status_manage
WHERE
@ -147,7 +149,7 @@ class JskultBatchStatusManager:
{'process_name': self._process_name}
)
record_count = record[0]['count']
record_count = len(record)
if record_count == 0:
raise ValueError("レコードの取得が出来ませんでした。")
@ -191,7 +193,8 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
COUNT(*)
process_name,
process_date
FROM
internal07.jskult_batch_status_manage
WHERE
@ -202,7 +205,7 @@ class JskultBatchStatusManager:
{'process_name': constants.PROCESS_NAME_ULTMARC_IO}
)
record_count = record[0]['count']
record_count = len(record)
return record_count != 0
except Exception as e:
@ -224,7 +227,8 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
run_count
total_run_count,
process_status
FROM
internal07.jskult_batch_status_manage
WHERE
@ -237,23 +241,25 @@ class JskultBatchStatusManager:
if len(record) == 0:
raise BatchOperationException("レコードの取得が出来ませんでした。")
run_count = record[0]['run_count']
total_run_count = record[0]['total_run_count']
process_status = record[0]['process_status']
self._db.execute(
"""
CALL
internal07.upsert_jskult_batch_status_manage(
:process_name,{self._process_name},
:process_type,{self._process_type},
NULL
:run_count,
:process_name,
:process_type,
:process_status,
:total_run_count,
NULL
)
""",
{
'process_name': self._process_name,
'process_type': self._process_type,
'run_count': run_count + 1,
'process_status': process_status,
'total_run_count': total_run_count + 1,
}
)
@ -276,28 +282,35 @@ class JskultBatchStatusManager:
Returns:
bool 後続処理を実行してよい場合はTrue
"""
# 自身(後続処理 or 日付テーブル更新)のレコードを取得する
record = self._db.execute_select(
"""
SELECT
COUNT(*)
FROM
internal07.jskult_batch_status_manage
WHERE
process_type = :process_type
AND process_status = :process_status
AND process_date = src07.get_syor_date();
""",
{
'process_type': constants.PROCESS_TYPE_DATA_IMPORT,
'process_status': constants.PROCESS_STATUS_DONE
}
)
try:
self._db.connect()
# 自身(後続処理 or 日付テーブル更新)のレコードを取得する
record = self._db.execute_select(
"""
SELECT
process_name,
process_date
FROM
internal07.jskult_batch_status_manage
WHERE
process_type = :process_type
AND process_status = :process_status
AND process_date = src07.get_syor_date();
""",
{
'process_type': constants.PROCESS_TYPE_DATA_IMPORT,
'process_status': constants.PROCESS_STATUS_DONE
}
)
record_count = record[0]['count']
record_count = len(record)
# データ取込数とデータ登録の件数が一致しているか確認
return self._receive_file_count == record_count
# データ取込数とデータ登録の件数が一致しているか確認
return self._receive_file_count == record_count
except Exception as e:
raise BatchOperationException(e)
finally:
self._db.disconnect()
def _is_done_post_process(self) -> bool:
"""後続処理のすべての処理が完了しているかを判定する
@ -342,7 +355,8 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
COUNT(*)
process_name,
process_date
FROM
internal07.jskult_batch_status_manage
WHERE
@ -356,7 +370,7 @@ class JskultBatchStatusManager:
}
)
record_count = record[0]['count']
record_count = len(record)
return record_count != 0
@ -379,20 +393,21 @@ class JskultBatchStatusManager:
record = self._db.execute_select(
"""
SELECT
run_count
total_run_count
FROM
internal07.jskult_batch_status_manage
WHERE
process_name = {self._process_name}
process_name = :process_name
AND
process_date = src07.get_syor_date();
"""
""",
{'process_name': self._process_name}
)
run_count = record[0]['run_count']
total_run_count = record[0]['total_run_count']
# 取得した起動回数とフィールド変数の最大起動回数が一致を確認
return run_count == self._max_run_count
return total_run_count == self._max_run_count
except Exception as e:
raise BatchOperationException(e)
finally:

View File

@ -29,7 +29,7 @@ PROCESS_TYPE_DATA_IMPORT = 'data_import'
# 後続処理
PROCESS_TYPE_POST_PROCESS = 'post_process'
# 日付テーブル更新
PROCESS_TYPE_DATA_IMPORT = 'update_business_day'
PROCESS_TYPE_UPDATE_BUSINESS_DAY = 'update_business_day'
# 処理ステータス:
# 処理開始

View File

@ -43,7 +43,8 @@ class TestJskultBatchStatusManager:
db.execute('DELETE FROM src07.hdke_tbl')
db.execute("""
INSERT INTO src07.hdke_tbl
(syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date)
(syor_date, bch_actf, dump_sts_kbn,
creater, create_date, updater, update_date)
VALUES
(:syor_date, :bch_actf, :dump_sts_kbn, CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
""", {
@ -64,7 +65,8 @@ class TestJskultBatchStatusManager:
db.connect()
db.execute("""
INSERT INTO src07.hdke_tbl
(syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date)
(syor_date, bch_actf, dump_sts_kbn,
creater, create_date, updater, update_date)
VALUES
('20250530', '1', '2', CURRENT_USER(), CURRENT_TIMESTAMP(), NULL, NULL)
""")
@ -105,26 +107,21 @@ class TestJskultBatchStatusManager:
db.connect()
db.execute("""
INSERT INTO src07.hdke_tbl
(syor_date, bch_actf, dump_sts_kbn, creater, create_date, updater, update_date)
(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
(:process_name,:process_date,:process_type,:process_status,:total_run_count,:max_run_count_flg)
""",
{
'process_name': 'unittest_process_name',
'process_date': '2025-05-30',
'process_type': 'unittest_process_type',
'process_status': 'retry',
'total_run_count': '1',
'max_run_count_flg': '0'
})
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',
'retry', '1', '0')
""")
# Act
sut = JskultBatchStatusManager(
@ -151,3 +148,59 @@ class TestJskultBatchStatusManager:
actual['process_date'], '%Y/%m/%d') == '2025/05/30'
assert actual['process_type'] == 'unittest_process_type'
assert actual['process_status'] == 'doing'
def test_can_run_post_process_success(self):
"""
完了しているデータ取り込み件数と受信ファイル数が一致している場合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
('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,
3
)
actual = sut.can_run_post_process()
# Assert
assert actual is True
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