test_terminal_report.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. """
  2. Copyright (c) Contributors to the Open 3D Engine Project.
  3. For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. SPDX-License-Identifier: Apache-2.0 OR MIT
  5. Unit tests for ly_test_tools._internal.pytest_plugin.terminal_report
  6. """
  7. import os
  8. import pytest
  9. import unittest.mock as mock
  10. import ly_test_tools._internal.pytest_plugin.terminal_report as terminal_report
  11. pytestmark = pytest.mark.SUITE_smoke
  12. class TestTerminalReport(object):
  13. @mock.patch('ly_test_tools._internal.pytest_plugin.failed_test_rerun_command.build_rerun_commands')
  14. def test_AddCommands_MockCommands_CommandsAdded(self, mock_build_commands):
  15. mock_build_commands.side_effect = lambda path, nodes: nodes
  16. mock_reporter = mock.MagicMock()
  17. header = 'This is a header'
  18. test_path = 'Foo'
  19. mock_node_ids = ['a', 'b']
  20. terminal_report._add_commands(mock_reporter, header, test_path, mock_node_ids)
  21. mock_reporter.write_line.assert_has_calls([
  22. mock.call(header),
  23. mock.call('a'),
  24. mock.call('b')
  25. ])
  26. @mock.patch('ly_test_tools._internal.pytest_plugin.failed_test_rerun_command.build_rerun_commands')
  27. def test_AddCommands_NoCommands_ErrorWritten(self, mock_build_commands):
  28. mock_reporter = mock.MagicMock()
  29. header = 'This is a header'
  30. test_path = 'Foo'
  31. mock_node_ids = []
  32. terminal_report._add_commands(mock_reporter, header, test_path, mock_node_ids)
  33. calls = mock_reporter.write_line.mock_calls
  34. mock_build_commands.assert_not_called()
  35. assert calls[0] == mock.call(header)
  36. assert 'Error' in calls[1][1][0]
  37. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_commands')
  38. def test_TerminalSummary_NoErrorsNoFailures_EmptyReport(self, mock_add_commands):
  39. mock_report = mock.MagicMock()
  40. mock_report.stats.get.return_value = []
  41. mock_config = mock.MagicMock()
  42. terminal_report.pytest_terminal_summary(mock_report, 0, mock_config)
  43. mock_add_commands.assert_not_called()
  44. mock_report.config.getoption.assert_not_called()
  45. mock_report.section.assert_not_called()
  46. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_ownership')
  47. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_commands')
  48. def test_TerminalSummary_ErrorsAndFailures_SectionsAdded(self, mock_add_commands, mock_add_ownership):
  49. mock_report = mock.MagicMock()
  50. mock_node = mock.MagicMock()
  51. mock_node.nodeid = 'something'
  52. mock_report.stats.get.return_value = [mock_node, mock_node]
  53. mock_config = mock.MagicMock()
  54. terminal_report.pytest_terminal_summary(mock_report, 0, mock_config)
  55. assert len(mock_add_commands.mock_calls) == 2
  56. mock_add_ownership.assert_called()
  57. mock_report.config.getoption.assert_called()
  58. mock_report.section.assert_called_once()
  59. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_ownership', mock.MagicMock())
  60. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_commands', mock.MagicMock())
  61. @mock.patch('os.path.basename')
  62. def test_TerminalSummary_Failures_CallsWithBasename(self, mock_basename):
  63. mock_report = mock.MagicMock()
  64. mock_node = mock.MagicMock()
  65. mock_base = 'something'
  66. node_id = os.path.join('C:', mock_base)
  67. mock_node.nodeid = node_id
  68. mock_report.stats.get.side_effect = [[mock_node], []] # first item is failure list
  69. mock_config = mock.MagicMock()
  70. terminal_report.pytest_terminal_summary(mock_report, 0, mock_config)
  71. mock_basename.assert_called_with(node_id)
  72. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_ownership', mock.MagicMock())
  73. @mock.patch('ly_test_tools._internal.pytest_plugin.terminal_report._add_commands', mock.MagicMock())
  74. @mock.patch('os.path.basename')
  75. def test_TerminalSummary_Errors_CallsWithBasename(self, mock_basename):
  76. mock_report = mock.MagicMock()
  77. mock_node = mock.MagicMock()
  78. mock_base = 'something'
  79. node_id = os.path.join('C:', mock_base)
  80. mock_node.nodeid = node_id
  81. mock_report.stats.get.side_effect = [[], [mock_node]] # second item is error list
  82. mock_config = mock.MagicMock()
  83. terminal_report.pytest_terminal_summary(mock_report, 0, mock_config)
  84. mock_basename.assert_called_with(node_id)