fix: 単体テストコード指摘に伴う修正
This commit is contained in:
parent
47407a5cef
commit
2547513850
@ -1,21 +1,13 @@
|
||||
from src.system_var.constants import (COLUMNS_KEY, COLUMNS_TYPE,
|
||||
DATE_PATTERN_YYYYMMDDTHHMMSSTZ,
|
||||
DATETIME_COLUMN_DEFAULT_VALUE,
|
||||
DATETIME_COLUMN_KEY,
|
||||
DATETIME_COLUMN_TYPE, IS_SKIP_KEY,
|
||||
IS_SKIP_TYPE,
|
||||
IS_UPDATE_LAST_FETCH_DATETIME_KEY,
|
||||
IS_UPDATE_LAST_FETCH_DATETIME_TYPE,
|
||||
LAST_FETCH_DATETIME_FILE_NAME_KEY,
|
||||
LAST_FETCH_DATETIME_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.system_var.constants import (
|
||||
COLUMNS_KEY, COLUMNS_TYPE, DATE_PATTERN_YYYYMMDDTHHMMSSTZ,
|
||||
DATETIME_COLUMN_DEFAULT_VALUE, DATETIME_COLUMN_KEY, DATETIME_COLUMN_TYPE,
|
||||
DATE_PATTERN_EXPECTED_YYYYMMDDTHHMMSSTZ, IS_SKIP_KEY, IS_SKIP_TYPE,
|
||||
IS_UPDATE_LAST_FETCH_DATETIME_KEY, IS_UPDATE_LAST_FETCH_DATETIME_TYPE,
|
||||
LAST_FETCH_DATETIME_FILE_NAME_KEY, LAST_FETCH_DATETIME_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.execute_datetime import ExecuteDateTime
|
||||
|
||||
@ -127,10 +119,10 @@ class LastFetchDatetime():
|
||||
def __validate(self) -> None:
|
||||
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_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):
|
||||
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
|
||||
|
||||
@property
|
||||
|
||||
@ -50,8 +50,10 @@ S3_CHAR_CODE = 'utf-8'
|
||||
# 正規表現チェック
|
||||
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_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'
|
||||
|
||||
|
||||
# logger
|
||||
LOG_FORMAT = '[%(levelname)s]\t%(asctime)s\t%(message)s\n'
|
||||
LOG_DATE_FORMAT = '%Y-%m-%d %H:%M:%S'
|
||||
|
||||
@ -7,15 +7,15 @@ class DictChecker:
|
||||
|
||||
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):
|
||||
"""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:
|
||||
"""辞書型キー存在チェック"""
|
||||
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:
|
||||
"""辞書型バリュー型チェック"""
|
||||
@ -39,13 +39,13 @@ class DictChecker:
|
||||
|
||||
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):
|
||||
raise Exception(f'「{check_key}」キーの値の正規表現「{regex_str}」チェックに失敗しました')
|
||||
raise Exception(f'「{check_key}」キーの値の正規表現チェックに失敗しました 「{expected_str}」形式である必要があります')
|
||||
|
||||
return
|
||||
|
||||
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}」キーのリストの値は必須です')
|
||||
|
||||
@ -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
|
||||
@ -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)
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user