You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
7.9 KiB
Python
164 lines
7.9 KiB
Python
import unittest
|
|
|
|
from fastapi.testclient import TestClient
|
|
|
|
from admin_app.api.dependencies import get_optional_panel_staff_context
|
|
from admin_app.app_factory import create_app
|
|
from admin_app.core import AdminSettings, AuthenticatedStaffContext, AuthenticatedStaffPrincipal
|
|
from shared.contracts import StaffRole
|
|
|
|
|
|
def _build_panel_context() -> AuthenticatedStaffContext:
|
|
return AuthenticatedStaffContext(
|
|
principal=AuthenticatedStaffPrincipal(
|
|
id=7,
|
|
email="admin@empresa.com",
|
|
display_name="Administrador",
|
|
role=StaffRole.ADMIN,
|
|
is_active=True,
|
|
),
|
|
session_id=77,
|
|
)
|
|
|
|
|
|
class AdminViewBootstrapTests(unittest.TestCase):
|
|
def test_panel_entry_redirects_to_login_without_session(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
client = TestClient(app)
|
|
|
|
response = client.get("/panel", follow_redirects=False)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertTrue(response.headers["location"].endswith("/login"))
|
|
|
|
def test_panel_entry_redirects_to_admin_dashboard_with_session(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
app.dependency_overrides[get_optional_panel_staff_context] = lambda: _build_panel_context()
|
|
client = TestClient(app)
|
|
try:
|
|
response = client.get("/panel", follow_redirects=False)
|
|
finally:
|
|
app.dependency_overrides.clear()
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertTrue(response.headers["location"].endswith("/panel/admin"))
|
|
|
|
def test_login_page_redirects_to_dashboard_when_session_exists(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
app.dependency_overrides[get_optional_panel_staff_context] = lambda: _build_panel_context()
|
|
client = TestClient(app)
|
|
try:
|
|
response = client.get("/login", follow_redirects=False)
|
|
finally:
|
|
app.dependency_overrides.clear()
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertTrue(response.headers["location"].endswith("/panel/admin"))
|
|
|
|
def test_login_page_renders_focused_auth_experience(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
client = TestClient(app)
|
|
|
|
response = client.get("/login")
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("Login administrativo", response.text)
|
|
self.assertIn("Acesso restrito", response.text)
|
|
self.assertIn('data-admin-login-form="true"', response.text)
|
|
self.assertIn('data-auth-endpoint="/panel/auth/login"', response.text)
|
|
self.assertIn('data-dashboard-href="http://testserver/panel/admin"', response.text)
|
|
self.assertNotIn('data-session-endpoint=', response.text)
|
|
self.assertNotIn('data-logout-endpoint=', response.text)
|
|
self.assertNotIn("Voltar ao dashboard", response.text)
|
|
self.assertNotIn("/panel/tools/review", response.text)
|
|
|
|
def test_admin_dashboard_renders_bootstrap_dashboard_when_session_exists(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
app.dependency_overrides[get_optional_panel_staff_context] = lambda: _build_panel_context()
|
|
client = TestClient(app)
|
|
try:
|
|
response = client.get("/panel/admin")
|
|
finally:
|
|
app.dependency_overrides.clear()
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("text/html", response.headers["content-type"])
|
|
self.assertIn("Painel Administrativo", response.text)
|
|
self.assertIn("Dashboard do administrador", response.text)
|
|
self.assertIn("Areas do sistema", response.text)
|
|
self.assertIn("Entradas claras para as areas protegidas", response.text)
|
|
self.assertIn("Revisao de tools", response.text)
|
|
self.assertIn("/panel/tools/review", response.text)
|
|
self.assertIn("/panel/assets/styles/panel.css", response.text)
|
|
self.assertNotIn("API pronta para ser plugada na UI", response.text)
|
|
|
|
def test_tool_review_page_redirects_to_login_without_session(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
client = TestClient(app)
|
|
|
|
response = client.get("/panel/tools/review", follow_redirects=False)
|
|
|
|
self.assertEqual(response.status_code, 302)
|
|
self.assertTrue(response.headers["location"].endswith("/login"))
|
|
|
|
def test_tool_review_page_renders_web_data_endpoints_when_session_exists(self):
|
|
app = create_app(AdminSettings(admin_app_name="Admin Interno", admin_version="1.4.0"))
|
|
app.dependency_overrides[get_optional_panel_staff_context] = lambda: _build_panel_context()
|
|
client = TestClient(app)
|
|
try:
|
|
response = client.get("/panel/tools/review")
|
|
finally:
|
|
app.dependency_overrides.clear()
|
|
|
|
self.assertEqual(response.status_code, 200)
|
|
self.assertIn("Revisao, aprovacao e ativacao", response.text)
|
|
self.assertIn('data-admin-tool-review-board="true"', response.text)
|
|
self.assertIn('data-overview-endpoint="/panel/tools/overview"', response.text)
|
|
self.assertIn('data-contracts-endpoint="/panel/tools/contracts"', response.text)
|
|
self.assertIn('data-review-queue-endpoint="/panel/tools/review-queue"', response.text)
|
|
self.assertIn('data-publications-endpoint="/panel/tools/publications"', response.text)
|
|
self.assertNotIn("Abrir login administrativo", response.text)
|
|
|
|
def test_prefixed_panel_routes_apply_auth_gate(self):
|
|
app = create_app(AdminSettings(admin_api_prefix="/admin"))
|
|
client = TestClient(app)
|
|
|
|
panel_response = client.get("/admin/panel", follow_redirects=False)
|
|
login_response = client.get("/admin/login")
|
|
review_response = client.get("/admin/panel/tools/review", follow_redirects=False)
|
|
css_response = client.get("/admin/panel/assets/styles/panel.css")
|
|
|
|
self.assertEqual(panel_response.status_code, 302)
|
|
self.assertEqual(login_response.status_code, 200)
|
|
self.assertEqual(review_response.status_code, 302)
|
|
self.assertEqual(css_response.status_code, 200)
|
|
self.assertTrue(panel_response.headers["location"].endswith("/admin/login"))
|
|
self.assertTrue(review_response.headers["location"].endswith("/admin/login"))
|
|
self.assertIn('data-auth-endpoint="/admin/panel/auth/login"', login_response.text)
|
|
self.assertIn('data-dashboard-href="http://testserver/admin/panel/admin"', login_response.text)
|
|
self.assertNotIn('data-session-endpoint=', login_response.text)
|
|
self.assertNotIn('data-logout-endpoint=', login_response.text)
|
|
self.assertIn("/admin/panel/assets/styles/panel.css", login_response.text)
|
|
self.assertIn("--admin-bg", css_response.text)
|
|
|
|
def test_prefixed_admin_dashboard_and_review_render_when_session_exists(self):
|
|
app = create_app(AdminSettings(admin_api_prefix="/admin"))
|
|
app.dependency_overrides[get_optional_panel_staff_context] = lambda: _build_panel_context()
|
|
client = TestClient(app)
|
|
try:
|
|
panel_response = client.get("/admin/panel/admin")
|
|
review_response = client.get("/admin/panel/tools/review")
|
|
finally:
|
|
app.dependency_overrides.clear()
|
|
|
|
self.assertEqual(panel_response.status_code, 200)
|
|
self.assertEqual(review_response.status_code, 200)
|
|
self.assertIn("Dashboard do administrador", panel_response.text)
|
|
self.assertIn("/admin/panel/tools/review", panel_response.text)
|
|
self.assertIn('data-overview-endpoint="/admin/panel/tools/overview"', review_response.text)
|
|
self.assertIn('data-publications-endpoint="/admin/panel/tools/publications"', review_response.text)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|