Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions testit-adapter-nose/src/testit_adapter_nose/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,11 +365,15 @@ def get_parameter(key_for_parameter, all_parameters):
parameter_key = key_for_parameter.replace("[" + id_keys_in_parameter[0] + "]", "")
id_key_in_parameter = id_keys_in_parameter[0].strip("\'\"")

if id_key_in_parameter.isdigit() and int(id_key_in_parameter) in range(len(all_parameters[parameter_key])):
return all_parameters[parameter_key][int(id_key_in_parameter)]
nested = all_parameters.get(parameter_key)

if id_key_in_parameter.isalnum() and id_key_in_parameter in all_parameters[parameter_key].keys():
return all_parameters[parameter_key][id_key_in_parameter]
if id_key_in_parameter.isdigit() and isinstance(nested, (list, tuple)):
index = int(id_key_in_parameter)
if index in range(len(nested)):
return nested[index]

if isinstance(nested, dict) and id_key_in_parameter in nested:
return nested[id_key_in_parameter]

logging.error(f"Not key: {key_for_parameter} in run parameters or other keys problem")

Expand Down
20 changes: 16 additions & 4 deletions testit-adapter-pytest/src/testit_adapter_pytest/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -294,15 +294,26 @@ def get_parameter(key_for_parameter, all_parameters):
parameter_key = key_for_parameter.replace("[" + id_keys_in_parameter[0] + "]", "")
id_key_in_parameter = id_keys_in_parameter[0].strip("\'\"")

if id_key_in_parameter.isdigit() and int(id_key_in_parameter) in range(len(all_parameters[parameter_key])):
return all_parameters[parameter_key][int(id_key_in_parameter)]
nested = all_parameters.get(parameter_key)

if id_key_in_parameter.isalnum() and id_key_in_parameter in all_parameters[parameter_key].keys():
return all_parameters[parameter_key][id_key_in_parameter]
if id_key_in_parameter.isdigit() and isinstance(nested, (list, tuple)):
index = int(id_key_in_parameter)
if index in range(len(nested)):
return nested[index]

if isinstance(nested, dict) and id_key_in_parameter in nested:
return nested[id_key_in_parameter]

logging.error(f"Not key: {key_for_parameter} in run parameters or other keys problem")


def __expand_dict_parameters(params):
for value in tuple(params.values()):
if isinstance(value, dict):
for dict_key, dict_value in value.items():
params.setdefault(dict_key, dict_value)


def get_all_parameters(item):
params = {}

Expand All @@ -311,6 +322,7 @@ def get_all_parameters(item):

if hasattr(item, 'callspec'):
params.update(item.callspec.params)
__expand_dict_parameters(params)

return params

Expand Down
55 changes: 55 additions & 0 deletions testit-adapter-pytest/tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import pytest

from testit_adapter_pytest.utils import (
collect_parameters_in_string_attribute,
get_all_parameters,
get_parameter,
)


class _FakeItem:
def __init__(self, callspec_params=None, test_properties=None):
if callspec_params is not None:
self.callspec = type('CallSpec', (), {'params': callspec_params})()
if test_properties is not None:
self.test_properties = test_properties


def test_expand_dict_keys_from_fixture_params():
item = _FakeItem(callspec_params={
'users_prepare_fixture_all_active_param': {
'user_type': 'viewer',
'nnumber': 3,
},
})
params = get_all_parameters(item)

assert params['user_type'] == 'viewer'
assert params['users_prepare_fixture_all_active_param']['user_type'] == 'viewer'


def test_placeholder_user_type_from_fixture_dict_param():
item = _FakeItem(callspec_params={
'users_prepare_fixture_all_active_param': {'user_type': 'consultant'},
})
result = collect_parameters_in_string_attribute(
'Получение Информации о (positive) [{user_type}]',
get_all_parameters(item),
)

assert result == 'Получение Информации о (positive) [consultant]'


def test_bracket_syntax_with_underscore_key():
params = {'fixture_param': {'user_type': 'admin'}}
assert get_parameter('fixture_param[user_type]', params) == 'admin'


def test_top_level_param_not_overwritten_by_dict_expand():
item = _FakeItem(callspec_params={
'user_type': 'from_parametrize',
'fixture_param': {'user_type': 'from_dict'},
})
params = get_all_parameters(item)

assert params['user_type'] == 'from_parametrize'
Loading