From 2153eb5a203d64abe769f7931b2ec83bae89b347 Mon Sep 17 00:00:00 2001 From: Y_SAKAI Date: Mon, 8 Aug 2022 15:23:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20execute=5Fdatetime=E3=81=AE=E3=83=86?= =?UTF-8?q?=E3=82=B9=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/util/test_execute_datetime.py | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 ecs/crm-datafetch/tests/util/test_execute_datetime.py diff --git a/ecs/crm-datafetch/tests/util/test_execute_datetime.py b/ecs/crm-datafetch/tests/util/test_execute_datetime.py new file mode 100644 index 00000000..cace2ff8 --- /dev/null +++ b/ecs/crm-datafetch/tests/util/test_execute_datetime.py @@ -0,0 +1,81 @@ +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)