diff options
Diffstat (limited to 'Biz/PodcastItLater/TestMetricsView.py')
| -rw-r--r-- | Biz/PodcastItLater/TestMetricsView.py | 48 |
1 files changed, 34 insertions, 14 deletions
diff --git a/Biz/PodcastItLater/TestMetricsView.py b/Biz/PodcastItLater/TestMetricsView.py index 9ca30c2..b452feb 100644 --- a/Biz/PodcastItLater/TestMetricsView.py +++ b/Biz/PodcastItLater/TestMetricsView.py @@ -1,3 +1,5 @@ +"""Tests for Admin metrics view.""" + # : out podcastitlater-test-metrics # : dep pytest # : dep starlette @@ -14,20 +16,28 @@ import Biz.PodcastItLater.Web as Web import Omni.Test as Test from starlette.testclient import TestClient + class BaseWebTest(Test.TestCase): + """Base class for web tests.""" + def setUp(self) -> None: + """Set up test database and client.""" Core.Database.init_db() self.client = TestClient(Web.app) @staticmethod def tearDown() -> None: + """Clean up test database.""" Core.Database.teardown() + class TestMetricsView(BaseWebTest): - def test_admin_metrics_view_access(self): + """Test Admin Metrics View.""" + + def test_admin_metrics_view_access(self) -> None: """Admin user should be able to access metrics view.""" # Create admin user - admin_id, _ = Core.Database.create_user("ben@bensima.com") + _admin_id, _ = Core.Database.create_user("ben@bensima.com") self.client.post("/login", data={"email": "ben@bensima.com"}) response = self.client.get("/admin/metrics") @@ -35,7 +45,7 @@ class TestMetricsView(BaseWebTest): self.assertIn("Growth & Usage", response.text) self.assertIn("Total Users", response.text) - def test_admin_metrics_data(self): + def test_admin_metrics_data(self) -> None: """Metrics view should show correct data.""" # Create admin user admin_id, _ = Core.Database.create_user("ben@bensima.com") @@ -48,32 +58,40 @@ class TestMetricsView(BaseWebTest): # 2. Subscriptions (simulate by setting subscription_status) with Core.Database.get_connection() as conn: - conn.execute("UPDATE users SET subscription_status = 'active' WHERE id = ?", (user2_id,)) - conn.commit() + conn.execute( + "UPDATE users SET subscription_status = 'active' WHERE id = ?", + (user2_id,), + ) + conn.commit() # 3. Submissions - Core.Database.add_to_queue("http://example.com/1", "user1@example.com", admin_id) - + Core.Database.add_to_queue( + "http://example.com/1", + "user1@example.com", + admin_id, + ) + # Get metrics page response = self.client.get("/admin/metrics") self.assertEqual(response.status_code, 200) - + # Check labels self.assertIn("Total Users", response.text) self.assertIn("Active Subs", response.text) self.assertIn("Submissions (24h)", response.text) - - # Check values (metrics dict is passed to template, we check rendered HTML) + + # Check values (metrics dict is passed to template, + # we check rendered HTML) # Total users: 3 (admin + user1 + user2) # Active subs: 1 (user2) # Submissions 24h: 1 - + # Check for values in HTML # Note: This is a bit brittle, but effective for quick verification - self.assertIn('<h3 class="mb-0">3</h3>', response.text) + self.assertIn('<h3 class="mb-0">3</h3>', response.text) self.assertIn('<h3 class="mb-0">1</h3>', response.text) - def test_non_admin_access_denied(self): + def test_non_admin_access_denied(self) -> None: """Non-admin users should be denied access.""" # Create regular user Core.Database.create_user("regular@example.com") @@ -84,12 +102,13 @@ class TestMetricsView(BaseWebTest): self.assertEqual(response.status_code, 302) self.assertIn("error=forbidden", response.headers["Location"]) - def test_anonymous_access_redirect(self): + def test_anonymous_access_redirect(self) -> None: """Anonymous users should be redirected to login.""" response = self.client.get("/admin/metrics") self.assertEqual(response.status_code, 302) self.assertEqual(response.headers["Location"], "/") + def test() -> None: """Run the tests.""" Test.run( @@ -97,5 +116,6 @@ def test() -> None: [TestMetricsView], ) + if __name__ == "__main__": test() |
