feat: SOQLBuilderから生成したSOQLでの取得テストを追加

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2022-08-05 21:07:36 +09:00
parent 8373ccc456
commit c479c3bca3

View File

@ -1,5 +1,19 @@
"""
注意
当テストコードはSalesforceのレコードに依存しています
Accountオブジェクトの下記SFIDのレコードはいじらないようにしてください
- 0015i00000LNywwAAD(テスト取引先1)
- 0015i00000LOClSAAX(テスト取引先2)
- 0015i00000LOCmGAAX(テスト取引先3)
変更してしまった場合は各SOQLの取得日付とデータを修正してください
"""
import pytest
from src.config.objects import LastFetchDatetime, TargetObject
from src.salesforce.salesforce_api import SalesforceApiClient
from src.salesforce.soql_builder import SOQLBuilder
from src.util.execute_datetime import ExecuteDateTime
class TestSalesforceApiClient:
@ -19,13 +33,99 @@ class TestSalesforceApiClient:
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-04T16:36:00.000Z
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_count(soql)
assert actual >= 1
def test_fetch_sf_count_by_soql_builder_system_modstamp_lt_from_and_to_ge(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceからオブジェクトの件数が取得できること
- SystemModStampがFrom指定日付未満のレコードは取得できないこと
- SystemModStampのToが指定日付以上のレコードは取得できること
Arranges:
- SalesforceのAccountオブジェクトにレコードを作成する
- LastFetchDatetimeのFromがSystemModstamp未満になるように指定するUTC指定
- LastFetchDatetimeのToがSystemModstampピッタリになるように指定するUTC指定
Expects:
取得件数が1になる
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2022-08-05T11:14:07.000Z',
'last_fetch_datetime_to': '2022-08-05T11:15:29.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'CustomItem1__c',
'CustomItem2__c',
'CustomItem3__c',
'CustomItem4__c',
'CustomItem5__c',
'CustomItem6__c',
'CustomItem7__c',
'CustomItem8__c'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_count_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_count(soql)
assert actual == 1
def test_fetch_sf_count_by_soql_builder_system_modstamp_gt_from_and_to_lt(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceからオブジェクトの件数が取得できること
- SystemModStampのFromが指定日付のより大きいレコードは取得できること
- SystemModStampのToが指定日付未満のレコードは取得できないこと
Arranges:
- SalesforceのAccountオブジェクトにレコードを作成する
- LastFetchDatetimeのFromがSystemModstampより大きくなるように指定するUTC指定
- LastFetchDatetimeのToがSystemModstamp未満になるように指定するUTC指定
Expects:
取得件数が1になる
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2022-08-05T11:14:06.000Z',
'last_fetch_datetime_to': '2022-08-05T11:15:28.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'CustomItem1__c',
'CustomItem2__c',
'CustomItem3__c',
'CustomItem4__c',
'CustomItem5__c',
'CustomItem6__c',
'CustomItem7__c',
'CustomItem8__c'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_count_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_count(soql)
assert actual == 1
def test_fetch_sf_data_one_record(self):
"""
Cases:
@ -52,7 +152,7 @@ class TestSalesforceApiClient:
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-04T16:36:00.000Z
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
sut = SalesforceApiClient()
@ -69,6 +169,8 @@ class TestSalesforceApiClient:
}
actual = sut.fetch_sf_data(soql)
assert len(actual) >= 1
# 複数取れるが、アサーション対象は1つだけ
actual = [record for record in actual if record['Name'] == 'テスト取引先名1']
# Id, SystemModstamp, LastModifiedDateは自動生成なので、キーの有無だけ確認する
# Attributesも
assert 'Id' in actual[0].keys()
@ -83,6 +185,144 @@ class TestSalesforceApiClient:
assert dict(actual[0]) == expect
def test_fetch_sf_data_by_soql_builder_system_modstamp_lt_from_and_to_ge(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceからオブジェクトが取得できること
- SystemModStampがFrom指定日付未満のレコードは取得できないこと
- SystemModStampのToが指定日付以上のレコードは取得できること
Arranges:
- SalesforceのAccountオブジェクトにレコードを作成する
- LastFetchDatetimeのFromがSystemModstamp未満になるように指定するUTC指定
- LastFetchDatetimeのToがSystemModstampピッタリになるように指定するUTC指定
Expects:
取得できたオブジェクト1件が期待値どおりであること
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2022-08-05T11:14:07.000Z',
'last_fetch_datetime_to': '2022-08-05T11:15:29.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'CustomItem1__c',
'CustomItem2__c',
'CustomItem3__c',
'CustomItem4__c',
'CustomItem5__c',
'CustomItem6__c',
'CustomItem7__c',
'CustomItem8__c'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_fetch_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
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']
expect = {
'Name': 'テスト取引先名3',
'CustomItem1__c': 'テスト3',
'CustomItem2__c': 3.0,
'CustomItem3__c': True,
'CustomItem4__c': '00:45:00.000Z',
'CustomItem5__c': '2;3',
'CustomItem6__c': 'かいぎょ',
'CustomItem7__c': '2022-08-06',
'CustomItem8__c': '2022-08-06T00:00:00.000+0000',
}
assert dict(actual[0]) == expect
def test_fetch_sf_data_by_soql_builder_system_modstamp_gt_from_and_to_lt(self):
"""
Cases:
- SOQLBuilderから生成したSOQLでSalesforceからオブジェクトが取得できること
- SystemModStampのFromが指定日付のより大きいレコードは取得できること
- SystemModStampのToが指定日付未満のレコードは取得できないこと
Arranges:
- SalesforceのAccountオブジェクトにレコードを作成する
- LastFetchDatetimeのFromがSystemModstampより大きくなるように指定するUTC指定
- LastFetchDatetimeのToがSystemModstamp未満になるように指定するUTC指定
Expects:
取が1になる
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2022-08-05T11:14:06.000Z',
'last_fetch_datetime_to': '2022-08-05T11:15:28.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'CustomItem1__c',
'CustomItem2__c',
'CustomItem3__c',
'CustomItem4__c',
'CustomItem5__c',
'CustomItem6__c',
'CustomItem7__c',
'CustomItem8__c'
]
}, execute_datetime)
soql_builder = SOQLBuilder(target_object, last_fetch_datetime)
soql = soql_builder.create_fetch_soql()
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
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']
expect = {
'Name': 'テスト取引先名2',
'CustomItem1__c': 'テスト2',
'CustomItem2__c': 2.0,
'CustomItem3__c': False,
'CustomItem4__c': '00:30:00.000Z',
'CustomItem5__c': '1;4',
'CustomItem6__c': '改行あり項目',
'CustomItem7__c': '2022-08-05',
'CustomItem8__c': '2022-08-04T23:30:00.000+0000',
}
assert dict(actual[0]) == expect
def test_raise_create_instance_cause_auth_failed(self, monkeypatch):
"""
Cases: