2507 lines
83 KiB
Python
2507 lines
83 KiB
Python
import pytest
|
|
from src.config.objects import (FetchTargetObjects, LastFetchDatetime,
|
|
TargetObject)
|
|
from src.parser.json_parse import JsonParser
|
|
from src.util.execute_datetime import ExecuteDateTime
|
|
|
|
|
|
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
|
|
None
|
|
|
|
def test_constructor_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、必要なキーがない場合、例外が発生すること
|
|
Arranges:
|
|
- オブジェクト情報を辞書型にパースする
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
fetch_objects = '''{
|
|
"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": 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
|
|
}
|
|
]
|
|
}'''
|
|
|
|
# Arranges
|
|
json_parser = JsonParser(fetch_objects)
|
|
fetch_objects_dict = json_parser.parse()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
FetchTargetObjects(fetch_objects_dict)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「objects」キーは必須です'
|
|
|
|
def test_constructor_no_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキーの値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- オブジェクト情報を辞書型にパースする
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
fetch_objects = '''{
|
|
"objects": "test_value"
|
|
}'''
|
|
|
|
# Arranges
|
|
json_parser = JsonParser(fetch_objects)
|
|
fetch_objects_dict = json_parser.parse()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
FetchTargetObjects(fetch_objects_dict)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「objects」キーの値は「<class \'list\'>」でなければなりません'
|
|
|
|
|
|
class TestTargetObject():
|
|
|
|
def test_constructor(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、バリデーションチェックを行いチェックが通ることを確認する
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
# object_name
|
|
|
|
def test_raise_constructor_object_name_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、必要なキー(object_name)がない場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「object_name」キーは必須です'
|
|
|
|
def test_raise_constructor_object_name_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(object_name)の値が空文字の場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「object_name」キーは必須です'
|
|
|
|
def test_raise_constructor_object_name_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(object_name)の値がNoneの場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": None,
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「object_name」キーは必須です'
|
|
|
|
def test_raise_constructor_object_name_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(object_name)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": 1,
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「object_name」キーの値は「<class \'str\'>」でなければなりません'
|
|
|
|
# columns
|
|
|
|
def test_raise_constructor_columns_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、必要なキー(columns)がない場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「columns」キーは必須です'
|
|
|
|
def test_raise_constructor_columns_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(columns)の値が空文字の場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": "",
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「columns」キーは必須です'
|
|
|
|
def test_raise_constructor_columns_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(columns)の値がNoneの場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": None,
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「columns」キーは必須です'
|
|
|
|
def test_raise_constructor_columns_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(columns)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": False,
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「columns」キーの値は「<class \'list\'>」でなければなりません'
|
|
|
|
def test_raise_constructor_columns_no_value_list(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(columns)の値がリスト型で空の場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「columns」キーのリストの値は必須です'
|
|
|
|
# is_skip
|
|
|
|
def test_raise_constructor_is_skip_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、キー(is_skip)がない場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_is_skip_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(is_skip)の値の型が空文字の場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": "",
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_is_skip_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(is_skip)の値の型がNoneの場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": None,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_raise_constructor_is_skip_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(is_skip)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": "False",
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「is_skip」キーの値は「<class \'bool\'>」でなければなりません'
|
|
|
|
# is_update_last_fetch_datetime
|
|
|
|
def test_raise_constructor_is_update_last_fetch_datetime_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、キー(is_update_last_fetch_datetime)がない場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_is_update_last_fetch_datetime_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(is_update_last_fetch_datetime)の値の型が空文字の場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": "",
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_is_update_last_fetch_datetime_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(is_update_last_fetch_datetime)の値の型がNoneの場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": None,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_raise_constructor_is_update_last_fetch_datetime_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(is_update_last_fetch_datetime)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": "False",
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「is_update_last_fetch_datetime」キーの値は「<class \'bool\'>」でなければなりません'
|
|
|
|
# last_fetch_datetime_file_name
|
|
|
|
def test_raise_constructor_last_fetch_datetime_file_name_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、キー(last_fetch_datetime_file_name)がない場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_last_fetch_datetime_file_name_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(last_fetch_datetime_file_name)の値の型が空文字の場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_last_fetch_datetime_file_name_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(last_fetch_datetime_file_name)の値の型がNoneの場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": None,
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_raise_constructor_last_fetch_datetime_file_name_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(last_fetch_datetime_file_name)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": 1,
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「last_fetch_datetime_file_name」キーの値は「<class \'str\'>」でなければなりません'
|
|
|
|
# upload_file_name
|
|
|
|
def test_raise_constructor_upload_file_name_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、キー(upload_file_name)がない場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_upload_file_name_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(upload_file_name)の値の型が空文字の場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_upload_file_name_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(upload_file_name)の値の型がNoneの場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": None,
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_raise_constructor_upload_file_name_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(upload_file_name)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": 1,
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「upload_file_name」キーの値は「<class \'str\'>」でなければなりません'
|
|
|
|
# datetime_column
|
|
|
|
def test_raise_constructor_datetime_column_no_key(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータに対して、キー(datetime_column)がない場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_datetime_column_no_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(datetime_column)の値の型が空文字の場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": ""
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_constructor_datetime_column_none_value(self) -> None:
|
|
"""
|
|
Cases:
|
|
辞書型のデータの対象のキー(datetime_column)の値の型がNoneの場合、例外が発生しないこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生しないこと
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": None
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
None
|
|
|
|
def test_raise_constructor_datetime_column_other_type(self) -> None:
|
|
"""
|
|
Cases:
|
|
インスタンス生成テスト
|
|
辞書型のデータの対象のキー(datetime_column)の値の型が想定と違う場合、例外が発生すること
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
Expects:
|
|
- 例外が発生し期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": False,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": 1
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
# Act
|
|
with pytest.raises(Exception) as e:
|
|
TargetObject(object_info, execute_datetime)
|
|
|
|
# Expects
|
|
assert str(e.value) == '「datetime_column」キーの値は「<class \'str\'>」でなければなりません'
|
|
|
|
# property
|
|
|
|
def test_object_name(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.object_name
|
|
|
|
# Expects
|
|
assert actual == 'AccountShare'
|
|
|
|
def test_columns(self) -> list:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.columns
|
|
|
|
# Expects
|
|
expected_value = [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
]
|
|
assert actual == expected_value
|
|
|
|
def test_is_skip(self) -> bool:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.is_skip
|
|
|
|
# Expects
|
|
assert actual is True
|
|
|
|
def test_is_skip_default(self) -> bool:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": "",
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.is_skip
|
|
|
|
# Expects
|
|
assert actual is False
|
|
|
|
def test_is_update_last_fetch_datetime(self) -> bool:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.is_update_last_fetch_datetime
|
|
|
|
# Expects
|
|
assert actual is False
|
|
|
|
def test_is_update_last_fetch_datetime_default(self) -> bool:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": "",
|
|
"last_fetch_datetime_file_name": "AccountShare.json",
|
|
"upload_file_name": "CRM_AccountShare",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.is_update_last_fetch_datetime
|
|
|
|
# Expects
|
|
assert actual is True
|
|
|
|
def test_last_fetch_datetime_file_name(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare_Test.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.last_fetch_datetime_file_name
|
|
|
|
# Expects
|
|
assert actual == 'AccountShare_Test.json'
|
|
|
|
def test_last_fetch_datetime_file_name_default(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "",
|
|
"upload_file_name": "CRM_AccountShare",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.last_fetch_datetime_file_name
|
|
|
|
# Expects
|
|
assert actual == 'AccountShare.json'
|
|
|
|
def test_upload_file_name(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare_Test.json",
|
|
"upload_file_name": "CRM_AccountShare_Test_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.upload_file_name
|
|
|
|
# Expects
|
|
assert actual == f'CRM_AccountShare_Test_{execute_datetime.format_date()}'
|
|
|
|
def test_upload_file_name_default(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare_Test.json",
|
|
"upload_file_name": "",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.upload_file_name
|
|
|
|
# Expects
|
|
assert actual == f'CRM_AccountShare_{execute_datetime.format_date()}'
|
|
|
|
def test_datetime_column(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare_Test.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": "LastModifiedDate"
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.datetime_column
|
|
|
|
# Expects
|
|
assert actual == 'LastModifiedDate'
|
|
|
|
def test_datetime_column_default(self) -> str:
|
|
"""
|
|
Cases:
|
|
オブジェクト情報から対象の値を返すこと
|
|
Arranges:
|
|
- 辞書型のオブジェクト情報を準備する
|
|
- 実行日次インスタンスを生成する
|
|
- オブジェクト情報インスタンスを生成する
|
|
Expects:
|
|
- 戻り値が期待値と一致する
|
|
"""
|
|
|
|
# Arranges
|
|
object_info = {
|
|
"object_name": "AccountShare",
|
|
"columns": [
|
|
"Id",
|
|
"AccountId",
|
|
"UserOrGroupId",
|
|
"AccountAccessLevel",
|
|
"OpportunityAccessLevel",
|
|
"CaseAccessLevel",
|
|
"ContactAccessLevel",
|
|
"RowCause",
|
|
"LastModifiedDate",
|
|
"LastModifiedById",
|
|
"IsDeleted"
|
|
],
|
|
"is_skip": True,
|
|
"is_update_last_fetch_datetime": False,
|
|
"last_fetch_datetime_file_name": "AccountShare_Test.json",
|
|
"upload_file_name": "CRM_AccountShare_{execute_datetime}",
|
|
"datetime_column": ""
|
|
}
|
|
|
|
execute_datetime = ExecuteDateTime()
|
|
|
|
sut = TargetObject(object_info, execute_datetime)
|
|
|
|
# Act
|
|
actual = sut.datetime_column
|
|
|
|
# Expects
|
|
assert actual == 'SystemModstamp'
|
|
|
|
|
|
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
|
|
None
|
|
|
|
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」キーの値の正規表現「[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」チェックに失敗しました'
|
|
|
|
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
|
|
None
|
|
|
|
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
|
|
None
|
|
|
|
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」キーの値の正規表現「[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」チェックに失敗しました'
|
|
|
|
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)
|