import re from datetime import datetime, timezone from src.util.execute_datetime import ExecuteDateTime class TestExecuteDateTime: def test_constructor(self): """ Cases: インスタンス生成テスト UTC時刻が文字列で設定されるかのチェック Arranges: - 現在時刻の保持 - 期待される値の正規表現作成 Expects: - 作成されたクラスが保持している時刻が、期待値と一致すること - 作成されたクラスが保持している時刻が、正規表現と一致すること """ # Arranges datetime_now = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.000Z') pattern = r'[12]\d{3}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.000Z' # Expects sut = ExecuteDateTime() assert str(sut) == datetime_now assert re.fullmatch(pattern, str(sut)) def test_to_path(self) -> str: """ Cases: 生成されたパスがYYYYMMDD/HHMMSSの形式で出力されること Arranges: - 現在時刻をパスに変換する - 期待される値の正規表現作成 Expects: - 戻り値が、期待値と一致する - 戻り値が、正規表現と一致すること """ # Arranges datetime_now_path = datetime.now(timezone.utc).strftime( '%Y-%m-%dT%H:%M:%S.000Z').rstrip('000Z').translate(str.maketrans({'-': '/', 'T': '/', ':': None, '.': None})) pattern = r'[12]\d{3}\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01])\/([01][0-9]|2[0-3])[0-5][0-9][0-5][0-9]' # Expects sut = ExecuteDateTime() actual = sut.to_path() assert actual == datetime_now_path assert re.fullmatch(pattern, actual) def test_format_date(self) -> str: """ Cases: 生成されたパスがYYYYMMDDHHMMSSの形式で出力されること Arranges: - 現在時刻をパスに変換する - 期待される値の正規表現作成 Expects: - 戻り値が、期待値と一致する - 戻り値が、正規表現と一致すること """ # Arranges datetime_now_path = datetime.now(timezone.utc).strftime( '%Y-%m-%dT%H:%M:%S.000Z').rstrip('000Z').translate(str.maketrans({'-': None, 'T': None, ':': None, '.': None})) pattern = r'[12]\d{3}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])[0-5][0-9][0-5][0-9]' # Expects sut = ExecuteDateTime() actual = sut.format_date() assert actual == datetime_now_path assert re.fullmatch(pattern, actual)