@F-003 @password Feature: Cambio de Contraseña Como usuario autenticado Quiero cambiar mi contraseña Para mantener mi cuenta segura con credenciales actualizadas # ==================== # HAPPY PATH # ==================== @smoke @positive Scenario: Cambiar contraseña exitosamente Given un usuario autenticado con email "user@example.com" And su contraseña actual es "OldPass123!" When el usuario solicita cambiar contraseña And ingresa contraseña actual "OldPass123!" And ingresa nueva contraseña "NewPass456@" And confirma nueva contraseña "NewPass456@" Then el sistema valida la contraseña actual correctamente And guarda la nueva contraseña hasheada And invalida todas las sesiones existentes And muestra mensaje de confirmación "Contraseña actualizada exitosamente" @positive Scenario: Contraseña con todos los caracteres especiales permitidos Given un usuario autenticado When cambia contraseña a "!@#$%^&*()_+-=[]{}|;':\",./<>?abc123ABC" Then el sistema acepta la contraseña And la guarda correctamente # ==================== # PASSWORD VALIDATION # ==================== @negative Scenario: Nueva contraseña muy corta (menos de 8 caracteres) Given un usuario autenticado When intenta cambiar contraseña a "Ab1!" Then el sistema muestra error "La contraseña debe tener al menos 8 caracteres" And la contraseña no es cambiada @negative Scenario: Nueva contraseña muy larga (más de 128 caracteres) Given un usuario autenticado When intenta cambiar contraseña a "A" repetido 129 veces más "a1!" Then el sistema muestra error "La contraseña debe tener máximo 128 caracteres" And la contraseña no es cambiada @negative Scenario: Nueva contraseña sin mayúscula Given un usuario autenticado When intenta cambiar contraseña a "password123!" Then el sistema muestra error "La contraseña debe contener al menos una mayúscula" And la contraseña no es cambiada @negative Scenario: Nueva contraseña sin minúscula Given un usuario autenticado When intenta cambiar contraseña a "PASSWORD123!" Then el sistema muestra error "La contraseña debe contener al menos una minúscula" And la contraseña no es cambiada @negative Scenario: Nueva contraseña sin número Given un usuario autenticado When intenta cambiar contraseña a "PasswordABC!" Then el sistema muestra error "La contraseña debe contener al menos un número" And la contraseña no es cambiada @negative Scenario: Nueva contraseña sin carácter especial Given un usuario autenticado When intenta cambiar contraseña a "Password123" Then el sistema muestra error "La contraseña debe contener al menos un carácter especial (!@#$%^&*...)" And la contraseña no es cambiada # ==================== # CURRENT PASSWORD # ==================== @negative Scenario: Contraseña actual incorrecta Given un usuario autenticado con contraseña actual "CorrectPass123!" When intenta cambiar contraseña con actual "WrongPass456!" And nueva contraseña "NewPass789@" Then el sistema muestra error "La contraseña actual es incorrecta" And la contraseña no es cambiada And no se invalidan sesiones @negative Scenario: Contraseña actual vacía Given un usuario autenticado When intenta cambiar contraseña con actual "" And nueva contraseña "NewPass123@" Then el sistema muestra error "La contraseña actual es requerida" And la contraseña no es cambiada # ==================== # PASSWORD MISMATCH # ==================== @negative Scenario: Nueva contraseña y confirmación no coinciden Given un usuario autenticado When ingresa contraseña actual correcta And ingresa nueva contraseña "NewPass123@" But confirma con "DifferentPass456!" Then el sistema muestra error "Las contraseñas no coinciden" And la contraseña no es cambiada # ==================== # REUSE DETECTION # ==================== @negative @security Scenario: Reutilizar contraseña anterior Given un usuario autenticado con contraseña actual "MyPass123!" And historial de contraseñas incluye "MyPass123!" When intenta cambiar contraseña a "MyPass123!" Then el sistema muestra error "La nueva contraseña no puede ser igual a la anterior" And la contraseña no es cambiada # ==================== # AUTHORIZATION # ==================== @negative @security Scenario: Usuario no autenticado intenta cambiar contraseña Given un usuario no autenticado When intenta cambiar contraseña Then el sistema retorna error 401 "No autorizado" And la contraseña no es cambiada @negative @security Scenario: Token expirado al cambiar contraseña Given un usuario con sesión expirada When intenta cambiar contraseña Then el sistema retorna error 401 "Sesión expirada" And la contraseña no es cambiada @negative @security Scenario: Intentar cambiar contraseña de otro usuario Given un usuario autenticado con ID "user-123" When intenta cambiar contraseña del usuario "user-456" Then el sistema retorna error 403 "No tienes permiso para modificar esta cuenta" And la contraseña no es cambiada # ==================== # RATE LIMITING # ==================== @negative @security Scenario: Superar límite de intentos (rate limit) Given un usuario autenticado And ya realizó 5 intentos fallidos en la última hora When intenta cambiar contraseña una vez más Then el sistema retorna error 429 "Demasiados intentos. Intenta de nuevo en 1 hora" And todas las solicitudes son bloqueadas hasta que pase el tiempo # ==================== # SUCCESSFUL REAUTHENTICATION # ==================== @positive Scenario: Cambio de contraseña seguido de login exitoso Given un usuario con contraseña "OldPass123!" When cambia su contraseña a "NewPass456@" And luego intenta iniciar sesión con "NewPass456@" Then el login es exitoso And el usuario accede a su cuenta