import pytest import json import os class TestAdminFunctions: """Test administrative functions.""" def test_admin_dashboard(self, logged_in_client): """Test access to admin dashboard.""" response = logged_in_client.get('/admin/') assert response.status_code == 200 assert b'Panel de Administraci' in response.data # "Panel de Administración" def test_filetypes_management(self, logged_in_client): """Test file types management page.""" response = logged_in_client.get('/admin/filetypes') assert response.status_code == 200 assert b'Tipos de Archivo' in response.data def test_system_status(self, logged_in_client): """Test system status page.""" response = logged_in_client.get('/admin/system') assert response.status_code == 200 assert b'Estado del Sistema' in response.data def test_add_filetype(self, logged_in_client, app): """Test adding a new file type.""" 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) assert response.status_code == 200 # Verify file type was added with app.app_context(): filetypes_path = os.path.join(app.config['STORAGE_PATH'], 'filetypes', 'filetypes.json') with open(filetypes_path, 'r') as f: filetypes = json.load(f) assert 'docx' in filetypes assert filetypes['docx']['descripcion'] == 'Documento Word' def test_delete_filetype(self, logged_in_client, app): """Test deleting a file type.""" # First add a file type to delete 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) # Verify it was added with app.app_context(): filetypes_path = os.path.join(app.config['STORAGE_PATH'], 'filetypes', 'filetypes.json') with open(filetypes_path, 'r') as f: filetypes = json.load(f) assert 'xlsx' in filetypes # Now delete it response = logged_in_client.post('/admin/filetypes/xlsx/delete', follow_redirects=True) assert response.status_code == 200 # Verify it was deleted with app.app_context(): filetypes_path = os.path.join(app.config['STORAGE_PATH'], 'filetypes', 'filetypes.json') with open(filetypes_path, 'r') as f: filetypes = json.load(f) assert 'xlsx' not in filetypes def test_update_filetype(self, logged_in_client, app): """Test updating a file type.""" # First add a file type to update logged_in_client.post('/admin/filetypes/add', data={ 'extension': 'png', 'descripcion': 'Imagen PNG', 'mime_type': 'image/png', 'tamano_maximo': 5242880 # 5MB }, follow_redirects=True) # Now update it 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) assert response.status_code == 200 # Verify changes with app.app_context(): filetypes_path = os.path.join(app.config['STORAGE_PATH'], 'filetypes', 'filetypes.json') with open(filetypes_path, 'r') as f: filetypes = json.load(f) assert 'png' in filetypes assert filetypes['png']['descripcion'] == 'Imagen PNG Actualizada' assert filetypes['png']['tamano_maximo'] == 10485760