- Add complete agent harness structure with 8 roles (leader, triager, architect, implementer, reviewer, security, qa, documenter) - Implement strict workflow with 9 stages and mandatory gates - Add comprehensive verification script and runtime status tracking - Create artifact-based evidence system with contracts and schemas - Add agent policy matrix with permissions and anti-cheat rules - Include test suite (44 tests passing) and CI-ready structure - Add documentation: README, HOWTO, CHECKPOINTS, templates - Configure model routing policies and token-aware task assignment - Add BDD/SDD specification guides and feature templates - Include starter pack for quick project onboarding All verification checks pass. Framework ready for production use.
159 lines
5.3 KiB
Gherkin
159 lines
5.3 KiB
Gherkin
@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" |