spr migrated books, and tester

This commit is contained in:
buenosairesam
2025-12-31 09:07:27 -03:00
parent 21b8eab3cb
commit cccc6b5a93
136 changed files with 15763 additions and 472 deletions

View File

@@ -0,0 +1,92 @@
# language: es
# Fuente: album/book/ops-templates/pet-owner/01-registro.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/common/test_users.py
# Tests Frontend: npx playwright test auth.spec.ts
Característica: Registro de usuario
Como visitante de la plataforma
Quiero poder crear una cuenta
Para gestionar mis mascotas y reservar turnos
# ============================================
# CAMINO FELIZ
# ============================================
Escenario: Registro exitoso con datos validos
Dado que estoy en la pagina de registro
Cuando ingreso email "nuevo@ejemplo.com"
Y ingreso contraseña "Password123"
Y confirmo contraseña "Password123"
Y acepto los terminos y condiciones
Y hago click en "Crear cuenta"
Entonces deberia ver mensaje "Te enviamos un email de verificacion"
Y deberia recibir email de verificacion
Escenario: Verificar email y activar cuenta
Dado que me registre con email "nuevo@ejemplo.com"
Y recibi el email de verificacion
Cuando hago click en el link de verificacion
Entonces mi cuenta deberia estar activa
Y deberia ser redirigido al dashboard
# ============================================
# VALIDACIONES
# ============================================
Esquema del escenario: Registro con datos invalidos
Dado que estoy en la pagina de registro
Cuando ingreso email "<email>"
Y ingreso contraseña "<password>"
Y confirmo contraseña "<confirmacion>"
Y hago click en "Crear cuenta"
Entonces deberia ver error "<mensaje_error>"
Ejemplos:
| email | password | confirmacion | mensaje_error |
| invalido | Password123 | Password123 | Email invalido |
| test@test.com | 123 | 123 | Contraseña muy corta |
| test@test.com | password | password | Debe contener al menos un numero |
| test@test.com | Password123 | Diferente123 | Las contraseñas no coinciden |
Escenario: Registro con email ya existente
Dado que existe un usuario con email "existente@ejemplo.com"
Y estoy en la pagina de registro
Cuando ingreso email "existente@ejemplo.com"
Y completo el resto del formulario correctamente
Y hago click en "Crear cuenta"
Entonces deberia ver error "Este email ya esta registrado"
Y deberia ver link "Recuperar contraseña"
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Registro linkea con cuenta invitado existente
# Usuario que reservo turno como invitado y ahora quiere registrarse
Dado que existe un usuario invitado con email "invitado@ejemplo.com"
Y ese usuario tiene una mascota "Luna" registrada
Y estoy en la pagina de registro
Cuando me registro con email "invitado@ejemplo.com"
Y verifico mi cuenta
Entonces deberia ver mi mascota "Luna" en el dashboard
Y deberia ver mis turnos anteriores
Escenario: Registro desde flujo de turnero
# Usuario empezo a reservar turno y decide crear cuenta
Dado que estoy en el paso final del turnero
Y ingrese mis datos de contacto
Cuando hago click en "Crear cuenta para guardar mis datos"
Entonces deberia ver formulario simplificado
Y mi email ya deberia estar pre-llenado
Y solo deberia ingresar contraseña
Escenario: Reenviar email de verificacion
Dado que me registre pero no verifique mi cuenta
Y estoy en la pagina de login
Cuando intento iniciar sesion
Entonces deberia ver "Tu cuenta no esta verificada"
Y deberia ver boton "Reenviar email"
Cuando hago click en "Reenviar email"
Entonces deberia recibir nuevo email de verificacion

View File

@@ -0,0 +1,141 @@
# language: es
# Fuente: album/book/ops-templates/pet-owner/02-reservar-turno.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/workflows/test_turnero_general.py
# Tests Frontend: npx playwright test turnero.spec.ts
# Relacionado: def/work_plan/10-flow-turnero.md
Característica: Reservar turno veterinario (Turnero)
Como dueno de mascota
Quiero reservar un turno veterinario a domicilio
Para que atiendan a mi mascota sin salir de casa
Antecedentes:
Dado que estoy en la pagina del turnero
# ============================================
# VERIFICACION DE COBERTURA
# ============================================
Escenario: Verificar cobertura en zona disponible
Cuando ingreso direccion "Av Santa Fe 1234, CABA"
Entonces deberia ver mensaje "Tenemos cobertura en tu zona"
Y deberia poder continuar al siguiente paso
Escenario: Zona sin cobertura
Cuando ingreso direccion "Calle Principal 100, Ushuaia"
Entonces deberia ver mensaje "Aun no tenemos cobertura en tu zona"
Y deberia ver formulario "Avisame cuando lleguen"
# ============================================
# FLUJO COMPLETO POR TIPO DE USUARIO
# ============================================
Esquema del escenario: Reservar turno como <tipo_usuario>
Dado que soy un usuario <tipo_usuario>
Y tengo cobertura en mi zona
Cuando completo los datos de mi mascota:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
| edad | 2 años |
| castrada | Si |
Y selecciono servicios:
| servicio |
| Vacunacion |
Y selecciono fechas preferidas:
| fecha | franja |
| 2024-01-15 | Mañana |
| 2024-01-16 | Tarde |
Y completo datos de contacto con email "<email>"
Y envio la solicitud
Entonces deberia crearse una solicitud en estado "Pendiente"
Y el dueno deberia ser <estado_dueno>
Y deberia recibir email de confirmacion
Ejemplos:
| tipo_usuario | email | estado_dueno |
| invitado | nuevo@test.com | creado como invitado |
| registrado | user@test.com | mi cuenta existente |
| recurrente | conocido@test.com | identificado por email |
# ============================================
# SELECCION DE SERVICIOS
# ============================================
Escenario: Servicios filtrados por tipo de mascota
Dado que agregue una mascota tipo "Gato"
Cuando veo los servicios disponibles
Entonces deberia ver "Vacuna triple felina"
Y deberia ver "Vacuna antirabica"
Pero no deberia ver "Vacuna sextuple canina"
Escenario: Consulta clinica se agrega automaticamente con vacunacion
Dado que estoy seleccionando servicios
Cuando selecciono "Vacunacion"
Entonces "Consulta clinica" deberia agregarse automaticamente
Y deberia ver nota "Incluye revision general"
Y no deberia poder quitar "Consulta clinica"
Escenario: Servicios combo con descuento
Dado que estoy seleccionando servicios
Cuando agrego los siguientes servicios:
| servicio |
| Vacunacion |
| Desparasitacion |
| Antipulgas |
Entonces deberia ver "Plan preventivo completo"
Y el total deberia incluir descuento de combo
Escenario: Castracion no disponible para mascota castrada
Dado que mi mascota esta marcada como castrada
Cuando veo los servicios disponibles
Entonces no deberia ver "Castracion"
# ============================================
# DATOS DE CONTACTO Y CUENTA
# ============================================
Escenario: Pre-llenado de datos para usuario logueado
Dado que estoy logueado como "maria@ejemplo.com"
Y tengo registrada mascota "Firulais"
Cuando inicio el flujo de turnero
Entonces mi direccion deberia estar pre-llenada
Y deberia poder seleccionar "Firulais" de mis mascotas
Y mis datos de contacto ya deberian estar completos
Escenario: Detectar usuario existente por email
Dado que soy usuario invitado
Y existe una cuenta con email "existente@ejemplo.com"
Cuando ingreso email "existente@ejemplo.com" en datos de contacto
Entonces deberia ver "Ya tenes cuenta con este email"
Y deberia ver opciones:
| opcion |
| Iniciar sesion |
| Continuar como invitado |
# ============================================
# EDGE CASES
# ============================================
Escenario: Usuario abandona flujo a mitad
Dado que complete los datos de mascota
Y cerre el navegador sin enviar
Cuando vuelvo a la pagina del turnero
Entonces deberia poder recuperar mi progreso
# Nota: datos guardados en localStorage o session
Escenario: Multiples mascotas en una solicitud
Dado que quiero atender a 2 mascotas
Cuando agrego mascota "Luna" tipo "Gato"
Y agrego mascota "Rocky" tipo "Perro"
Y selecciono servicios para cada una
Entonces deberia crearse una solicitud con 2 mascotas
Y el precio deberia reflejar ambas
Escenario: Franja horaria especifica
Dado que solo puedo por la mañana
Cuando selecciono franja "Mañana (9-12hs)"
Entonces la solicitud deberia registrar esa preferencia
# Nota: Es preferencia, no garantia

View File

@@ -0,0 +1,154 @@
# language: es
# Fuente: album/book/ops-templates/pet-owner/03-gestion-mascotas.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_pets.py
# Tests Frontend: npx playwright test pets.spec.ts
Característica: Gestion de mascotas
Como dueno de mascota registrado
Quiero gestionar la informacion de mis mascotas
Para tenerla actualizada y acceder a su historial medico
Antecedentes:
Dado que estoy logueado como dueno de mascota
Y estoy en la seccion "Mis mascotas"
# ============================================
# AGREGAR MASCOTA
# ============================================
Escenario: Agregar mascota con datos minimos
Cuando hago click en "Agregar mascota"
Y completo el formulario:
| campo | valor |
| nombre | Luna |
| tipo | Gato |
Y hago click en "Guardar"
Entonces deberia ver "Luna" en mi lista de mascotas
Y Luna deberia aparecer disponible en el turnero
Escenario: Agregar mascota con datos completos
Cuando hago click en "Agregar mascota"
Y completo el formulario:
| campo | valor |
| nombre | Rocky |
| tipo | Perro |
| raza | Labrador |
| fecha_nacimiento | 2020-03-15 |
| peso | 25 |
| sexo | Macho |
| castrado | Si |
Y subo una foto de Rocky
Y hago click en "Guardar"
Entonces deberia ver "Rocky" con su foto en mi lista
Y deberia ver badge "Castrado"
Esquema del escenario: Validacion de datos de mascota
Cuando intento agregar mascota con <campo> igual a "<valor>"
Entonces deberia ver error "<mensaje>"
Ejemplos:
| campo | valor | mensaje |
| nombre | | El nombre es obligatorio |
| nombre | A | Nombre muy corto |
| tipo | | Selecciona el tipo |
| peso | -5 | El peso debe ser positivo |
| peso | 500 | Peso fuera de rango |
# ============================================
# EDITAR MASCOTA
# ============================================
Escenario: Editar peso de mascota
Dado que tengo una mascota "Luna" con peso 4kg
Cuando edito a Luna
Y cambio el peso a 5kg
Y guardo los cambios
Entonces Luna deberia mostrar peso "5 kg"
Escenario: Marcar mascota como castrada
Dado que tengo una mascota "Rocky" no castrado
Cuando edito a Rocky
Y marco "Esta castrado"
Y guardo los cambios
Entonces Rocky deberia mostrar badge "Castrado"
Y el servicio "Castracion" no deberia aparecer para Rocky en el turnero
Escenario: Actualizar foto de mascota
Dado que tengo una mascota "Luna" sin foto
Cuando edito a Luna
Y subo una nueva foto
Y guardo los cambios
Entonces deberia ver la foto de Luna en su tarjeta
# ============================================
# ELIMINAR MASCOTA
# ============================================
Escenario: Eliminar mascota sin historial
Dado que tengo una mascota "Nuevo" sin visitas
Cuando hago click en "Eliminar" para Nuevo
Y confirmo la eliminacion
Entonces Nuevo no deberia aparecer en mi lista
# Nota: Es soft delete
Escenario: Eliminar mascota con historial medico
Dado que tengo una mascota "Luna" con visitas anteriores
Cuando hago click en "Eliminar" para Luna
Entonces deberia ver advertencia "Luna tiene historial medico"
Y deberia ver "El historial se conservara pero no podras verlo"
Cuando confirmo la eliminacion
Entonces Luna no deberia aparecer en mi lista
Escenario: No puedo eliminar mascota con turno pendiente
Dado que tengo una mascota "Rocky" con turno pendiente
Cuando intento eliminar a Rocky
Entonces deberia ver error "Rocky tiene turnos pendientes"
Y deberia ver sugerencia "Cancela los turnos primero"
# ============================================
# VER HISTORIAL MEDICO
# ============================================
Escenario: Ver historial de visitas de mascota
Dado que tengo una mascota "Luna" con 3 visitas completadas
Cuando hago click en Luna
Y voy a la seccion "Historial"
Entonces deberia ver 3 visitas listadas
Y deberian estar ordenadas por fecha descendente
Escenario: Ver detalle de visita
Dado que tengo una mascota "Luna" con visitas
Cuando veo el historial de Luna
Y hago click en la primera visita
Entonces deberia ver:
| campo |
| Fecha |
| Veterinario |
| Diagnostico |
| Tratamiento |
| Medicamentos |
Escenario: Mascota sin historial
Dado que tengo una mascota "Nuevo" recien agregada
Cuando veo el perfil de Nuevo
Entonces la seccion "Historial" deberia estar vacia
Y deberia ver mensaje "Aun no hay visitas registradas"
Y deberia ver boton "Reservar primer turno"
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Mascota heredada de cuenta invitado
Dado que me registre con email "juan@test.com"
Y previamente reserve turno como invitado para "Firulais"
Cuando voy a "Mis mascotas"
Entonces deberia ver "Firulais" en mi lista
Y deberia ver su historial de visitas previas
Escenario: Razas filtradas por tipo
Cuando agrego una mascota tipo "Gato"
Entonces las razas disponibles deberian ser razas de gato
Y no deberia ver razas de perro como "Labrador"

View File

@@ -0,0 +1,141 @@
# language: es
# Fuente: album/book/ops-templates/pet-owner/04-pago-turno.md
# Drive: 07. Finanzas y contabilidad/Mercado Pago
# Tests Backend: pytest tests/contracts/payments/test_mercadopago.py
# Tests Frontend: npx playwright test payment.spec.ts
Característica: Pago de turno
Como dueno de mascota con turno coordinado
Quiero pagar mi turno online
Para confirmar la visita del veterinario
Antecedentes:
Dado que tengo un turno en estado "Coordinado"
Y el turno tiene asignado veterinario "Dra. Garcia"
Y la fecha asignada es "15 de enero a las 10:00"
# ============================================
# FLUJO DE PAGO EXITOSO
# ============================================
Escenario: Pagar turno con tarjeta de credito
Dado que estoy en el detalle de mi turno coordinado
Cuando hago click en "Pagar"
Entonces deberia ser redirigido a Mercado Pago
Y deberia ver el monto correcto
Cuando selecciono "Tarjeta de credito"
Y completo los datos de la tarjeta
Y confirmo el pago
Entonces deberia volver a la plataforma
Y deberia ver "Pago exitoso"
Y el turno deberia estar en estado "Pagado"
Escenario: Recibir confirmacion de pago
Dado que complete el pago exitosamente
Entonces deberia recibir email de confirmacion
Y el email deberia contener:
| campo |
| Fecha del turno |
| Direccion |
| Veterinario asignado |
| Monto pagado |
| Numero de operacion |
# ============================================
# METODOS DE PAGO
# ============================================
Esquema del escenario: Pagar con diferentes metodos
Dado que estoy en Mercado Pago
Cuando selecciono metodo "<metodo>"
Y completo el pago
Entonces el pago deberia ser <resultado>
Y el estado de acreditacion deberia ser "<acreditacion>"
Ejemplos:
| metodo | resultado | acreditacion |
| Tarjeta credito | exitoso | inmediata |
| Tarjeta debito | exitoso | inmediata |
| Dinero en cuenta | exitoso | inmediata |
| Transferencia | pendiente | 1-2 dias |
| Rapipago | pendiente | hasta 24hs |
# ============================================
# MANEJO DE ERRORES
# ============================================
Escenario: Pago rechazado por fondos insuficientes
Dado que estoy en Mercado Pago
Cuando intento pagar con tarjeta sin fondos
Entonces deberia ver error "Fondos insuficientes"
Y deberia poder reintentar con otra tarjeta
Y el turno deberia seguir en estado "Coordinado"
Escenario: Usuario cancela el pago
Dado que estoy en Mercado Pago
Cuando hago click en "Volver al sitio"
Entonces deberia volver a la plataforma
Y deberia ver mensaje "El pago fue cancelado"
Y deberia ver boton "Reintentar pago"
Y el turno deberia seguir en estado "Coordinado"
Escenario: Cierre de browser durante pago
Dado que estoy en Mercado Pago
Y cierro el navegador accidentalmente
Cuando vuelvo a la plataforma
Y voy a "Mis turnos"
Entonces deberia poder ver el estado real del pago
# Si se proceso: Pagado. Si no: Coordinado con opcion de pagar
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Link de pago expirado
Dado que recibi el link de pago hace mas de 24 horas
Cuando hago click en el link
Entonces deberia ver "Este link ha expirado"
Y deberia ver "Contacta a soporte para generar uno nuevo"
Escenario: Intento pagar turno ya pagado
Dado que mi turno ya esta en estado "Pagado"
Cuando accedo al link de pago
Entonces deberia ver "Este turno ya fue pagado"
Y deberia ver boton "Ver detalle del turno"
Escenario: Precio cambio desde la coordinacion
# Caso muy raro pero posible
Dado que el precio del servicio aumento desde que se coordino
Cuando voy a pagar
Entonces deberia ver el precio original acordado
# El precio se congela al momento de coordinacion
# ============================================
# INTEGRACION CON WEBHOOK
# ============================================
Regla: El estado del turno se actualiza via webhook de Mercado Pago
Escenario: Webhook confirma pago aprobado
Dado que el usuario completo el pago en Mercado Pago
Cuando Mercado Pago envia webhook con status "approved"
Entonces el turno deberia cambiar a estado "Pagado"
Y el veterinario deberia recibir notificacion
Y el usuario deberia recibir email de confirmacion
Escenario: Webhook informa pago pendiente
Dado que el usuario pago con transferencia bancaria
Cuando Mercado Pago envia webhook con status "pending"
Entonces el turno deberia quedarse en "Coordinado"
Y deberia registrarse el pago pendiente
Y el usuario deberia recibir email "Esperando acreditacion"
Escenario: Webhook falla pero pago se proceso
# Caso de error que requiere intervencion manual
Dado que el usuario pago exitosamente
Pero el webhook fallo por error de red
Entonces el turno seguira en "Coordinado"
Y el equipo de ops deberia recibir alerta
Y deberian poder actualizar manualmente

View File

@@ -0,0 +1,148 @@
# language: es
# Fuente: album/book/ops-templates/pet-owner/05-historial-medico.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_visits.py
# Tests Frontend: npx playwright test medical-history.spec.ts
Característica: Ver historial medico
Como dueno de mascota
Quiero ver el historial medico de mis mascotas
Para tener registro de sus visitas y tratamientos
Antecedentes:
Dado que estoy logueado como dueno de mascota
Y tengo una mascota "Luna" con visitas completadas
# ============================================
# ACCESO AL HISTORIAL
# ============================================
Escenario: Acceder al historial desde mascotas
Dado que estoy en "Mis mascotas"
Cuando hago click en "Luna"
Y voy a la seccion "Historial de visitas"
Entonces deberia ver lista de visitas de Luna
Escenario: Acceder al historial desde turnos
Dado que estoy en "Mis turnos"
Y filtro por "Completados"
Cuando hago click en un turno de Luna
Y hago click en "Ver informe medico"
Entonces deberia ver el informe de esa visita
# ============================================
# VISUALIZACION DE VISITAS
# ============================================
Escenario: Ver lista de visitas ordenadas
Dado que Luna tiene visitas en las siguientes fechas:
| fecha |
| 2024-01-15 |
| 2023-11-20 |
| 2023-06-10 |
Cuando veo el historial de Luna
Entonces deberia ver las visitas ordenadas de mas reciente a mas antigua
Y la primera deberia ser del "15 de enero 2024"
Escenario: Ver detalle completo de informe
Cuando hago click en una visita completada
Entonces deberia ver los siguientes datos:
| seccion | contenido |
| Informacion | Fecha, veterinario, servicios |
| Examen fisico | Peso, temperatura, FC, obs |
| Diagnostico | Descripcion del diagnostico |
| Tratamiento | Plan de tratamiento |
| Medicamentos | Lista con dosis y frecuencia |
| Estudios | Estudios solicitados y estado |
| Seguimiento | Recomendaciones, proximo control |
Escenario: Ver informe con medicamentos recetados
Dado que la visita incluye medicamentos:
"""
1. Amoxicilina 250mg - 1 comprimido cada 12hs por 7 dias
2. Meloxicam 1.5mg - 1 comprimido por dia por 3 dias
"""
Cuando veo el informe
Entonces deberia ver la lista de medicamentos
Y cada medicamento deberia mostrar:
| campo |
| Nombre |
| Dosis |
| Frecuencia |
| Duracion |
# ============================================
# DESCARGA Y COMPARTIR
# ============================================
Escenario: Descargar informe como PDF
Dado que estoy viendo un informe medico
Cuando hago click en "Descargar PDF"
Entonces deberia descargarse un archivo PDF
Y el PDF deberia contener toda la informacion del informe
Y deberia tener el logo de Amar Mascotas
Escenario: Imprimir informe
Dado que estoy viendo un informe medico
Cuando hago click en "Imprimir"
Entonces deberia abrirse el dialogo de impresion
Y el formato deberia ser optimizado para impresion
# ============================================
# CASOS ESPECIALES
# ============================================
Escenario: Visita completada sin informe cargado
# El vet no cargo el informe todavia
Dado que Luna tiene una visita marcada como "Completada"
Pero el veterinario no cargo el informe aun
Cuando intento ver el informe
Entonces deberia ver mensaje "Informe pendiente"
Y deberia ver "El veterinario esta completando el informe"
Escenario: Informe con estudios pendientes
Dado que el informe solicita estudios de laboratorio
Y los resultados aun no estan disponibles
Cuando veo el informe
Entonces deberia ver seccion "Estudios solicitados"
Y deberia ver estado "Pendiente de resultados"
Y deberia ver nota "Se notificara cuando esten listos"
Escenario: Mascota con multiples visitas el mismo dia
# Raro pero posible: consulta de urgencia + seguimiento
Dado que Luna tuvo 2 visitas el 15 de enero
Cuando veo el historial
Entonces deberia ver ambas visitas listadas
Y deberian estar diferenciadas por hora
# ============================================
# PERMISOS Y PRIVACIDAD
# ============================================
Regla: Solo el dueno puede ver el historial de su mascota
Escenario: Dueno ve historial de su mascota
Dado que soy dueno de Luna
Cuando accedo al historial de Luna
Entonces deberia poder verlo completo
Escenario: No puedo ver historial de mascota ajena
Dado que existe mascota "Rocky" de otro dueno
Cuando intento acceder al historial de Rocky
Entonces deberia ver error "No tienes acceso"
# 403 Forbidden
# ============================================
# BUSQUEDA Y FILTROS
# ============================================
Escenario: Filtrar historial por tipo de servicio
Dado que Luna tiene visitas de vacunacion y consulta
Cuando filtro por "Vacunacion"
Entonces solo deberia ver visitas de vacunacion
Escenario: Buscar en historial por fecha
Cuando busco visitas del "2023"
Entonces solo deberia ver visitas del 2023
Y no deberia ver visitas del 2024