|
26 | 26 | LOG_MESSAGE_BEFORE_YIELD as LOG_MESSAGE_BEFORE_YIELD_FAILURE, LOG_MESSAGE_TEARDOWN as LOG_MESSAGE_TEARDOWN_FAILURE) |
27 | 27 | from examples.fixtures.test_fixture_yield_none.conftest import LOG_MESSAGE_SETUP as LOG_MESSAGE_BEFORE_YIELD_NONE |
28 | 28 | from examples.fixtures.test_fixture_return_none.conftest import LOG_MESSAGE_SETUP as LOG_MESSAGE_BEFORE_RETURN_NONE |
| 29 | +from examples.fixtures.test_failure_fixture_teardown.conftest import ( |
| 30 | + LOG_MESSAGE_BEFORE_YIELD as LOG_MESSAGE_BEFORE_YIELD_TEST_FAILURE, |
| 31 | + LOG_MESSAGE_TEARDOWN as LOG_MESSAGE_TEARDOWN_TEST_FAILURE) |
29 | 32 | from tests import REPORT_PORTAL_SERVICE |
30 | 33 | from tests.helpers import utils |
31 | 34 |
|
@@ -357,3 +360,62 @@ def test_fixture_return_none(mock_client_init): |
357 | 360 | assert log_call_args[1] == LOG_MESSAGE_BEFORE_RETURN_NONE |
358 | 361 | assert log_call_kwargs['item_id'] == f'{setup_step_name}_1' |
359 | 362 |
|
| 363 | + |
| 364 | +@mock.patch(REPORT_PORTAL_SERVICE) |
| 365 | +def test_failure_fixture_teardown(mock_client_init): |
| 366 | + mock_client = mock_client_init.return_value |
| 367 | + mock_client.step_reporter = StepReporter(mock_client) |
| 368 | + set_current(mock_client) |
| 369 | + mock_client.start_test_item.side_effect = generate_item_id |
| 370 | + mock_client.finish_test_item.side_effect = remove_last_item_id |
| 371 | + mock_client.current_item.side_effect = get_last_item_id |
| 372 | + |
| 373 | + variables = dict(utils.DEFAULT_VARIABLES) |
| 374 | + variables['rp_report_fixtures'] = True |
| 375 | + result = utils.run_pytest_tests(tests=['examples/fixtures/test_failure_fixture_teardown'], variables=variables) |
| 376 | + assert int(result) == 1, 'Exit code should be 1 (test failure)' |
| 377 | + |
| 378 | + start_count = mock_client.start_test_item.call_count |
| 379 | + finish_count = mock_client.finish_test_item.call_count |
| 380 | + assert start_count == finish_count == 3, 'Incorrect number of "start_test_item" or "finish_test_item" calls' |
| 381 | + |
| 382 | + call_args = mock_client.start_test_item.call_args_list |
| 383 | + setup_call_args = call_args[1][0] |
| 384 | + setup_step_name = 'function fixture setup: test_failure_fixture_teardown_config' |
| 385 | + assert setup_call_args[0] == setup_step_name |
| 386 | + |
| 387 | + setup_call_kwargs = call_args[1][1] |
| 388 | + assert not setup_call_kwargs['has_stats'] |
| 389 | + |
| 390 | + teardown_call_args = call_args[-1][0] |
| 391 | + teardown_step_name = 'function fixture teardown: test_failure_fixture_teardown_config' |
| 392 | + assert teardown_call_args[0] == teardown_step_name |
| 393 | + |
| 394 | + setup_call_kwargs = call_args[-1][1] |
| 395 | + assert not setup_call_kwargs['has_stats'] |
| 396 | + |
| 397 | + log_count = mock_client.log.call_count |
| 398 | + assert log_count == 3, 'Incorrect number of "log" calls' |
| 399 | + |
| 400 | + log_call_args_list = mock_client.log.call_args_list |
| 401 | + log_call_args = log_call_args_list[0][0] |
| 402 | + log_call_kwargs = log_call_args_list[0][1] |
| 403 | + |
| 404 | + assert log_call_args[1] == LOG_MESSAGE_BEFORE_YIELD_TEST_FAILURE |
| 405 | + assert log_call_kwargs['item_id'] == f'{setup_step_name}_1' |
| 406 | + |
| 407 | + log_call_args = log_call_args_list[2][0] |
| 408 | + log_call_kwargs = log_call_args_list[2][1] |
| 409 | + |
| 410 | + assert log_call_args[1] == LOG_MESSAGE_TEARDOWN_TEST_FAILURE |
| 411 | + assert log_call_kwargs['item_id'] == \ |
| 412 | + ('examples/fixtures/test_failure_fixture_teardown/test_failure_fixture_teardown.py::' |
| 413 | + 'test_failure_fixture_teardown_1') |
| 414 | + |
| 415 | + log_call_kwargs = log_call_args_list[1][1] |
| 416 | + |
| 417 | + assert log_call_kwargs['message'].endswith( |
| 418 | + 'examples/fixtures/test_failure_fixture_teardown/test_failure_fixture_teardown.py:28: AssertionError') |
| 419 | + assert log_call_kwargs['item_id'] == \ |
| 420 | + ('examples/fixtures/test_failure_fixture_teardown/test_failure_fixture_teardown.py::' |
| 421 | + 'test_failure_fixture_teardown_1') |
0 commit comments