45 lines
1.8 KiB
Python
45 lines
1.8 KiB
Python
# -*- coding: UTF-8 -*-
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
import api
|
|
|
|
class TestBatchGetChunking(unittest.TestCase):
|
|
@patch('api.request')
|
|
def test_batch_get_records_chunking(self, mock_request):
|
|
# Setup mock client
|
|
client = api.Client("https://open.feishu.cn")
|
|
access_token = "fake_token"
|
|
app_token = "fake_app"
|
|
table_id = "fake_table"
|
|
|
|
# Create 250 record IDs (should result in 3 chunks: 100, 100, 50)
|
|
record_ids = [f"rec_{i}" for i in range(250)]
|
|
|
|
# Mock responses
|
|
mock_request.side_effect = [
|
|
{'code': 0, 'data': {'records': [{'record_id': f'rec_{i}'} for i in range(0, 100)]}},
|
|
{'code': 0, 'data': {'records': [{'record_id': f'rec_{i}'} for i in range(100, 200)]}},
|
|
{'code': 0, 'data': {'records': [{'record_id': f'rec_{i}'} for i in range(200, 250)]}},
|
|
]
|
|
|
|
# Call the method
|
|
results = client.batch_get_records(access_token, app_token, table_id, record_ids)
|
|
|
|
# Verify
|
|
self.assertEqual(len(results), 250)
|
|
self.assertEqual(mock_request.call_count, 3)
|
|
|
|
# Verify the chunks were passed correctly
|
|
first_call_payload = mock_request.call_args_list[0][0][3] # payload is the 4th positional arg
|
|
self.assertEqual(len(first_call_payload['record_ids']), 100)
|
|
self.assertEqual(first_call_payload['record_ids'][0], "rec_0")
|
|
self.assertEqual(first_call_payload['record_ids'][99], "rec_99")
|
|
|
|
last_call_payload = mock_request.call_args_list[2][0][3]
|
|
self.assertEqual(len(last_call_payload['record_ids']), 50)
|
|
self.assertEqual(last_call_payload['record_ids'][0], "rec_200")
|
|
self.assertEqual(last_call_payload['record_ids'][49], "rec_249")
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|