diff --git a/ecs/crm-datafetch/tests/salesforce/test_salesfoce.py b/ecs/crm-datafetch/tests/salesforce/test_salesfoce.py index 413fae92..4b3f8ae1 100644 --- a/ecs/crm-datafetch/tests/salesforce/test_salesfoce.py +++ b/ecs/crm-datafetch/tests/salesforce/test_salesfoce.py @@ -5,7 +5,14 @@ from src.salesforce.salesforce_api import SalesforceApiClient class TestSalesforceApiClient: def test_fetch_sf_count(self): - + """ + Cases: + Salesforceからオブジェクトの件数が取得できること + Arranges: + SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない) + Expects: + 取得件数が1件以上になる + """ soql = """SELECT COUNT(Id) FROM @@ -20,7 +27,14 @@ class TestSalesforceApiClient: assert actual >= 1 def test_fetch_sf_data_one_record(self): - + """ + Cases: + Salesforceからオブジェクトが取得できること + Arranges: + SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない) + Expects: + オブジェクトが取得でき、期待値と一致していること + """ soql = """SELECT Id, Name, @@ -42,11 +56,42 @@ class TestSalesforceApiClient: """ sut = SalesforceApiClient() + expect = { + 'Name': 'テスト取引先名1', + 'CustomItem1__c': 'テスト', + 'CustomItem2__c': 1.0, + 'CustomItem3__c': True, + 'CustomItem4__c': '01:15:00.000Z', + 'CustomItem5__c': '1;2;3;4', + 'CustomItem6__c': '改行ありの\r\nテスト\r\n項目です', + 'CustomItem7__c': '2022-08-04', + 'CustomItem8__c': '2022-08-04T03:00:00.000+0000', + } actual = sut.fetch_sf_data(soql) - print(actual) assert len(actual) >= 1 + # Id, SystemModstamp, LastModifiedDateは自動生成なので、キーの有無だけ確認する + # Attributesも + assert 'Id' in actual[0].keys() + assert 'SystemModstamp' in actual[0].keys() + assert 'LastModifiedDate' in actual[0].keys() + assert 'attributes' in actual[0].keys() + + del actual[0]['Id'] + del actual[0]['SystemModstamp'] + del actual[0]['LastModifiedDate'] + del actual[0]['attributes'] + + assert dict(actual[0]) == expect def test_raise_create_instance_cause_auth_failed(self, monkeypatch): + """ + Cases: + 存在しないユーザを指定した場合、エラーが発生すること + Arranges: + なし + Expects: + ユーザ認証でエラーが発生すること + """ monkeypatch.setattr('src.salesforce.salesforce_api.CRM_USER_NAME', 'invalid_username') with pytest.raises(Exception): SalesforceApiClient() diff --git a/ecs/crm-datafetch/tests/salesforce/test_soql_builder.py b/ecs/crm-datafetch/tests/salesforce/test_soql_builder.py index 9a6f9a45..da42d486 100644 --- a/ecs/crm-datafetch/tests/salesforce/test_soql_builder.py +++ b/ecs/crm-datafetch/tests/salesforce/test_soql_builder.py @@ -6,6 +6,14 @@ from src.salesforce.soql_builder import SOQLBuilder class TestSOQLBuilder: def test_create_count_soql(self): + """ + Cases: + 件数取得のSOQLが生成できること + Arranges: + SOQL生成用のパラメータを用意する + Expects: + 期待値通りのSOQLが生成されること + """ test_target_object_json = { 'object_name': 'Account', 'columns': [ @@ -48,6 +56,14 @@ class TestSOQLBuilder: assert actual.replace('\n', '').replace(' ', '') == expect.replace('\n', '').replace(' ', '') def test_create_fetch_soql(self): + """ + Cases: + データ取得用のSOQLが生成できること + Arranges: + SOQL生成用のパラメータを用意する + Expects: + 期待値通りのSOQLが生成されること + """ test_target_object_json = { 'object_name': 'Account', 'columns': [ @@ -102,3 +118,43 @@ class TestSOQLBuilder: print('expect', expect) assert actual.replace('\n', '').replace(' ', '') == expect.replace('\n', '').replace(' ', '') + + def test_create_fetch_soql_no_columns(self): + """ + Cases: + データ取得用のSOQLがカラムがない状態で生成されること + Arranges: + SOQL生成用のパラメータを用意する + Expects: + 取得対象のカラムがないSOQLが生成されること + """ + test_target_object_json = { + 'object_name': 'Account', + 'columns': [] + } + + test_last_fetch_datetime_json = { + 'last_fetch_datetime_from': '1999-01-01T00:00:00.000Z', + 'last_fetch_datetime_to': '2000-01-01T00:00:00.000Z', + } + + execute_datetime = ExecuteDateTime() + target_object = TargetObject(test_target_object_json, execute_datetime) + test_last_fetch_datetime = LastFetchDatetime(test_last_fetch_datetime_json, execute_datetime) + + sut = SOQLBuilder(target_object, test_last_fetch_datetime) + actual = sut.create_fetch_soql() + + # TargetObjectのバリデーションで、columnsが空の場合はエラーになるため、本来は発生しない + expect = """SELECT + FROM + Account + WHERE + SystemModstamp > 1999-01-01T00:00:00.000Z AND + SystemModstamp <= 2000-01-01T00:00:00.000Z + """ + + print('actual', actual) + print('expect', expect) + + assert actual.replace('\n', '').replace(' ', '') == expect.replace('\n', '').replace(' ', '')