Сопоставитель pyhamcrest для списка не работает
В моем коде есть следующая тестовая функция:
from hamcrest import assert_that, contains_inanyorder, has_entries
def test_associate_multiple_agents_to_skill(agent1, agent2, skill):
with a.agent_skill(agent1, skill):
response = confd.agents(agent2['id']).skills(skill['id']).put()
response.assert_updated()
response = confd.agents.skills(skill['id']).get()
logger.critical(response)
logger.critical(response.item)
assert_that(
response.item,
has_entries(
agents=contains_inanyorder(
has_entries(id=agent1['id']), has_entries(id=agent2['id'])
)
),
)
что дает мне следующую AssertionError:
AssertionError:
Expected: a dictionary containing {'agents': a sequence over [a dictionary containing {'id': <8>}, a dictionary containing {'id': <9>}] in any order}
but: value for 'agents' not matched: <[{'id': 8, 'number': '6977', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49462/1.1/agents/8'}]}]>
и вывод
logger.critical
что я сделал в коде функции, чтобы проверить ответ:
<Response 200
{'agents': [ [{'firstname': None,
'id': 8,
'lastname': None,
'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/8',
'rel': 'agents'}],
'number': '6481'}],
[{'firstname': None,
'id': 9,
'lastname': None,
'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/9',
'rel': 'agents'}],
'number': '9741'}]],
'category': None,
'description': None,
'id': 8,
'links': [{'href': 'http://127.0.0.1:49404/1.1/agents/skills/8',
'rel': 'skills'}],
'name': 'iKZJOZDEfc',
'tenant_uuid': 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1'}
>
и вывод для response.item:
{'id': 8, 'tenant_uuid': 'eeeeeeee-eeee-eeee-eeee-eeeeeeeeeee1', 'name': 'iKZJOZDEfc', 'category': None, 'description': None, 'links': [{'rel': 'skills', 'href': 'http://127.0.0.1:49404/1.1/agents/skills/8'}], 'agents': [ [ {'id': 8, 'number': '6481', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49404/1.1/agents/8'}]}], [{'id': 9, 'number': '9741', 'firstname': None, 'lastname': None, 'links': [{'rel': 'agents', 'href': 'http://127.0.0.1:49404/1.1/agents/9'}]}]]}
Я попытался изменить функцию на следующую, но все же; это не работает:
def test_associate_multiple_agents_to_skill(agent1, agent2, skill):
with a.agent_skill(agent1, skill):
response = confd.agents(agent2['id']).skills(skill['id']).put()
response.assert_updated()
response = confd.agents.skills(skill['id']).get()
logger.critical(response)
logger.critical(response.item)
assert_that(
response.item,
has_entries(
agents=has_items(
contains_inanyorder(
has_entries(id=agent1['id']),
),
contains_inanyorder(
has_entries(id=agent2['id']),
),
),
),
)
Любые предложения, чтобы заставить утверждение работать?