Skip to content

Commit e89df63

Browse files
committed
[fix] Preserve remote skip events for multiple tests #619
Related to #619
1 parent 99a096a commit e89df63

2 files changed

Lines changed: 49 additions & 13 deletions

File tree

openwisp_utils/tests/selenium.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ def _setup_and_call(self, result, debug=False):
6363
if skip_reasons:
6464
for reason in skip_reasons:
6565
original_result.addSkip(self, reason)
66-
if hasattr(original_result, "events") and hasattr(result, "events"):
67-
original_result.events = result.events
66+
if hasattr(original_result, "events"):
67+
original_result.stopTest(self)
6868
return
6969
if result.wasSuccessful():
7070
if attempt == 0:
Lines changed: 47 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
from unittest import TestResult, skip
1+
from unittest import TestResult, TestSuite, skip
22

33
from django.test import SimpleTestCase
4-
from django.test.runner import RemoteTestResult
4+
from django.test.runner import RemoteTestRunner
55
from openwisp_utils.tests.selenium import SeleniumTestMixin
66

77

88
class TestSeleniumMixinSkipHandling(SimpleTestCase):
9-
def _run_skipped_test(self, result_class):
9+
def _run_skipped_standard_test(self):
1010
class SkippedSeleniumTest(SeleniumTestMixin, SimpleTestCase):
1111
retry_max = 0
1212
retry_delay = 0
@@ -16,20 +16,56 @@ def test_skip(self):
1616
pass
1717

1818
test = SkippedSeleniumTest("test_skip")
19-
if result_class is RemoteTestResult:
20-
result = result_class(stream=None, descriptions=None, verbosity=0)
21-
else:
22-
result = result_class()
19+
result = TestResult()
2320
test._setup_and_call(result)
2421
return result
2522

23+
def _run_skipped_remote_suite(self):
24+
class DummyWebDriver:
25+
def quit(self):
26+
pass
27+
28+
class SkippedSeleniumTest(SeleniumTestMixin, SimpleTestCase):
29+
retry_max = 0
30+
retry_delay = 0
31+
32+
@classmethod
33+
def get_webdriver(cls):
34+
return DummyWebDriver()
35+
36+
@skip("first skip propagation regression test")
37+
def test_first_skip(self):
38+
pass
39+
40+
@skip("second skip propagation regression test")
41+
def test_second_skip(self):
42+
pass
43+
44+
suite = TestSuite(
45+
[
46+
SkippedSeleniumTest("test_first_skip"),
47+
SkippedSeleniumTest("test_second_skip"),
48+
]
49+
)
50+
return RemoteTestRunner().run(suite)
51+
2652
def test_setup_and_call_propagates_skip_to_standard_result(self):
27-
result = self._run_skipped_test(TestResult)
53+
result = self._run_skipped_standard_test()
2854

2955
self.assertEqual(len(result.skipped), 1)
3056
self.assertEqual(result.skipped[0][1], "skip propagation regression test")
3157

32-
def test_setup_and_call_records_skip_event_for_remote_result(self):
33-
result = self._run_skipped_test(RemoteTestResult)
58+
def test_setup_and_call_preserves_remote_skip_events_for_multiple_tests(self):
59+
result = self._run_skipped_remote_suite()
3460

35-
self.assertIn(("addSkip", 0, "skip propagation regression test"), result.events)
61+
self.assertEqual(
62+
result.events,
63+
[
64+
("startTest", 0),
65+
("addSkip", 0, "first skip propagation regression test"),
66+
("stopTest", 0),
67+
("startTest", 1),
68+
("addSkip", 1, "second skip propagation regression test"),
69+
("stopTest", 1),
70+
],
71+
)

0 commit comments

Comments
 (0)