Skip to content

Commit 9dae3de

Browse files
2 parents e966cff + 9b93011 commit 9dae3de

File tree

3 files changed

+75
-30
lines changed

3 files changed

+75
-30
lines changed

fast_bitrix24/server_response.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,11 @@ def extract_results(self) -> Union[Dict, List[Dict]]:
5252

5353
extracted = self.extract_from_single_response(self.result["result"])
5454

55-
return extracted[0] if isinstance(extracted, list) else extracted
55+
return (
56+
extracted[0]
57+
if isinstance(extracted, list) and len(extracted) == 1
58+
else extracted
59+
)
5660

5761
def raise_for_errors(self):
5862
errors = self.extract_errors()
@@ -86,7 +90,7 @@ def extract_from_single_response(self, result):
8690

8791
@staticmethod
8892
def is_nested(result) -> bool:
89-
return isinstance(result, (dict, list)) and len(result) == 1
93+
return isinstance(result, dict) and len(result.values()) == 1
9094

9195
def extract_from_batch_response(self, result) -> list:
9296
if not result:
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
response = {
2+
"result": {
3+
"result": {
4+
"205364": [
5+
{"CONTACT_ID": 350354, "SORT": 10, "ROLE_ID": 0, "IS_PRIMARY": "Y"},
6+
{"CONTACT_ID": 369658, "SORT": 10, "ROLE_ID": 0, "IS_PRIMARY": "Y"},
7+
]
8+
},
9+
"result_error": [],
10+
"result_total": [],
11+
"result_next": [],
12+
"result_time": {
13+
"205364": {
14+
"start": 1739205151.785116,
15+
"finish": 1739205151.915156,
16+
"duration": 0.13003993034362793,
17+
"processing": 0.12938594818115234,
18+
"date_start": "2025-02-10T19:32:31+03:00",
19+
"date_finish": "2025-02-10T19:32:31+03:00",
20+
"operating_reset_at": 1739205751,
21+
"operating": 0.7021360397338867,
22+
}
23+
},
24+
},
25+
"time": {
26+
"start": 1739205151.753569,
27+
"finish": 1739205151.916085,
28+
"duration": 0.16251611709594727,
29+
"processing": 0.13108110427856445,
30+
"date_start": "2025-02-10T19:32:31+03:00",
31+
"date_finish": "2025-02-10T19:32:31+03:00",
32+
"operating_reset_at": 1739205751,
33+
"operating": 0,
34+
},
35+
}

tests/test_server_responses.py

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,10 @@ def test_crm_contact_add_batch(bx_dummy):
311311
"NAME": "TESTR",
312312
"PHONE": [{"VALUE": "78966666647", "VALUE_TYPE": "WORK"}],
313313
"ASSIGNED_BY_ID": -1,
314-
"OPENED": "Y"
314+
"OPENED": "Y",
315315
},
316-
"params": {
317-
"REGISTER_SONET_EVENT": "Y"
318-
}
319-
}
316+
"params": {"REGISTER_SONET_EVENT": "Y"},
317+
},
320318
)
321319

322320
# Проверяем что результат - это ID созданного контакта
@@ -325,39 +323,47 @@ def test_crm_contact_add_batch(bx_dummy):
325323

326324
def test_crm_contact_list(bx_dummy):
327325
response = {
328-
'result': [
326+
"result": [
329327
{
330-
'ID': '10',
331-
'NAME': 'Абдуалимова Татьяна Александровна',
332-
'SECOND_NAME': None,
333-
'LAST_NAME': None
328+
"ID": "10",
329+
"NAME": "Абдуалимова Татьяна Александровна",
330+
"SECOND_NAME": None,
331+
"LAST_NAME": None,
334332
}
335333
],
336-
'total': 1,
337-
'time': {
338-
'start': 1731743829.0188,
339-
'finish': 1731743829.06444,
340-
'duration': 0.045639991760253906,
341-
'processing': 0.019975900650024414,
342-
'date_start': '2024-11-16T10:57:09+03:00',
343-
'date_finish': '2024-11-16T10:57:09+03:00',
344-
'operating_reset_at': 1731744429,
345-
'operating': 0
346-
}
334+
"total": 1,
335+
"time": {
336+
"start": 1731743829.0188,
337+
"finish": 1731743829.06444,
338+
"duration": 0.045639991760253906,
339+
"processing": 0.019975900650024414,
340+
"date_start": "2024-11-16T10:57:09+03:00",
341+
"date_finish": "2024-11-16T10:57:09+03:00",
342+
"operating_reset_at": 1731744429,
343+
"operating": 0,
344+
},
347345
}
348346

349347
bx_dummy.srh = MockSRH(response)
350348
results = bx_dummy.get_all(
351-
'crm.contact.list',
349+
"crm.contact.list",
352350
{
353-
'params': {
354-
'select': ['ID', 'NAME', 'SECOND_NAME', 'LAST_NAME'],
355-
'filter': {'=ID': ['10']}
351+
"params": {
352+
"select": ["ID", "NAME", "SECOND_NAME", "LAST_NAME"],
353+
"filter": {"=ID": ["10"]},
356354
}
357-
}
355+
},
358356
)
359357

360358
assert isinstance(results, list)
361359
assert len(results) == 1
362-
assert results[0]['ID'] == '10'
363-
assert results[0]['NAME'] == 'Абдуалимова Татьяна Александровна'
360+
assert results[0]["ID"] == "10"
361+
assert results[0]["NAME"] == "Абдуалимова Татьяна Александровна"
362+
363+
364+
def test_crm_company_contact_items_get(bx_dummy):
365+
from tests.real_responses.crm_company_contact_items_get import response
366+
367+
bx_dummy.srh = MockSRH(response)
368+
results = bx_dummy.get_by_ID("crm.company.contact.items.get", ["205364"])
369+
assert len(results) == 2

0 commit comments

Comments
 (0)