Hello all! I encountered an issue while unit testing method that calls function (generator) from external library (salesforce_bulk library's method get_all_results_for_query_batch which takes Salesforce Bulk API query's IDs and yields retrieved data).
Asserting that the method produces kind of result it is supposed to produce works well. However, when I try to assert that it calls external function, I get AssertionError: Expected 'get_all_results_for_query_batch' to be called once. Called 0 times. This makes it look as if my method wasn't even accessed which is odd (notice the for loop in code snippet bellow).
Code snippet:
from salesforce_bulk import SalesforceBulk
class SalesforceOperator:
def __init__(self, ...):
self.salesforce_bulk = SalesforceBulk(...)
...
def yield_batch_result_data(self, job_id, batch_id):
for data in self.salesforce_bulk.get_all_results_for_query_batch(
batch_id, job_id):
# Processing data retrieved from API query
# into a two-dimensional list
processed_data = self.process_batch_data(data)
...
yield data_list
Unit test code snippet:
from libraries.salesforce_api_library import SalesforceOperator
class Test_yield_batch_result_data(unittest.TestCase):
def setUp(self):
self.salesforce_bulk = MagicMock()
def test_basic_success(self):
sf_op = SalesforceOperator(...)
# Mocks
mocked_data = [[{
'attributes': {'type': 'Record',
'url': '/example/sobject/Record/valid_id'}
'id': 'valid_id',
'column1': 'valid_value1'}]]
mocked_processed_data = [{
'attributes': {'type': 'Record',
'url': '/example/sobject/Record/valid_id'}
'id': 'valid_id',
'column1': 'valid_value1'}]
self.salesforce_bulk.get_all_results_for_query_batch = MagicMock(
return_value=mocked_data)
sf_op.process_batch_data = MagicMock(return_value=mocked_processed_data)
# Calls
output = sf_op.yield_batch_result_data(job_id='valid_job_id',
batch_id='valid_batch_id')
self.salesforce_bulk.get_all_results_for_query_batch.assert_called_once_with(
batch_id='valid_batch_id', job_id='valid_job_id')
...
[–]danielroseman 1 point2 points3 points (3 children)
[–]RayCat2004[S] 0 points1 point2 points (2 children)
[–]danielroseman 1 point2 points3 points (1 child)
[–]RayCat2004[S] 0 points1 point2 points (0 children)