Skip to content

Commit 86f09fb

Browse files
committed
fix: wrong prev_id index
1 parent 858e9d4 commit 86f09fb

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/schemathesis/specs/openapi/links.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from dataclasses import dataclass, field
88
from difflib import get_close_matches
99
from typing import TYPE_CHECKING, Any, Generator, NoReturn, Sequence, Union
10+
from venv import logger
1011

1112
from ...constants import NOT_SET
1213
from ...internal.copy import fast_deepcopy
@@ -52,6 +53,9 @@ def from_definition(
5253
operation = source_operation.schema.get_operation_by_id(definition["operationId"]) # type: ignore
5354
else:
5455
operation = source_operation.schema.get_operation_by_reference(definition["operationRef"]) # type: ignore
56+
logger.debug(f"from_definition -> Link source operation: {source_operation}")
57+
logger.debug(f"from_definition -> Link target operation: {operation}")
58+
logger.debug(f"from_definition -> Link definition: {definition}")
5559
return cls(
5660
# Pylint can't detect that the API operation is always defined at this point
5761
# E.g. if there is no matching operation or no operations at all, then a ValueError will be risen
@@ -72,6 +76,7 @@ def parse(self, case: Case, response: GenericResponse) -> ParsedData:
7276
}
7377
return ParsedData(
7478
original_case=case,
79+
prev_case_id=case.case_id,
7580
parameters=parameters,
7681
# https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#link-object
7782
# > A literal value or {expression} to use as a request body when calling the target operation.
@@ -105,6 +110,7 @@ def make_operation(self, collected: list[ParsedData]) -> APIOperation:
105110
for location, parameters in containers.items():
106111
for parameter_data in parameters.values():
107112
parameter = parameter_data["parameter"]
113+
logger.debug("deps/schemathesis/src/schemathesis/specs/openapi/links.py Parameter: %s", parameter)
108114
if parameter_data["options"]:
109115
definition = fast_deepcopy(parameter.definition)
110116
if "schema" in definition:
@@ -131,6 +137,8 @@ def make_operation(self, collected: list[ParsedData]) -> APIOperation:
131137
else:
132138
# No options were gathered for this parameter - use the original one
133139
components[LOCATION_TO_CONTAINER[location]].add(parameter)
140+
141+
logger.debug("deps/schemathesis/src/schemathesis/specs/openapi/links.py Components: %s", components)
134142
return self.operation.clone(**components)
135143

136144
def _get_container_by_parameter_name(
@@ -176,6 +184,7 @@ def get_links(
176184
else:
177185
response_definition = responses.get("default", {})
178186
links = response_definition.get(field, {})
187+
logger.debug(f"Links found: {links}")
179188
return [
180189
Link.from_definition(name, definition, operation)
181190
for name, definition in links.items()

src/schemathesis/stateful/__init__.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import json
55
from dataclasses import dataclass, field
66
from typing import TYPE_CHECKING, Any, Callable, Generator
7+
from venv import logger
78

89
from .. import GenerationConfig
910
from ..constants import NOT_SET
@@ -32,6 +33,7 @@ class ParsedData:
3233
"""
3334

3435
original_case: Case
36+
prev_case_id: str | None
3537
parameters: dict[str, Any]
3638
body: Any = NOT_SET
3739

@@ -92,12 +94,17 @@ class Feedback:
9294

9395
def add_test_case(self, case: Case, response: GenericResponse) -> None:
9496
"""Store test data to reuse it in the future additional tests."""
97+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Storing feedback for %r", case)
9598
for stateful_test in case.operation.get_stateful_tests(response, self.stateful):
99+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Adding stateful test %r", stateful_test)
96100
data = self.stateful_tests.setdefault(
97101
stateful_test.name, StatefulData(stateful_test)
98102
)
99103
data.store(case, response)
104+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Stored feedback for %r", case)
100105
self.original_case = case
106+
self.original_case.case_id = case.case_id
107+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Original case %r", self.original_case.case_id)
101108

102109
def get_stateful_tests(
103110
self,
@@ -115,13 +122,18 @@ def get_stateful_tests(
115122
from .._hypothesis import create_test
116123

117124
for data in self.stateful_tests.values():
125+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Data in stateful test lists %r", data)
118126
# Có thể phát triển thêm ở đây, chọn case như nào để stateful, hay số lượng case để stateful
119127
for parsed_data in data.container:
128+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Parsed data %r", parsed_data)
120129
stateful_data = StatefulData(
121130
stateful_test=data.stateful_test, container=[parsed_data]
122131
)
123-
132+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Stateful data %r", stateful_data)
124133
operation = stateful_data.make_operation()
134+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Operation %r", operation)
135+
logger.debug("deps/schemathesis/src/schemathesis/stateful/__init__.py Previous testcase %r", parsed_data.prev_case_id)
136+
self.original_case.case_id = parsed_data.prev_case_id
125137
_as_strategy_kwargs: dict[str, Any] | None
126138
if callable(as_strategy_kwargs):
127139
_as_strategy_kwargs = as_strategy_kwargs(operation)
@@ -135,6 +147,7 @@ def get_stateful_tests(
135147
data_generation_methods=operation.schema.data_generation_methods,
136148
generation_config=generation_config,
137149
as_strategy_kwargs=_as_strategy_kwargs,
150+
prev_stateful_case=self.original_case,
138151
)
139152
yield Ok((operation, test_function))
140153

0 commit comments

Comments
 (0)