refactor: complete bootstrap of ARNES agent harness framework
- 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.
This commit is contained in:
159
spec/bdd/features/profile/user-profile.feature
Normal file
159
spec/bdd/features/profile/user-profile.feature
Normal file
@@ -0,0 +1,159 @@
|
||||
@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"
|
||||
Reference in New Issue
Block a user