Arch/tests/test_admin.py

133 lines
4.6 KiB
Python
Raw Normal View History

2025-03-03 17:50:11 -03:00
import pytest
import json
import os
2025-03-04 06:38:19 -03:00
from .helpers import ensure_clean_session
2025-03-03 17:50:11 -03:00
class TestAdminFunctions:
"""Test administrative functions."""
2025-03-04 06:38:19 -03:00
2025-03-03 17:50:11 -03:00
def test_admin_dashboard(self, logged_in_client):
2025-03-04 06:38:19 -03:00
"""Test accessing admin dashboard."""
# Ensure we have a clean, authenticated session
logged_in_client = ensure_clean_session(logged_in_client)
# Access the admin dashboard
response = logged_in_client.get("/admin/dashboard")
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
assert b"Administraci" in response.data or b"Dashboard" in response.data
2025-03-03 17:50:11 -03:00
def test_filetypes_management(self, logged_in_client):
"""Test file types management page."""
2025-03-04 06:38:19 -03:00
response = logged_in_client.get("/admin/filetypes")
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
assert b"Tipos de Archivo" in response.data
2025-03-03 17:50:11 -03:00
def test_system_status(self, logged_in_client):
"""Test system status page."""
2025-03-04 06:38:19 -03:00
response = logged_in_client.get("/admin/system")
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
assert b"Estado del Sistema" in response.data
2025-03-03 17:50:11 -03:00
def test_add_filetype(self, logged_in_client, app):
"""Test adding a new file type."""
2025-03-04 06:38:19 -03:00
response = logged_in_client.post(
"/admin/filetypes/add",
data={
"extension": "docx",
"descripcion": "Documento Word",
"mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"tamano_maximo": 15728640, # 15MB in bytes
},
follow_redirects=True,
)
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
2025-03-03 17:50:11 -03:00
# Verify file type was added
with app.app_context():
2025-03-04 06:38:19 -03:00
filetypes_path = os.path.join(
app.config["STORAGE_PATH"], "filetypes", "filetypes.json"
)
with open(filetypes_path, "r") as f:
2025-03-03 17:50:11 -03:00
filetypes = json.load(f)
2025-03-04 06:38:19 -03:00
assert "docx" in filetypes
assert filetypes["docx"]["descripcion"] == "Documento Word"
2025-03-03 17:50:11 -03:00
def test_delete_filetype(self, logged_in_client, app):
"""Test deleting a file type."""
# First add a file type to delete
2025-03-04 06:38:19 -03:00
logged_in_client.post(
"/admin/filetypes/add",
data={
"extension": "xlsx",
"descripcion": "Hoja de cálculo Excel",
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"tamano_maximo": 15728640,
},
follow_redirects=True,
)
2025-03-03 17:50:11 -03:00
# Verify it was added
with app.app_context():
2025-03-04 06:38:19 -03:00
filetypes_path = os.path.join(
app.config["STORAGE_PATH"], "filetypes", "filetypes.json"
)
with open(filetypes_path, "r") as f:
2025-03-03 17:50:11 -03:00
filetypes = json.load(f)
2025-03-04 06:38:19 -03:00
assert "xlsx" in filetypes
2025-03-03 17:50:11 -03:00
# Now delete it
2025-03-04 06:38:19 -03:00
response = logged_in_client.post(
"/admin/filetypes/xlsx/delete", follow_redirects=True
)
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
2025-03-03 17:50:11 -03:00
# Verify it was deleted
with app.app_context():
2025-03-04 06:38:19 -03:00
filetypes_path = os.path.join(
app.config["STORAGE_PATH"], "filetypes", "filetypes.json"
)
with open(filetypes_path, "r") as f:
2025-03-03 17:50:11 -03:00
filetypes = json.load(f)
2025-03-04 06:38:19 -03:00
assert "xlsx" not in filetypes
2025-03-03 17:50:11 -03:00
def test_update_filetype(self, logged_in_client, app):
"""Test updating a file type."""
# First add a file type to update
2025-03-04 06:38:19 -03:00
logged_in_client.post(
"/admin/filetypes/add",
data={
"extension": "png",
"descripcion": "Imagen PNG",
"mime_type": "image/png",
"tamano_maximo": 5242880, # 5MB
},
follow_redirects=True,
)
2025-03-03 17:50:11 -03:00
# Now update it
2025-03-04 06:38:19 -03:00
response = logged_in_client.post(
"/admin/filetypes/png/update",
data={
"descripcion": "Imagen PNG Actualizada",
"mime_type": "image/png",
"tamano_maximo": 10485760, # 10MB (increased)
},
follow_redirects=True,
)
2025-03-03 17:50:11 -03:00
assert response.status_code == 200
2025-03-04 06:38:19 -03:00
2025-03-03 17:50:11 -03:00
# Verify changes
with app.app_context():
2025-03-04 06:38:19 -03:00
filetypes_path = os.path.join(
app.config["STORAGE_PATH"], "filetypes", "filetypes.json"
)
with open(filetypes_path, "r") as f:
2025-03-03 17:50:11 -03:00
filetypes = json.load(f)
2025-03-04 06:38:19 -03:00
assert "png" in filetypes
assert filetypes["png"]["descripcion"] == "Imagen PNG Actualizada"
assert filetypes["png"]["tamano_maximo"] == 10485760