Desarrollar la disponibilidad de libros en Python
Esta es una función nueva en una aplicación existente, no una solicitud para regenerar toda la biblioteca. Sigue el cambio desde la entrada del menú hasta el resultado observado.
Resumen del laboratorio

Ilustración conceptual original (SVG)
| De un vistazo | Tu ruta |
|---|---|
| Nivel y tiempo | 200; 70 minutos (estimación de facilitación) |
| Acción inicial | Usa fechas controladas y prueba una copia disponible y una prestada. |
| Materiales del aprendiz | Descarga 03-python.zip |
| Espacio de trabajo | Abre la raíz del kit extraído; ejecuta la baseline desde library relativa a esa raíz |
| Comprobación inicial esperada | Las pruebas unittest existentes se descubren y pasan. |
| Ayuda de configuración | Descarga, extrae, Git local y GitHub opcional |
[!NOTE] Un helper que pasa sigue incompleto hasta que el menú de consola llega a él.
Conceptos · Primera tarea · Lista de evidencias · Restablecer
Objetivos de aprendizaje
- Define la semántica de búsqueda y disponibilidad antes de implementar.
- Usa las interfaces y la raíz de importación reales de Python.
- Conecta una función probada con las acciones existentes de la consola.
Antes de empezar
Prepara 03-python usando la configuración común y abre
únicamente la copia. Ejecuta los siguientes comandos desde su directorio library. El
fixture de funciones incluido
usa datos JSON sintéticos.
Conceptos y casos de uso
La búsqueda normaliza la entrada para encontrar coincidencias, no necesariamente para almacenarla. La disponibilidad
pertenece a un book_item, no a todos los ejemplares de un book.
Un préstamo activo es aquel sin fecha de devolución; una fecha de vencimiento pasada no lo devuelve.
Escenario del ejercicio
El bibliotecario solicita búsqueda parcial de títulos y disponibilidad por ejemplar. Los nuevos préstamos, las reservas, las cuentas y los cambios de persistencia quedan fuera del alcance.
Tarea 1 - Inspeccionar el flujo de trabajo y la línea base
python -m unittest discover -s tests -p "test_*.py" -v
- Registra el descubrimiento de pruebas y los resultados.
- Lee
console/common_actions.py,console/console_app.py, las entidades y los métodos del repositorio JSON. - Solicita un recorrido de la búsqueda existente de usuarios y de los puntos de inserción propuestos para buscar libros. Verifica los nombres de métodos con este fixture de Python.
- Inspecciona cómo se vinculan los préstamos con
book_itemypatron.
Tarea 2 - Establecer el contrato
| ID | Caso | Comportamiento esperado |
|---|---|---|
| BOOK-1 | Mayúsculas y minúsculas mezcladas y espacios en los extremos | Coincidencia parcial normalizada definida |
| BOOK-2 | Entrada vacía | Solicitud de entrada o error explícito; ninguna alternativa silenciosa |
| BOOK-3 | Título inexistente | Mensaje de ausencia de resultados |
| BOOK-4 | Dos ejemplares, uno prestado | Disponibilidad separada para cada ejemplar |
| BOOK-5 | Préstamo histórico devuelto | No bloquea la disponibilidad |
| BOOK-6 | Préstamo vencido sin devolver | Sigue sin estar disponible |
Construye estos escenarios en pruebas con fechas controladas. Elige explícitamente el orden
de resultados. No afirmes que lower() y casefold() se comporten igual para todas
las cadenas Unicode; registra la normalización que elijas para la función.
Tarea 3 - Planificar antes de editar
Plan the book-availability feature in the current Python library. Reuse the
existing input loop and repository contracts. Map BOOK-1..6 to tests, distinguish
Book from BookItem, and keep search read-only. Do not implement loans/reservations.
Inspecciona el acceso a datos, las uniones de préstamos activos y la conexión con el menú. Un diseño que vincule un préstamo con un título en lugar de con un ejemplar no puede satisfacer BOOK-4.
Tarea 4 - Implementar y probar
- Escribe la prueba de regresión de dos ejemplares antes de implementar.
- Pide a Agent que implemente una parte revisada y que no realice limpiezas ajenas al alcance.
- Conecta la nueva acción con la solicitud de entrada, el mapeo de entradas y el despacho de acciones.
- Añade pruebas de límites y ejecuta toda la pequeña batería del fixture.
- Ejecuta
python console/main.pyy prueba la búsqueda manualmente. - Compara los archivos JSON antes y después de buscar; la búsqueda no debe persistir cambios.
- Trata temporalmente todas las fechas de vencimiento pasadas como devoluciones. Confirma que BOOK-6 falla y después restaura la implementación correcta.
Verifica tu trabajo
- El menú llega a la función.
- El comportamiento y el orden de búsqueda son explícitos.
- La disponibilidad se calcula para cada ejemplar físico.
- Se detecta una mutación negativa.
- Los préstamos, las membresías y las pruebas existentes permanecen sin cambios.
Solución de problemas
Ejecuta desde library para las importaciones. Distingue una respuesta sin resultados de un fallo
del cargador. Si todas las pruebas proporcionadas pasan antes de que exista la función, añade la prueba de regresión
que falta en lugar de suponer que cubren el comportamiento nuevo.
Práctica independiente
Añade un filtro de autor como una función especificada por separado. Conserva la normalización existente de títulos y declara cómo se comportan los filtros combinados.
Restablecimiento
Detén la consola, guarda la evidencia y restaura únicamente los archivos de la función y las pruebas que hayas nombrado en la copia desechable. No cambies los datos originales ni publiques un repositorio automáticamente.