fix: 単体テストコード指摘に伴う修正

This commit is contained in:
Y_SAKAI 2022-08-08 13:24:03 +09:00 committed by shimoda.m@nds-tyo.co.jp
parent 47407a5cef
commit 2547513850
6 changed files with 926 additions and 789 deletions

View File

@ -1,21 +1,13 @@
from src.system_var.constants import (COLUMNS_KEY, COLUMNS_TYPE, from src.system_var.constants import (
DATE_PATTERN_YYYYMMDDTHHMMSSTZ, COLUMNS_KEY, COLUMNS_TYPE, DATE_PATTERN_YYYYMMDDTHHMMSSTZ,
DATETIME_COLUMN_DEFAULT_VALUE, DATETIME_COLUMN_DEFAULT_VALUE, DATETIME_COLUMN_KEY, DATETIME_COLUMN_TYPE,
DATETIME_COLUMN_KEY, DATE_PATTERN_EXPECTED_YYYYMMDDTHHMMSSTZ, IS_SKIP_KEY, IS_SKIP_TYPE,
DATETIME_COLUMN_TYPE, IS_SKIP_KEY, IS_UPDATE_LAST_FETCH_DATETIME_KEY, IS_UPDATE_LAST_FETCH_DATETIME_TYPE,
IS_SKIP_TYPE, LAST_FETCH_DATETIME_FILE_NAME_KEY, LAST_FETCH_DATETIME_FILE_NAME_TYPE,
IS_UPDATE_LAST_FETCH_DATETIME_KEY, LAST_FETCH_DATETIME_FROM_KEY, LAST_FETCH_DATETIME_FROM_TYPE,
IS_UPDATE_LAST_FETCH_DATETIME_TYPE, LAST_FETCH_DATETIME_TO_KEY, LAST_FETCH_DATETIME_TO_TYPE, OBJECT_NAME_KEY,
LAST_FETCH_DATETIME_FILE_NAME_KEY, OBJECT_NAME_TYPE, OBJECTS_KEY, OBJECTS_TYPE, UPLOAD_FILE_NAME_KEY,
LAST_FETCH_DATETIME_FILE_NAME_TYPE, UPLOAD_FILE_NAME_TYPE)
LAST_FETCH_DATETIME_FROM_KEY,
LAST_FETCH_DATETIME_FROM_TYPE,
LAST_FETCH_DATETIME_TO_KEY,
LAST_FETCH_DATETIME_TO_TYPE,
OBJECT_NAME_KEY, OBJECT_NAME_TYPE,
OBJECTS_KEY, OBJECTS_TYPE,
UPLOAD_FILE_NAME_KEY,
UPLOAD_FILE_NAME_TYPE)
from src.util.dict_checker import DictChecker from src.util.dict_checker import DictChecker
from src.util.execute_datetime import ExecuteDateTime from src.util.execute_datetime import ExecuteDateTime
@ -127,10 +119,10 @@ class LastFetchDatetime():
def __validate(self) -> None: def __validate(self) -> None:
self.__dict_checker.assert_key_exist(LAST_FETCH_DATETIME_FROM_KEY) self.__dict_checker.assert_key_exist(LAST_FETCH_DATETIME_FROM_KEY)
self.__dict_checker.assert_data_type(LAST_FETCH_DATETIME_FROM_KEY, LAST_FETCH_DATETIME_FROM_TYPE) self.__dict_checker.assert_data_type(LAST_FETCH_DATETIME_FROM_KEY, LAST_FETCH_DATETIME_FROM_TYPE)
self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_FROM_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ) self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_FROM_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ,DATE_PATTERN_EXPECTED_YYYYMMDDTHHMMSSTZ)
if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_TO_KEY): if self.__dict_checker.check_key_exist(LAST_FETCH_DATETIME_TO_KEY):
self.__dict_checker.assert_data_type(LAST_FETCH_DATETIME_TO_KEY, LAST_FETCH_DATETIME_TO_TYPE) self.__dict_checker.assert_data_type(LAST_FETCH_DATETIME_TO_KEY, LAST_FETCH_DATETIME_TO_TYPE)
self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_TO_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ) self.__dict_checker.assert_match_pattern(LAST_FETCH_DATETIME_TO_KEY, DATE_PATTERN_YYYYMMDDTHHMMSSTZ,DATE_PATTERN_EXPECTED_YYYYMMDDTHHMMSSTZ)
return return
@property @property

View File

@ -50,8 +50,10 @@ S3_CHAR_CODE = 'utf-8'
# 正規表現チェック # 正規表現チェック
EXCLUDE_SYMBOL = ['#', '/'] EXCLUDE_SYMBOL = ['#', '/']
DATE_PATTERN_YYYYMMDDTHHMMSSTZ = 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' DATE_PATTERN_YYYYMMDDTHHMMSSTZ = 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'
DATE_PATTERN_EXPECTED_YYYYMMDDTHHMMSSTZ = 'YYYY-MM-DDTHH:MM:SS.000Z'
DATE_PATTERN_YYYYMMDDHHMMSSFFF_UTC = r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.000\+0000' DATE_PATTERN_YYYYMMDDHHMMSSFFF_UTC = r'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.000\+0000'
# logger # logger
LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n' LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n'
LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'

View File

@ -7,15 +7,15 @@ class DictChecker:
def is_empty(self, check_key): def is_empty(self, check_key):
"""辞書型バリュー空文字チェック""" """辞書型バリュー空文字チェック"""
return self.__object_dict[check_key] != '' and self.__object_dict[check_key] is not None return self.__object_dict[check_key] == '' or self.__object_dict[check_key] is None
def is_list_empty(self, check_key): def is_list_empty(self, check_key):
"""list型データ存在チェック""" """list型データ存在チェック"""
return len(self.__object_dict[check_key]) != 0 return len(self.__object_dict[check_key]) == 0
def check_key_exist(self, check_key: str) -> bool: def check_key_exist(self, check_key: str) -> bool:
"""辞書型キー存在チェック""" """辞書型キー存在チェック"""
return check_key in self.__object_dict and self.is_empty(check_key) return check_key in self.__object_dict and not self.is_empty(check_key)
def check_data_type(self, check_key: str, check_type: type) -> bool: def check_data_type(self, check_key: str, check_type: type) -> bool:
"""辞書型バリュー型チェック""" """辞書型バリュー型チェック"""
@ -39,13 +39,13 @@ class DictChecker:
return return
def assert_match_pattern(self, check_key: str, regex_str: str): def assert_match_pattern(self, check_key: str, regex_str: str, expected_str: str):
"""正規表現検査""" """正規表現検査"""
if not self.check_match_pattern(regex_str, check_key): if not self.check_match_pattern(regex_str, check_key):
raise Exception(f'{check_key}」キーの値の正規表現{regex_str}」チェックに失敗しました') raise Exception(f'{check_key}」キーの値の正規表現チェックに失敗しました 「{expected_str}」形式である必要があります')
return return
def assert_list_empty(self, check_key: str): def assert_list_empty(self, check_key: str):
if not self.is_list_empty(check_key): if self.is_list_empty(check_key):
raise Exception(f'{check_key}」キーのリストの値は必須です') raise Exception(f'{check_key}」キーのリストの値は必須です')

View File

@ -0,0 +1,467 @@
import pytest
from src.config.objects import FetchTargetObjects
from src.parser.json_parse import JsonParser
class TestFetchTargetObjects():
def test_constructor(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータに対してキーがあるかまたキーの型が正しいかをチェック
Arranges:
- オブジェクト情報文字列を準備する
- オブジェクト情報を辞書型にパースする
Expects:
- 例外が発生しないこと
"""
# Arranges
fetch_objects = '''{
"objects": [
{
"object_name": "AccountShare",
"columns": [
"Id",
"AccountId",
"UserOrGroupId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"RowCause",
"LastModifiedDate",
"LastModifiedById",
"IsDeleted"
],
"is_skip": false,
"is_update_last_fetch_datetime": true,
"datetime_column": "LastModifiedDate"
},
{
"object_name": "Contact",
"columns": [
"Id",
"IsDeleted",
"MasterRecordId",
"AccountId",
"IsPersonAccount",
"LastName",
"FirstName",
"Salutation",
"Name",
"OtherStreet",
"OtherCity",
"OtherState",
"OtherPostalCode",
"OtherCountry",
"OtherLatitude",
"OtherLongitude",
"OtherGeocodeAccuracy",
"OtherAddress",
"MailingStreet",
"MailingCity",
"MailingState",
"MailingPostalCode",
"MailingCountry",
"MailingLatitude",
"MailingLongitude",
"MailingGeocodeAccuracy",
"MailingAddress",
"Phone",
"Fax",
"MobilePhone",
"HomePhone",
"OtherPhone",
"AssistantPhone",
"ReportsToId",
"Email",
"Title",
"Department",
"AssistantName",
"Birthdate",
"Description",
"OwnerId",
"HasOptedOutOfEmail",
"HasOptedOutOfFax",
"DoNotCall",
"CreatedDate",
"CreatedById",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"LastActivityDate",
"LastCURequestDate",
"LastCUUpdateDate",
"MayEdit",
"IsLocked",
"LastViewedDate",
"LastReferencedDate",
"EmailBouncedReason",
"EmailBouncedDate",
"IsEmailBounced",
"PhotoUrl",
"Jigsaw",
"JigsawContactId",
"IndividualId",
"Mobile_ID_vod__c",
"H1Insights__H1_NPI_Value_for_Testing__c",
"H1Insights__H1_Person_ID__c",
"H1Insights__H1_Request_Status__c",
"H1Insights__H1_URL__c",
"H1Insights__NPI_Number__c",
"H1Insights__NPI_Number_for_H1_Insights__c",
"MSJ_Marketing_Cloud_Integration__c"
],
"is_skip": false,
"is_update_last_fetch_datetime": true
},
{
"object_name": "Territory2",
"columns": [
"Id",
"Name",
"Territory2TypeId",
"Territory2ModelId",
"ParentTerritory2Id",
"Description",
"ForecastUserId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"DeveloperName",
"MSJ_Territory_Type__c",
"MSJ_Level__c"
],
"is_skip": false,
"is_update_last_fetch_datetime": true
}
]
}'''
json_parser = JsonParser(fetch_objects)
fetch_objects_dict = json_parser.parse()
# Act
FetchTargetObjects(fetch_objects_dict)
# Expects
pass
def test_raise_constructor_no_key(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータに対して必要なキーがない場合例外が発生すること
Arranges:
- オブジェクト情報文字列を準備する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
fetch_objects_dict = {
"test_objects": [
{
"object_name": "AccountShare",
"columns": [
"Id",
"AccountId",
"UserOrGroupId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"RowCause",
"LastModifiedDate",
"LastModifiedById",
"IsDeleted"
],
"is_skip": False,
"is_update_last_fetch_datetime": False,
"datetime_column": "LastModifiedDate"
},
{
"object_name": "Contact",
"columns": [
"Id",
"IsDeleted",
"MasterRecordId",
"AccountId",
"IsPersonAccount",
"LastName",
"FirstName",
"Salutation",
"Name",
"OtherStreet",
"OtherCity",
"OtherState",
"OtherPostalCode",
"OtherCountry",
"OtherLatitude",
"OtherLongitude",
"OtherGeocodeAccuracy",
"OtherAddress",
"MailingStreet",
"MailingCity",
"MailingState",
"MailingPostalCode",
"MailingCountry",
"MailingLatitude",
"MailingLongitude",
"MailingGeocodeAccuracy",
"MailingAddress",
"Phone",
"Fax",
"MobilePhone",
"HomePhone",
"OtherPhone",
"AssistantPhone",
"ReportsToId",
"Email",
"Title",
"Department",
"AssistantName",
"Birthdate",
"Description",
"OwnerId",
"HasOptedOutOfEmail",
"HasOptedOutOfFax",
"DoNotCall",
"CreatedDate",
"CreatedById",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"LastActivityDate",
"LastCURequestDate",
"LastCUUpdateDate",
"MayEdit",
"IsLocked",
"LastViewedDate",
"LastReferencedDate",
"EmailBouncedReason",
"EmailBouncedDate",
"IsEmailBounced",
"PhotoUrl",
"Jigsaw",
"JigsawContactId",
"IndividualId",
"Mobile_ID_vod__c",
"H1Insights__H1_NPI_Value_for_Testing__c",
"H1Insights__H1_Person_ID__c",
"H1Insights__H1_Request_Status__c",
"H1Insights__H1_URL__c",
"H1Insights__NPI_Number__c",
"H1Insights__NPI_Number_for_H1_Insights__c",
"MSJ_Marketing_Cloud_Integration__c"
],
"is_skip": False,
"is_update_last_fetch_datetime": True
},
{
"object_name": "Territory2",
"columns": [
"Id",
"Name",
"Territory2TypeId",
"Territory2ModelId",
"ParentTerritory2Id",
"Description",
"ForecastUserId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"DeveloperName",
"MSJ_Territory_Type__c",
"MSJ_Level__c"
],
"is_skip": False,
"is_update_last_fetch_datetime": True
}
]
}
# Act
with pytest.raises(Exception) as e:
FetchTargetObjects(fetch_objects_dict)
# Expects
assert str(e.value) == '「objects」キーは必須です'
def test_raise_constructor_no_type(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキーの値の型が想定と違う場合例外が発生すること
Arranges:
- オブジェクト情報文字列を準備する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
fetch_objects_dict = {
"objects": "test_value"
}
# Act
with pytest.raises(Exception) as e:
FetchTargetObjects(fetch_objects_dict)
# Expects
assert str(e.value) == '「objects」キーの値は「<class \'list\'>」でなければなりません'
def test_constructor_iterator(self) -> None:
"""
Cases:
インスタンス生成テスト
登録されたオブジェクトリストをすべて取り出せること
Arranges:
- オブジェクト情報文字列を準備する
Expects:
- ループが最後まで回ること
"""
fetch_objects_dict = {
"objects": [
{
"object_name": "AccountShare",
"columns": [
"Id",
"AccountId",
"UserOrGroupId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"RowCause",
"LastModifiedDate",
"LastModifiedById",
"IsDeleted"
],
"is_skip": False,
"is_update_last_fetch_datetime": False,
"datetime_column": "LastModifiedDate"
},
{
"object_name": "Contact",
"columns": [
"Id",
"IsDeleted",
"MasterRecordId",
"AccountId",
"IsPersonAccount",
"LastName",
"FirstName",
"Salutation",
"Name",
"OtherStreet",
"OtherCity",
"OtherState",
"OtherPostalCode",
"OtherCountry",
"OtherLatitude",
"OtherLongitude",
"OtherGeocodeAccuracy",
"OtherAddress",
"MailingStreet",
"MailingCity",
"MailingState",
"MailingPostalCode",
"MailingCountry",
"MailingLatitude",
"MailingLongitude",
"MailingGeocodeAccuracy",
"MailingAddress",
"Phone",
"Fax",
"MobilePhone",
"HomePhone",
"OtherPhone",
"AssistantPhone",
"ReportsToId",
"Email",
"Title",
"Department",
"AssistantName",
"Birthdate",
"Description",
"OwnerId",
"HasOptedOutOfEmail",
"HasOptedOutOfFax",
"DoNotCall",
"CreatedDate",
"CreatedById",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"LastActivityDate",
"LastCURequestDate",
"LastCUUpdateDate",
"MayEdit",
"IsLocked",
"LastViewedDate",
"LastReferencedDate",
"EmailBouncedReason",
"EmailBouncedDate",
"IsEmailBounced",
"PhotoUrl",
"Jigsaw",
"JigsawContactId",
"IndividualId",
"Mobile_ID_vod__c",
"H1Insights__H1_NPI_Value_for_Testing__c",
"H1Insights__H1_Person_ID__c",
"H1Insights__H1_Request_Status__c",
"H1Insights__H1_URL__c",
"H1Insights__NPI_Number__c",
"H1Insights__NPI_Number_for_H1_Insights__c",
"MSJ_Marketing_Cloud_Integration__c"
],
"is_skip": False,
"is_update_last_fetch_datetime": True
},
{
"object_name": "Territory2",
"columns": [
"Id",
"Name",
"Territory2TypeId",
"Territory2ModelId",
"ParentTerritory2Id",
"Description",
"ForecastUserId",
"AccountAccessLevel",
"OpportunityAccessLevel",
"CaseAccessLevel",
"ContactAccessLevel",
"LastModifiedDate",
"LastModifiedById",
"SystemModstamp",
"DeveloperName",
"MSJ_Territory_Type__c",
"MSJ_Level__c"
],
"is_skip": False,
"is_update_last_fetch_datetime": True
}
]
}
# Act
sut = FetchTargetObjects(fetch_objects_dict)
for i, item in enumerate(sut, 1):
assert item is not None
# Expects
assert i == 3

View File

@ -0,0 +1,380 @@
import pytest
from src.config.objects import LastFetchDatetime
from src.util.execute_datetime import ExecuteDateTime
class TestLastFetchDatetime():
def test_constructor(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータに対してバリデーションチェックを行いチェックが通ることを確認する
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生しないこと
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
pass
def test_raise_constructor_last_fetch_datetime_from_no_key(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータに対して必要なキー(last_fetch_datetime_from)がない場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(e.value) == '「last_fetch_datetime_from」キーは必須です'
def test_raise_constructor_last_fetch_datetime_from_no_value(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_from)の値が空文字の場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "",
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(e.value) == '「last_fetch_datetime_from」キーは必須です'
def test_raise_constructor_last_fetch_datetime_from_none_value(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_from)の値がNoneの場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": None,
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(e.value) == '「last_fetch_datetime_from」キーは必須です'
def test_raise_constructor_last_fetch_datetime_from_other_type(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_from)の値の型が想定と違う場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": 1,
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(e.value) == '「last_fetch_datetime_from」キーの値は「<class \'str\'>」でなければなりません'
def test_raise_constructor_last_fetch_datetime_from_other_string(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_from)の値が正規表現と違う場合例外が発生すること
Arranges:
- 辞書型のオブジェクト情報を準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "aaa",
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(
e.value) == '「last_fetch_datetime_from」キーの値の正規表現チェックに失敗しました 「YYYY-MM-DDTHH:MM:SS.000Z」形式である必要があります'
def test_raise_constructor_last_fetch_datetime_to_no_key(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータに対してキー(last_fetch_datetime_to)がない場合例外が発生しないこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生しないこと
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
# Act
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
pass
def test_constructor_last_fetch_datetime_to_no_value(self) -> None:
"""
Cases:
辞書型のデータの対象のキー(last_fetch_datetime_to)の値の型が空文字の場合例外が発生しないこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生しないこと
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": ""
}
execute_datetime = ExecuteDateTime()
# Act
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
None
def test_constructor_last_fetch_datetime_to_none__value(self) -> None:
"""
Cases:
辞書型のデータの対象のキー(last_fetch_datetime_to)の値の型がNoneの場合例外が発生しないこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生しないこと
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": None
}
execute_datetime = ExecuteDateTime()
# Act
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
pass
def test_raise_constructor_last_fetch_datetime_to_other_type(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_to)の値の型が想定と違う場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": 1
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(e.value) == '「last_fetch_datetime_to」キーの値は「<class \'str\'>」でなければなりません'
def test_raise_constructor_last_fetch_datetime_to_other_string(self) -> None:
"""
Cases:
インスタンス生成テスト
辞書型のデータの対象のキー(last_fetch_datetime_to)の値が正規表現と違う場合例外が発生すること
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
Expects:
- 例外が発生し期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": "aaa"
}
execute_datetime = ExecuteDateTime()
# Act
with pytest.raises(Exception) as e:
LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Expects
assert str(
e.value) == '「last_fetch_datetime_to」キーの値の正規表現チェックに失敗しました 「YYYY-MM-DDTHH:MM:SS.000Z」形式である必要があります'
def test_last_fetch_datetime_from(self) -> str:
"""
Cases:
オブジェクト情報から対象の値を返すこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
- 前回取得日時インスタンスを生成する
Expects:
- 戻り値が期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
sut = LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Act
actual = sut.last_fetch_datetime_from
# Expects
assert actual == '1900-01-01T00:00:00.000Z'
def test_last_fetch_datetime_to(self) -> str:
"""
Cases:
オブジェクト情報から対象の値を返すこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
- 前回取得日時インスタンスを生成する
Expects:
- 戻り値が期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": "2022-01-01T00:00:00.000Z"
}
execute_datetime = ExecuteDateTime()
sut = LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Act
actual = sut.last_fetch_datetime_to
# Expects
assert actual == '2022-01-01T00:00:00.000Z'
def test_last_fetch_datetime_to_default(self) -> str:
"""
Cases:
オブジェクト情報から対象の値を返すこと
Arranges:
- 辞書型の前回取得日時データを準備する
- 実行日時インスタンスを生成する
- 前回取得日時インスタンスを生成する
Expects:
- 戻り値が期待値と一致する
"""
# Arranges
last_fetch_datetime_dict = {
"last_fetch_datetime_from": "1900-01-01T00:00:00.000Z",
"last_fetch_datetime_to": ""
}
execute_datetime = ExecuteDateTime()
sut = LastFetchDatetime(last_fetch_datetime_dict, execute_datetime)
# Act
actual = sut.last_fetch_datetime_to
# Expects
assert actual == str(execute_datetime)