Este es el código base para el ejercicio de Calendarios. Está diseñado para:
- Java 17.
⚠️ Si bien el proyecto no lo limita explícitamente, el comandomvn verify
no funcionará con versiones más antiguas de Java. - JUnit 5.
⚠️ La versión 5 de JUnit es la más nueva del framework y presenta algunas diferencias respecto a la versión "clásica" (JUnit 4). Para mayores detalles, ver: - Maven 3.3 o superior
Acá vas a encontrar el enunciado original de este ejercicio. Leelo atentamente y tratá de resolver en orden los requerimientos que plantea:
- Permitir que une usuarie tenga muchos calendarios
- Permitir que en cada calendario se agenden múltiples eventos
- Permitir que los eventos registren nombre, fecha y hora de inicio y fin, ubicación, invitades (otros usuaries)
- Permitir listar los próximos eventos entre dos fechas (para une usuarie)
- Permitir saber cuánto falta para un cierto calendarios.evento (por ejemplo, 15 horas)
- Permitir saber si dos eventos están solapado, y en tal caso, con qué otros eventos del calendario
- Permitir agendar eventos con repeticiones, con una frecuencia diaria, semanal, mensual o anual
- Permitir saber si le usuarie llega al evento más próximo a tiempo, tomando en cuenta la ubicación actual de le usuarie y destino.
- Permitir asignarle a un evento varios recordatorios, que se enviarán cuando falte un cierto tiempo
Mientras vas implementando el código que resuelve el problema, codificá casos de prueba que validen la solución. Ya te dejamos algunos para que completes y te sirvan como punto de partida, pero no son suficientes y deberás agregar los tuyos.
- No modificar las interfaces en el paquetes
calendarios.servicios
ni implementarlas. Representan servicios externos. - Para hacer las pruebas probablemente convenga mockearlas. Mockito está incluido en el proyecto. Recordar que cuentan con esta guía rápida
- Las clases
Usuario
,Evento
yCalendario
se proveen como punto de partida, pero pueden ser modificadas según consideres necesario. Se recomienda de todas formas apegarse a la interfaz mínima propuesta. - La clase
Ubicacion
se provee como implementación trivial de un par latitud-longitud. No es necesario modificarla, pero tampoco está prohibido. - La clase
Pending
está sólo para que el código que trae el proyecto por defecto compile. Podés borrarla una vez que termines. - Probablemente te convenga partir
CalendariosTest
en varias otras clases para que sea más sencillo escribir las pruebas. - Hay tests que están implementados completamente (pero no andan), otros que están implementados parcialmente y otros que tenés que implementar vos desde cero. En todos los casos podés modificarlos según consideres necesario pero no elimines los casos de prueba planteados, que están agrupados según los requerimientos del dominio.
- Intentá sacar el máximo provecho de la biblitoca de fechas de Java (
LocalDate
,LocalDateTime
,Duration
,ChronoUnit
,Period
, etc) - Intentá sacar el máximo provecho de la biblioteca de colecciones y Streams de Java
mvn test
mvn clean verify
Este comando hará lo siguiente:
- Ejecutará los tests
- Validará las convenciones de formato mediante checkstyle
- Detectará la presencia de (ciertos) code smells
- Validará la cobertura del proyecto
Para entregar el proyecto, crear un tag llamado entrega-final
. Es importante que antes de realizarlo se corra la validación
explicada en el punto anterior. Se recomienda hacerlo de la siguiente forma:
mvn clean verify && git tag entrega-final && git push origin HEAD --tags
- Tabular con dos espacios:
- Instalar y configurar Checkstyle:
- Instalar el plugin https://plugins.jetbrains.com/plugin/1065-checkstyle-idea:
- Configurarlo activando los Checks de Google y la versión de Checkstyle
== 8.35
:
- Usar fin de linea unix