@F-002 @profile Feature: Gestión de Perfil de Usuario Como usuario autenticado Quiero gestionar mi perfil Para mantener mis datos personales actualizados y personalizar mi experiencia # ==================== # VIEW PROFILE # ==================== @smoke @positive Scenario: Ver perfil de usuario exitosamente Given un usuario autenticado con ID "user-123" y nombre "Juan Pérez" And el usuario tiene avatar "https://cdn.example.com/avatar-123.jpg" And el idioma configurado es "es" When el usuario solicita ver su perfil Then el sistema retorna los datos completos del perfil And incluye id "user-123", nombre "Juan Pérez" And incluye avatar_url y language "es" @negative Scenario: Ver perfil sin autenticación Given un usuario no autenticado When el usuario solicita ver su perfil Then el sistema retorna error 401 "No autorizado" And no retorna datos del perfil @negative Scenario: Ver perfil de usuario inexistente Given un usuario autenticado When solicita ver perfil de ID "nonexistent-user" Then el sistema retorna error 404 "Usuario no encontrado" # ==================== # UPDATE NAME # ==================== @smoke @positive Scenario: Editar nombre del perfil exitosamente Given un usuario autenticado con ID "user-123" And el perfil tiene nombre "Juan" When el usuario actualiza su nombre a "Pedro" Then el perfil muestra nombre "Pedro" And la fecha de updated_at se actualiza @positive Scenario: Editar nombre con caracteres unicode válidos Given un usuario autenticado When cambia su nombre a "José García" Then el sistema acepta el cambio And el nombre se guarda como "José García" @negative Scenario: Editar nombre con caracteres inválidos Given un usuario autenticado When intenta cambiar nombre a "Juan@123!" Then el sistema muestra error de validación "Nombre inválido: solo letras y espacios" And el nombre permanece sin cambios @negative Scenario: Editar nombre con menos de 2 caracteres Given un usuario autenticado When intenta cambiar nombre a "J" Then el sistema muestra error "Nombre debe tener al menos 2 caracteres" @negative Scenario: Editar nombre con más de 50 caracteres Given un usuario autenticado When intenta cambiar nombre a "A" repetido 51 veces Then el sistema muestra error "Nombre debe tener máximo 50 caracteres" # ==================== # UPDATE AVATAR # ==================== @smoke @positive Scenario: Cambiar avatar exitosamente Given un usuario autenticado con avatar actual "https://cdn.example.com/old.jpg" When el usuario sube un nuevo avatar "https://cdn.example.com/new.jpg" Then el perfil muestra avatar_url "https://cdn.example.com/new.jpg" @negative Scenario: Cambiar avatar con URL inválida Given un usuario autenticado When intenta cambiar avatar a "not-a-valid-url" Then el sistema muestra error "URL de avatar inválida" And el avatar permanece sin cambios @negative Scenario: Cambiar avatar con URL de protocolo no permitido Given un usuario autenticado When intenta cambiar avatar a "ftp://malicious.com/file.jpg" Then el sistema muestra error "Solo se permiten URLs http o https" And el avatar permanece sin cambios # ==================== # UPDATE LANGUAGE # ==================== @smoke @positive Scenario: Cambiar idioma a español exitosamente Given un usuario autenticado con idioma "en" When el usuario cambia idioma a "es" Then el idioma se guarda como "es" And el sistema confirma el cambio @positive Scenario: Cambiar idioma a francés Given un usuario autenticado When cambia idioma a "fr" Then el sistema acepta "fr" como idioma válido @positive Scenario: Cambiar idioma a alemán Given un usuario autenticado When cambia idioma a "de" Then el sistema acepta "de" como idioma válido @negative Scenario: Cambiar idioma a idioma no soportado Given un usuario autenticado When intenta cambiar idioma a "zh" Then el sistema muestra error "Idioma no soportado" And el idioma permanece sin cambios # ==================== # PARTIAL UPDATE # ==================== @positive Scenario: Actualizar solo nombre sin cambiar avatar Given un usuario autenticado con nombre "Juan" y avatar "https://cdn.com/img.jpg" When el usuario solo actualiza nombre a "Pedro" Then el nombre cambia a "Pedro" And el avatar_url permanece "https://cdn.com/img.jpg" @positive Scenario: Actualizar múltiples campos en una petición Given un usuario autenticado When envía actualización con nombre "María", avatar "https://cdn.com/maria.jpg", idioma "es" Then todos los campos se actualizan correctamente And el perfil refleja todos los cambios # ==================== # AUTHORIZATION # ==================== @negative @security Scenario: Usuario intenta editar perfil de otro usuario Given un usuario autenticado con ID "user-123" When intenta actualizar perfil de usuario "user-456" Then el sistema retorna error 403 "No tienes permiso para editar este perfil" @negative @security Scenario: Token expirado al editar perfil Given un usuario con token expirado When intenta actualizar su perfil Then el sistema retorna error 401 "Sesión expirada"