786 lines
30 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
!!!!注意!!!!
当テストコードはSalesforceのレコードに依存しています。
Accountオブジェクトの下記SFIDのレコードはいじらないようにしてください
- 0015i00000LNywwAAD(テスト取引先1)
- 0015i00000LOClSAAX(テスト取引先2)
- 0015i00000LOCmGAAX(テスト取引先3)
変更してしまった場合は各SOQLの取得日付とデータを修正してください
"""
from typing import OrderedDict
import pytest
from requests.exceptions import ConnectTimeout, ReadTimeout
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:
def test_fetch_sf_count(self):
"""
Cases:
Salesforceからオブジェクトの件数が取得できること
Arranges:
SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない)
Expects:
取得件数が1件以上になる
"""
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 2022-08-23T01:56:39.000Z AND
SystemModstamp <= 2022-08-24T00:00:00.000Z
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_count(soql)
assert actual >= 1
def test_fetch_sf_count_zero_record(self):
"""
Cases:
取得範囲外の場合、Salesforceからオブジェクトの件数が取得できないこと
Arranges:
SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない)
Expects:
取得件数が0件になる
"""
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 1999-01-01T00:00:00.000Z AND
SystemModstamp <= 2000-01-01T00:00:00.000Z
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_count(soql)
assert actual >= 0
def test_fetch_sf_count_by_soql_builder_system_modstamp_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-23T02:38:59.000Z',
'last_fetch_datetime_to': '2022-08-23T02:39:00.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_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-23T02:38:00.000Z',
'last_fetch_datetime_to': '2022-08-23T02:39:01.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_all_range(self):
"""
Cases:
- SOQLBuilderから生成したSOQLで、Salesforceからオブジェクトの件数が取得できること
- SystemModStampのFromが2000年1月1日以降のレコードが取得できること
- SystemModStampのToが2100年12月31日未満のレコードが取得できること
Arranges:
- SalesforceのAccountオブジェクトに、レコードを作成する
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得件数が17になる
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.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 == 17
def test_fetch_sf_data_one_record(self):
"""
Cases:
Salesforceからオブジェクトが取得できること
Arranges:
SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない)
Expects:
オブジェクトが取得でき、期待値と一致していること
"""
soql = """SELECT
Id,
Name,
SystemModstamp,
LastModifiedDate,
CustomItem1__c,
CustomItem2__c,
CustomItem3__c,
CustomItem4__c,
CustomItem5__c,
CustomItem6__c,
CustomItem7__c,
CustomItem8__c
FROM
Account
WHERE
SystemModstamp > 2022-08-23T01:56:39.000Z AND
SystemModstamp <= 2022-08-24T00:00:00.000Z
"""
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)
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()
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_fetch_sf_data_zero_record(self):
"""
Cases:
取得範囲外の場合、Salesforceからオブジェクトが取得できないこと
Arranges:
SalesforceのAccountオブジェクトに、レコードを作成する(手作業、コード上では行わない)
Expects:
取得件数が0件になる
"""
soql = """SELECT
Id,
Name,
SystemModstamp,
LastModifiedDate,
CustomItem1__c,
CustomItem2__c,
CustomItem3__c,
CustomItem4__c,
CustomItem5__c,
CustomItem6__c,
CustomItem7__c,
CustomItem8__c
FROM
Account
WHERE
SystemModstamp > 1999-01-01T00:00:00.000Z AND
SystemModstamp <= 2000-01-01T00:00:00.000Z
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) >= 0
def test_fetch_sf_data_relationship_object_depth_1(self):
"""
Cases:
参照関係を1回辿るSOQLを実行し、Salesforceからデータが取得できること
Arranges:
Salesforceの以下のオブジェクトに、レコードを作成する(手作業、コード上では行わない)
- RelationShipTest__c
Expects:
取得結果が期待値と一致すること
"""
soql = """SELECT
Id,
Name,
RecordTypeId,
RecordType.DeveloperName
FROM
RelationShipTest__c
ORDER BY Name ASC
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
assert dict(actual[0])["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_fetch_sf_data_relationship_object_depth_2(self):
"""
Cases:
参照関係を2回辿るSOQLを実行し、Salesforceからデータが取得できること
Arranges:
Salesforceの以下のオブジェクトに、レコードを作成する(手作業、コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
Expects:
取得結果が期待値と一致すること
"""
soql = """SELECT
Id,
Name,
RelationShipTest__r.RecordType.DeveloperName
FROM
RelationShipTest_Child__c
ORDER BY Name ASC
"""
sut = SalesforceApiClient()
actual = sut.fetch_sf_data(soql)
assert len(actual) > 0
assert dict(actual[0])["RelationshipTest__r"]["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_fetch_sf_data_by_soql_builder_system_modstamp_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-23T03:48:39.000Z',
'last_fetch_datetime_to': '2022-08-23T03:48:40.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_to_gt(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-23T03:42:24.000Z',
'last_fetch_datetime_to': '2022-08-23T03:42:26.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_fetch_sf_data_by_soql_builder_address_item_check(self):
"""
Cases:
- SOQLBuilderから生成したSOQLで、Salesforceからオブジェクトが取得できること
- できること
Arranges:
- SalesforceのAccountオブジェクトに、住所項目を持つレコードを作成する
- 住所項目を持つレコードだけが取れるよう日付を設定する
Expects:
取得できたオブジェクト件数が1件になる
住所項目(BillingAddress)が想定通りの値になっていること
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2022-08-23T02:38:00.000Z',
'last_fetch_datetime_to': '2022-08-23T02:39:00.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'BillingStreet',
'BillingCity',
'BillingState',
'BillingPostalCode',
'BillingCountry',
'BillingLatitude',
'BillingLongitude',
'BillingGeocodeAccuracy',
'BillingAddress',
]
}, 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
expect_address = OrderedDict([
("city", '〇〇区'),
("country", "日本"),
("geocodeAccuracy", None),
("latitude", None),
("longitude", None),
("postalCode", '999-9999'),
("state", '東京都'),
("street", '△△-✗✗'),
])
assert actual[0]['BillingAddress'] == expect_address
assert actual[0]['BillingCity'] == '〇〇区'
assert actual[0]['BillingCountry'] == '日本'
assert actual[0]['BillingGeocodeAccuracy'] is None
assert actual[0]['BillingLatitude'] is None
assert actual[0]['BillingLongitude'] is None
assert actual[0]['BillingPostalCode'] == '999-9999'
assert actual[0]['BillingState'] == '東京都'
assert actual[0]['BillingStreet'] == '△△-✗✗'
def test_fetch_sf_data_by_soql_builder_system_modstamp_all_range(self):
"""
Cases:
- SOQLBuilderから生成したSOQLで、Salesforceからオブジェクトが取得できること
- SystemModStampのFromが2000年1月1日以降のレコードが取得できること
- SystemModStampのToが2100年12月31日未満のレコードが取得できること
Arranges:
- SalesforceのAccountオブジェクトに、レコードを作成する
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得できたオブジェクト件数が17件になる
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'Account',
'columns': [
'Id',
'Name',
'SystemModstamp',
'LastModifiedDate',
'BillingAddress',
'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) == 17
# 内容の確認は別のケースで行っているため省略
def test_fetch_sf_data_by_soql_builder_relationship_object_depth_1(self):
"""
Cases:
- SOQLBuilderから生成したSOQLで、Salesforceから参照関係を1回辿ったオブジェクト項目が取得できること
Arranges:
- Salesforceの以下のオブジェクトに、レコードを作成する(手作業、コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得できたオブジェクトの1件をサンプリング確認し、レコードタイプ名(DeveloperName)が含まれている
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'RelationShipTest__c',
'columns': [
'Id',
'Name',
'RecordTypeId',
'RecordType.DeveloperName'
]
}, 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) > 0
assert dict(actual[0])["RecordType"]["DeveloperName"] == "RecordTypeNormal"
...
def test_fetch_sf_data_by_soql_builder_relationship_object_depth_2(self):
"""
Cases:
- SOQLBuilderから生成したSOQLで、Salesforceから参照関係を2回辿ったオブジェクト項目が取得できること
Arranges:
- Salesforceの以下のオブジェクトに、レコードを作成する(手作業、コード上では行わない)
- RelationShipTest__c
- RelationShipTest_Child__c
- LastFetchDatetimeのFromに2000年1月1日を指定する
- LastFetchDatetimeのToに2100年12月31日を指定する
Expects:
取得できたオブジェクトの1件をサンプリング確認し、レコードタイプ名(DeveloperName)が含まれている
"""
execute_datetime = ExecuteDateTime()
last_fetch_datetime = LastFetchDatetime({
'last_fetch_datetime_from': '2000-01-01T00:00:00.000Z',
'last_fetch_datetime_to': '2100-12-31T23:59:59.000Z',
}, execute_datetime)
target_object = TargetObject({
'object_name': 'RelationShipTest_Child__c',
'columns': [
'Id',
'Name',
'RelationShipTest__r.RecordType.DeveloperName'
]
}, 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) > 0
print(dict(actual[0]))
assert dict(actual[0])["RelationshipTest__r"]["RecordType"]["DeveloperName"] == "RecordTypeNormal"
def test_raise_create_instance_cause_auth_failed(self, monkeypatch):
"""
Cases:
存在しないユーザを指定した場合、エラーが発生すること
Arranges:
CRMのユーザ名を保持する環境変数に、存在しないユーザー名を指定する
Expects:
ユーザ認証でエラーが発生すること
"""
monkeypatch.setattr('src.salesforce.salesforce_api.CRM_USER_NAME', 'invalid_username')
with pytest.raises(Exception):
SalesforceApiClient()
def test_raise_fetch_sf_count_auth_timeout(self, monkeypatch):
"""
Cases:
認証タイムアウトが発生した場合、エラーが発生すること
Arranges:
認証タイムアウト秒数を保持する環境変数に、0.0000000001を指定する
Expects:
コネクションタイムアウトエラーが発生すること
"""
monkeypatch.setattr('src.salesforce.salesforce_api.CRM_AUTH_TIMEOUT', 0.0000000001)
sf = SalesforceApiClient()
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
with pytest.raises(ConnectTimeout):
sf.fetch_sf_count(soql)
def test_raise_fetch_sf_count_read_timeout(self, monkeypatch):
"""
Cases:
読み取りタイムアウトが発生した場合、エラーが発生すること
Arranges:
CRMの件数取得タイムアウト秒数を保持する環境変数に、0.0000000001を指定する
Expects:
読み取りタイムアウトエラーが発生すること
"""
monkeypatch.setattr('src.salesforce.salesforce_api.CRM_GET_RECORD_COUNT_TIMEOUT', 0.0000000001)
sf = SalesforceApiClient()
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
with pytest.raises(ReadTimeout):
sf.fetch_sf_count(soql)
def test_raise_fetch_sf_count_invalid_soql(self, monkeypatch):
"""
Cases:
不正なSOQLを指定した場合に、エラーが発生すること
Arranges:
不正なSOQLを作成する
Expects:
エラーが発生すること
"""
sf = SalesforceApiClient()
soql = "SELECT"
with pytest.raises(Exception):
sf.fetch_sf_count(soql)
def test_raise_fetch_sf_data_auth_timeout(self, monkeypatch):
"""
Cases:
認証タイムアウトが発生した場合、エラーが発生すること
Arranges:
認証タイムアウト秒数を保持する環境変数に、0.0000000001を指定する
Expects:
コネクションタイムアウトエラーが発生すること
"""
monkeypatch.setattr('src.salesforce.salesforce_api.CRM_AUTH_TIMEOUT', 0.0000000001)
sf = SalesforceApiClient()
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
with pytest.raises(ConnectTimeout):
sf.fetch_sf_data(soql)
def test_raise_fetch_sf_data_read_timeout(self, monkeypatch):
"""
Cases:
読み取りタイムアウトが発生した場合、エラーが発生すること
Arranges:
CRMのデータ取得タイムアウト秒数を保持する環境変数に、0.0000000001を指定する
Expects:
読み取りタイムアウトエラーが発生すること
"""
monkeypatch.setattr('src.salesforce.salesforce_api.CRM_FETCH_RECORD_TIMEOUT', 0.0000000001)
sf = SalesforceApiClient()
soql = """SELECT
COUNT(Id)
FROM
Account
WHERE
SystemModstamp > 2022-08-04T00:00:00.000Z AND
SystemModstamp <= 2022-08-06T00:00:00.000Z
"""
with pytest.raises(ReadTimeout):
sf.fetch_sf_data(soql)
def test_raise_fetch_sf_data_invalid_soql(self, monkeypatch):
"""
Cases:
不正なSOQLを指定した場合に、エラーが発生すること
Arranges:
不正なSOQLを作成する
Expects:
エラーが発生すること
"""
sf = SalesforceApiClient()
soql = "SELECT"
with pytest.raises(Exception):
sf.fetch_sf_data(soql)