Skip to content

Commit 105f910

Browse files
committed
Add more tests
1 parent d9ffe35 commit 105f910

File tree

3 files changed

+67
-9
lines changed

3 files changed

+67
-9
lines changed

examples/fixtures/test_failure_fixture_teardown/conftest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@
2222
LOGGER.setLevel(logging.DEBUG)
2323
logging.setLoggerClass(RPLogger)
2424

25-
LOG_MESSAGE_BEFORE_YIELD = 'Log message before yield'
26-
LOG_MESSAGE_TEARDOWN = 'Log message for teardown'
25+
LOG_MESSAGE_BEFORE_YIELD = 'Log message before yield and test failure'
26+
LOG_MESSAGE_TEARDOWN = 'Log message for teardown after test failure'
2727

2828

2929
@pytest.fixture
30-
def fixture_teardown_config():
30+
def test_failure_fixture_teardown_config():
3131
logging.error(LOG_MESSAGE_BEFORE_YIELD)
3232
yield mock.Mock()
3333
logging.error(LOG_MESSAGE_TEARDOWN)

examples/fixtures/test_failure_fixture_teardown/test_fixture_teardown.py renamed to examples/fixtures/test_failure_fixture_teardown/test_failure_fixture_teardown.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,5 @@
2424
# See the License for the specific language governing permissions and
2525
# limitations under the License.
2626

27-
from time import sleep
28-
29-
30-
def test_failure_fixture_teardown(fixture_teardown_config):
31-
sleep(0.001)
32-
assert fixture_teardown_config is not None
27+
def test_failure_fixture_teardown(test_failure_fixture_teardown_config):
28+
assert test_failure_fixture_teardown_config is None

tests/integration/test_fixtures.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
LOG_MESSAGE_BEFORE_YIELD as LOG_MESSAGE_BEFORE_YIELD_FAILURE, LOG_MESSAGE_TEARDOWN as LOG_MESSAGE_TEARDOWN_FAILURE)
2727
from examples.fixtures.test_fixture_yield_none.conftest import LOG_MESSAGE_SETUP as LOG_MESSAGE_BEFORE_YIELD_NONE
2828
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)
2932
from tests import REPORT_PORTAL_SERVICE
3033
from tests.helpers import utils
3134

@@ -357,3 +360,62 @@ def test_fixture_return_none(mock_client_init):
357360
assert log_call_args[1] == LOG_MESSAGE_BEFORE_RETURN_NONE
358361
assert log_call_kwargs['item_id'] == f'{setup_step_name}_1'
359362

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

Comments
 (0)