68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
import pytest
|
|
from flask import session, g
|
|
|
|
class TestAuth:
|
|
"""Test authentication functionality."""
|
|
|
|
def test_login_page(self, client):
|
|
"""Test that login page loads correctly."""
|
|
response = client.get('/auth/login')
|
|
assert response.status_code == 200
|
|
assert b'Iniciar sesi' in response.data # 'Iniciar sesión' in Spanish
|
|
|
|
def test_login_success(self, client):
|
|
"""Test successful login with correct credentials."""
|
|
response = client.post(
|
|
'/auth/login',
|
|
data={'username': 'admin', 'password': 'admin123'},
|
|
follow_redirects=True
|
|
)
|
|
assert response.status_code == 200
|
|
# Check that we're redirected to the right page after login
|
|
assert b'Panel' in response.data or b'Proyectos' in response.data
|
|
|
|
def test_login_invalid_credentials(self, client):
|
|
"""Test login with invalid credentials."""
|
|
response = client.post(
|
|
'/auth/login',
|
|
data={'username': 'admin', 'password': 'wrongpassword'},
|
|
follow_redirects=True
|
|
)
|
|
assert response.status_code == 200
|
|
assert b'credenciales' in response.data.lower() # Error message about credentials
|
|
|
|
def test_logout(self, auth, client):
|
|
"""Test logout functionality."""
|
|
# First login
|
|
auth.login()
|
|
|
|
# Then logout
|
|
response = auth.logout()
|
|
assert response.status_code == 200
|
|
|
|
# Check if logged out - try to access a protected page
|
|
response = client.get('/users/', follow_redirects=True)
|
|
assert b'iniciar sesi' in response.data.lower() # Should see login page
|
|
|
|
def test_access_protected_route(self, client):
|
|
"""Test accessing a protected route without login."""
|
|
# Try to access users list without login
|
|
response = client.get('/users/', follow_redirects=True)
|
|
assert response.status_code == 200
|
|
assert b'iniciar sesi' in response.data.lower() # Should be redirected to login
|
|
|
|
def test_access_protected_route_with_login(self, logged_in_client):
|
|
"""Test accessing a protected route with login."""
|
|
# Admin should be able to access users list
|
|
response = logged_in_client.get('/admin/dashboard')
|
|
assert response.status_code == 200
|
|
|
|
def test_permission_levels(self, client, auth):
|
|
"""Test different permission levels."""
|
|
# Login as regular user
|
|
auth.login(username='user1', password='admin123')
|
|
|
|
# Try to access admin-only page
|
|
response = client.get('/admin/dashboard', follow_redirects=True)
|
|
assert response.status_code == 403 or b'acceso denegado' in response.data.lower()
|