Skip to content

Commit d424c19

Browse files
author
Sylvain MARIE
committed
Fixed issue with get_current_case_id in case of multiple argnames. Added corresponding test. Fixes #189
1 parent a3aa669 commit d424c19

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

docs/api_reference.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ argvalues = get_parametrize_args(host_class_or_module_of_f, cases_funs)
292292

293293
```python
294294
def get_current_case_id(request_or_item,
295-
argnames: str
295+
argnames: Union[Iterable[str], str]
296296
):
297297
```
298298

pytest_cases/case_parametrizer_new.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818

1919
from .common_mini_six import string_types
2020
from .common_others import get_code_first_line, AUTO, qname, funcopy
21-
from .common_pytest_marks import copy_pytest_marks, make_marked_parameter_value, remove_pytest_mark, filter_marks
22-
from .common_pytest_lazy_values import lazy_value
21+
from .common_pytest_marks import copy_pytest_marks, make_marked_parameter_value, remove_pytest_mark, filter_marks, \
22+
get_param_argnames_as_list
23+
from .common_pytest_lazy_values import lazy_value, LazyTupleItem
2324
from .common_pytest import safe_isclass, MiniMetafunc, is_fixture, get_fixture_name, inject_host, add_fixture_params
2425

2526
from . import fixture
@@ -721,7 +722,7 @@ def _of_interest(x): # noqa
721722

722723

723724
def get_current_case_id(request_or_item,
724-
argnames # type: str
725+
argnames # type: Union[Iterable[str], str]
725726
):
726727
"""
727728
A helper function to return the current case id for a given `pytest` item (available in some hooks) or `request`
@@ -739,16 +740,23 @@ def get_current_case_id(request_or_item,
739740
except AttributeError:
740741
item = request_or_item
741742

743+
# process argnames
744+
if isinstance(argnames, string_types):
745+
argnames = get_param_argnames_as_list(argnames)
746+
argnames_str = '_'.join(argnames).replace(' ', '')
747+
742748
try:
743-
# A LazyValue ?
744-
lazy_val = item.callspec.params[argnames]
749+
# A LazyValue or LazyTupleItem ?
750+
lazy_val = item.callspec.params[argnames[0]]
745751
except KeyError:
746752
# No: A fixture union created by `parametrize_plus_decorate`
747753
main_fixture_style_template = "%s_%s"
748-
fixture_union_name = main_fixture_style_template % (item.function.__name__, argnames)
754+
fixture_union_name = main_fixture_style_template % (item.function.__name__, argnames_str)
749755
return item.callspec.params[fixture_union_name].get_alternative_id()
750756
else:
751-
# A lazyvalue - confirmed
757+
# A LazyValue or LazyTupleItem - confirmed.
758+
if isinstance(lazy_val, LazyTupleItem):
759+
lazy_val = lazy_val.host
752760
return lazy_val.get_id()
753761

754762

pytest_cases/tests/cases/doc/test_get_current_case_id.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,33 @@
22

33

44
def data_b():
5-
return 1
5+
return 1, 2
66

77

88
@parametrize_with_cases("data", cases=data_b, prefix="data_")
99
def test_lazy_val_case(data, request):
1010
assert get_current_case_id(request, "data") == "b"
1111

1212

13+
@parametrize_with_cases("data,data2", cases=data_b, prefix="data_")
14+
def test_lazy_val_case_2_args(data, data2, request):
15+
assert get_current_case_id(request, ["data", "data2"]) == "b"
16+
17+
1318
@fixture
1419
def a():
1520
return
1621

1722

1823
def data_a(a):
19-
return 1
24+
return 1, 2
2025

2126

2227
@parametrize_with_cases("data", cases=data_a, prefix="data_")
2328
def test_fixture_case(data, request):
2429
assert get_current_case_id(request.node, "data") == "a"
30+
31+
32+
@parametrize_with_cases("data,data2", cases=data_a, prefix="data_")
33+
def test_fixture_case_2_args(data, data2, request):
34+
assert get_current_case_id(request.node, "data,data2") == "a"

0 commit comments

Comments
 (0)