import pytest
from ._test_utils import get_context_with_patch_api_and_cloud
from steps.api.utils.parser import get_nested_value, set_nested_value, delete_nested_value, parse_nested_value, \
check_expected_values_in_response
from unittest.mock import Mock
[docs]
def test_get_nested_value():
dic = {
'toto': {'tata': 'titi'}
}
assert get_nested_value(['toto', 'tata'], dic) == 'titi'
[docs]
def test_set_nested_value():
dic = {}
set_nested_value(['toto', 'tata'], dic, 'titi')
assert dic == {
'toto': {'tata': 'titi'}
}
[docs]
def test_delete_nested_value():
dic = {
'toto': {'tata': 'titi', 'tutu': 'tyty'}
}
delete_nested_value(['toto', 'tata'], dic)
assert 'tata' not in dic['toto']
[docs]
def test_parse_nested_value():
context = get_context_with_patch_api_and_cloud()
assert parse_nested_value(r'["variable \"first_name\" of user 0"]', context) == ["Marie"]
assert parse_nested_value(r'[{"test": "variable \"first_name\" of user 0"}]',
context) == [{"test": "Marie"}]
[docs]
class MockResponse(dict):
def __init__(self, my_dict: dict):
self._json = my_dict
[docs]
def json(self) -> dict:
return self._json
[docs]
def test_check_expected_values_in_response():
context = get_context_with_patch_api_and_cloud()
context.request = Mock()
context.request.response = MockResponse({'toto': 'tata'})
result, expected_value, response_value = check_expected_values_in_response(context, 'toto', 'tata')
assert result
assert expected_value == 'tata'
assert response_value == 'tata'
result, expected_value, response_value = check_expected_values_in_response(context, 'toto', 'titi')
assert not result
assert expected_value == 'titi'
assert response_value == 'tata'
context.request.response = MockResponse({'toto': 'Marie'})
result, expected_value, response_value = check_expected_values_in_response(
context, 'toto', 'variable "first_name" of user 0')
assert result
assert expected_value == 'Marie'
assert response_value == 'Marie'
result, expected_value, response_value = check_expected_values_in_response(
context, 'toto', 'variable "first_name" of user 1')
assert not result
assert expected_value == 'Anne-Josèphe'
assert response_value == 'Marie'
context.request.response = MockResponse(
{'last_intermediate_results': {'toto': 'tata', 'id': 42, 'timestamp': 42.42}})
result, expected_value, response_value = check_expected_values_in_response(
context, 'last_intermediate_results["toto"]', 'tata')
assert result
assert expected_value == 'tata'
assert response_value == 'tata'
result, expected_value, response_value = check_expected_values_in_response(
context, 'last_intermediate_results["toto"]', 'titi')
assert not result
assert expected_value == 'titi'
assert response_value == 'tata'
context.request.response = MockResponse({'intermediate_results': [{'toto': 'tata', 'id': 42, 'timestamp': 42.42}, {
'titi': 'tutu', 'id': 84, 'timestamp': 84.84}]})
result, expected_value, response_value = check_expected_values_in_response(
context, 'any([result["id"] for result in response["intermediate_results"]])', '42')
assert result
assert expected_value == 42
assert response_value == [42, 84]
result, expected_value, response_value = check_expected_values_in_response(
context, 'intermediate_results[0]["toto"]', 'tata')
assert result
assert expected_value == 'tata'
assert response_value == 'tata'
context.request.response = MockResponse(
{'intermediate_results': [{'d': 4, 'timestamp': 1.}, {'c': 3, 'timestamp': .5}]})
with pytest.raises(AssertionError):
result, expected_value, response_value = check_expected_values_in_response(
context, 'intermediate_results[0]["c"]', '3')