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() )