Xqt has submitted this change. ( 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1172863?usp=email )

Change subject: Tests: Enforce setup_page() in BasePageTestBase and improve 
test structure
......................................................................

Tests: Enforce setup_page() in BasePageTestBase and improve test structure

- Make BasePageTestBase abstract by replacing ABC inheritance with a
  combined metaclass of ABCMeta and TestCase metaclass to resolve conflicts
- Enforce setup_page() implementation as an abstract method in the base class
- Ensure all concrete test classes implement setup_page() and define
  test_ methods calling helpers
- Use assert methods instead of bare assert statements in setup

Change-Id: I0fc910d0f192dfc57427e06d86e47eff6c8aa61a
---
M tests/basepage.py
M tests/proofreadpage_tests.py
M tests/site_tests.py
M tests/wikibase_tests.py
4 files changed, 43 insertions(+), 30 deletions(-)

Approvals:
  Xqt: Verified; Looks good to me, approved
  jenkins-bot: Verified




diff --git a/tests/basepage.py b/tests/basepage.py
index 975d30e..a611768 100644
--- a/tests/basepage.py
+++ b/tests/basepage.py
@@ -6,11 +6,21 @@
 #
 from __future__ import annotations

+from abc import ABCMeta, abstractmethod
+
 from pywikibot.page import BasePage
 from tests.aspects import TestCase


-class BasePageTestBase(TestCase):
+class ABCTestCaseMeta(ABCMeta, type(TestCase)):
+
+    """Enable abstract methods in TestCase-based base classes.
+
+    .. versionadded:: 10.3
+    """
+
+
+class BasePageTestBase(TestCase, metaclass=ABCTestCaseMeta):

     """Base of BasePage test classes."""

@@ -19,8 +29,17 @@
     def setUp(self) -> None:
         """Set up test."""
         super().setUp()
-        assert self._page, 'setUp() must create an empty BasePage in _page'
-        assert isinstance(self._page, BasePage)
+        self.setup_page()
+        self.assertIsInstance(self._page, BasePage,
+                              'setUp() must assign a BasePage to _page, not '
+                              f'{type(self._page).__name__}')
+
+    @abstractmethod
+    def setup_page(self) -> None:
+        """Subclasses must implement this to assign self._page.
+
+        .. versionadded:: 10.3
+        """


 class BasePageLoadRevisionsCachingTestBase(BasePageTestBase):
@@ -38,7 +57,7 @@
     def setUp(self) -> None:
         """Set up test."""
         super().setUp()
-        assert self.cached is False, 'Tests do not support caching'
+        self.assertFalse(self.cached, 'Tests do not support caching')

     def _test_page_text(self) -> None:
         """Test site.loadrevisions() with .text."""
@@ -61,9 +80,9 @@
         self.assertHasAttr(page, '_revisions')
         self.assertLength(page._revisions, 1)
         self.assertIn(page._revid, page._revisions)
-
         self.assertEqual(page._text, custom_text)
         self.assertEqual(page.text, page._text)
+
         del page.text

         self.assertNotHasAttr(page, '_text')
@@ -71,13 +90,14 @@
         self.assertIsNone(page._latest_cached_revision())

         page.text = custom_text
-
         self.site.loadrevisions(page, total=1, content=True)

         self.assertIsNotNone(page._latest_cached_revision())
         self.assertEqual(page._text, custom_text)
         self.assertEqual(page.text, page._text)
+
         del page.text
+
         self.assertNotHasAttr(page, '_text')

         # Verify that calling .text doesn't call loadrevisions again
diff --git a/tests/proofreadpage_tests.py b/tests/proofreadpage_tests.py
index 4d908d9..1e6d481 100755
--- a/tests/proofreadpage_tests.py
+++ b/tests/proofreadpage_tests.py
@@ -142,11 +142,11 @@
     family = 'wikisource'
     code = 'en'

-    def setUp(self) -> None:
-        """Set up test case."""
+    def setup_page(self) -> None:
+        """Set up test page."""
         self._page = ProofreadPage(
-            self.site, 'Page:Popular Science Monthly Volume 1.djvu/12')
-        super().setUp()
+            self.site, 'Page:Popular Science Monthly Volume 1.djvu/12'
+        )

     def test_basepage_methods(self) -> None:
         """Test ProofreadPage methods inherited from superclass BasePage."""
@@ -162,11 +162,10 @@
     family = 'wikisource'
     code = 'en'

-    def setUp(self) -> None:
-        """Set up test case."""
+    def setup_page(self) -> None:
+        """Set up test page."""
         self._page = ProofreadPage(
             self.site, 'Page:Popular Science Monthly Volume 1.djvu/12')
-        super().setUp()

     def test_page_text(self) -> None:
         """Test site.loadrevisions() with Page.text."""
@@ -637,11 +636,10 @@
     family = 'wikisource'
     code = 'en'

-    def setUp(self) -> None:
-        """Set up test case."""
+    def setup_page(self) -> None:
+        """Set up test page."""
         self._page = IndexPage(
             self.site, 'Index:Popular Science Monthly Volume 1.djvu')
-        super().setUp()

     def test_basepage_methods(self) -> None:
         """Test IndexPage methods inherited from superclass BasePage."""
@@ -657,11 +655,10 @@
     family = 'wikisource'
     code = 'en'

-    def setUp(self) -> None:
-        """Set up test case."""
+    def setup_page(self) -> None:
+        """Set up test page."""
         self._page = IndexPage(
             self.site, 'Index:Popular Science Monthly Volume 1.djvu')
-        super().setUp()

     def test_page_text(self) -> None:
         """Test site.loadrevisions() with Page.text."""
diff --git a/tests/site_tests.py b/tests/site_tests.py
index b061b18..937cccb 100755
--- a/tests/site_tests.py
+++ b/tests/site_tests.py
@@ -823,10 +823,9 @@

     """Test site.loadrevisions() caching."""

-    def setUp(self) -> None:
-        """Setup tests."""
+    def setup_page(self) -> None:
+        """Setup test page."""
         self._page = self.get_mainpage(force=True)
-        super().setUp()

     def test_page_text(self) -> None:
         """Test site.loadrevisions() with Page.text."""
diff --git a/tests/wikibase_tests.py b/tests/wikibase_tests.py
index b07adb1..4d1d77f 100755
--- a/tests/wikibase_tests.py
+++ b/tests/wikibase_tests.py
@@ -50,10 +50,9 @@

     """Test site.loadrevisions() caching."""

-    def setUp(self) -> None:
-        """Setup test."""
+    def setup_page(self) -> None:
+        """Setup test page."""
         self._page = ItemPage(self.get_repo(), 'Q15169668')
-        super().setUp()

     def test_page_text(self) -> None:
         """Test site.loadrevisions() with Page.text."""
@@ -1013,10 +1012,9 @@

     """Test behavior of ItemPage methods inherited from BasePage."""

-    def setUp(self) -> None:
-        """Setup tests."""
+    def setup_page(self) -> None:
+        """Setup test page."""
         self._page = ItemPage(self.get_repo(), 'Q60')
-        super().setUp()

     def test_basepage_methods(self) -> None:
         """Test ItemPage methods inherited from superclass BasePage."""
@@ -1033,10 +1031,9 @@

     """Test behavior of Page methods for wikibase item."""

-    def setUp(self) -> None:
+    def setup_page(self) -> None:
         """Setup tests."""
         self._page = pywikibot.Page(self.site, 'Q60')
-        super().setUp()

     def test_basepage_methods(self) -> None:
         """Test Page methods inherited from superclass BasePage with Q60."""

--
To view, visit 
https://gerrit.wikimedia.org/r/c/pywikibot/core/+/1172863?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.wikimedia.org/r/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Change-Id: I0fc910d0f192dfc57427e06d86e47eff6c8aa61a
Gerrit-Change-Number: 1172863
Gerrit-PatchSet: 6
Gerrit-Owner: Xqt <[email protected]>
Gerrit-Reviewer: Xqt <[email protected]>
Gerrit-Reviewer: jenkins-bot
_______________________________________________
Pywikibot-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to