Arch/tests/test_users.py

129 lines
5.1 KiB
Python

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