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 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' # 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」キーの値は「」でなければなりません' 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」キーの値は「」でなければなりません' 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)