summaryrefslogtreecommitdiff
path: root/Biz/PodcastItLater/TestMetricsView.py
diff options
context:
space:
mode:
Diffstat (limited to 'Biz/PodcastItLater/TestMetricsView.py')
-rw-r--r--Biz/PodcastItLater/TestMetricsView.py48
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()