129 lines
5.1 KiB
Python
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
|