import pytest import json import os class TestUserManagement: """Test user management functionality.""" def test_list_users(self, logged_in_client): """Test listing users.""" response = logged_in_client.get('/users/') assert response.status_code == 200 assert b'Usuarios del Sistema' in response.data # Check for existing users assert b'admin' in response.data assert b'user1' in response.data def test_create_user(self, logged_in_client, app): """Test creating a new user.""" response = logged_in_client.post('/users/create', data={ 'nombre': 'Usuario de Prueba', 'username': 'testuser', 'email': 'test@example.com', 'password': 'password123', 'password_confirm': 'password123', 'nivel': 1000, 'idioma': 'es', 'empresa': 'Empresa Test', 'estado': 'activo', 'fecha_caducidad': '' }, follow_redirects=True) assert response.status_code == 200 # Check if user was created with app.app_context(): users_path = os.path.join(app.config['STORAGE_PATH'], 'users', 'users.json') with open(users_path, 'r') as f: users = json.load(f) assert 'testuser' in users assert users['testuser']['nombre'] == 'Usuario de Prueba' assert users['testuser']['email'] == 'test@example.com' assert users['testuser']['nivel'] == 1000 def test_edit_user(self, logged_in_client, app): """Test editing an existing user.""" # First create a user to edit logged_in_client.post('/users/create', data={ 'nombre': 'Usuario para Editar', 'username': 'edit_user', 'email': 'edit@example.com', 'password': 'password123', 'password_confirm': 'password123', 'nivel': 1000, 'idioma': 'es', 'empresa': 'Empresa Original', 'estado': 'activo', 'fecha_caducidad': '' }, follow_redirects=True) # Now edit the user response = logged_in_client.post('/users/edit/edit_user', data={ 'nombre': 'Usuario Editado', 'email': 'edited@example.com', 'password': '', # Empty password means no change 'password_confirm': '', 'nivel': 5000, # Changed level 'idioma': 'en', # Changed language 'empresa': 'Empresa Modificada', 'estado': 'activo', 'fecha_caducidad': '' }, follow_redirects=True) assert response.status_code == 200 # Verify changes with app.app_context(): users_path = os.path.join(app.config['STORAGE_PATH'], 'users', 'users.json') with open(users_path, 'r') as f: users = json.load(f) assert 'edit_user' in users assert users['edit_user']['nombre'] == 'Usuario Editado' assert users['edit_user']['email'] == 'edited@example.com' assert users['edit_user']['nivel'] == 5000 assert users['edit_user']['idioma'] == 'en' assert users['edit_user']['empresa'] == 'Empresa Modificada' def test_delete_user(self, logged_in_client, app): """Test deleting a user.""" # First create a user to delete logged_in_client.post('/users/create', data={ 'nombre': 'Usuario para Eliminar', 'username': 'delete_user', 'email': 'delete@example.com', 'password': 'password123', 'password_confirm': 'password123', 'nivel': 1000, 'idioma': 'es', 'empresa': 'Empresa Test', 'estado': 'activo', 'fecha_caducidad': '' }, follow_redirects=True) # Verify user was created with app.app_context(): users_path = os.path.join(app.config['STORAGE_PATH'], 'users', 'users.json') with open(users_path, 'r') as f: users = json.load(f) assert 'delete_user' in users # Now delete the user response = logged_in_client.post('/users/delete/delete_user', follow_redirects=True) assert response.status_code == 200 # Verify user was deleted with app.app_context(): users_path = os.path.join(app.config['STORAGE_PATH'], 'users', 'users.json') with open(users_path, 'r') as f: users = json.load(f) assert 'delete_user' not in users def test_cannot_delete_admin(self, logged_in_client): """Test that admin user cannot be deleted.""" response = logged_in_client.post('/users/delete/admin', follow_redirects=True) assert response.status_code == 200 # Should see an error message assert b'No se puede eliminar' in response.data or b'no puede' in response.data