Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ val cglibVersion by extra("3.3.0")
val mockitoKotlinVersion by extra("6.3.0")

group = "com.josdem.vetlog"
version = "3.6.8"
version = "3.7.0"

configurations {
compileOnly {
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/com/josdem/vetlog/helper/VaccinationHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ public class VaccinationHelper {
private static final String C6CV_VACCINE = "C6CV";
private static final String TRICAT_VACCINE = "TRICAT";
private static final String TRICAT_BOOST_VACCINE = "TRICAT_BOOST";
private static final String FELV_VACCINE = "FeLV";

private static final Map<String, String> NEXT_VACCINE = Map.of(
PUPPY_VACCINE, C4CV_VACCINE,
Expand Down Expand Up @@ -71,6 +72,9 @@ public void validateRabiesVaccine(List<Vaccination> previousVaccines, List<Vacci
&& previousVaccine.getStatus() == VaccinationStatus.PENDING)
&& isSpecificCriteriaSatisfiedForApplyingNextVaccine(appliedName, RABIES_VACCINE, pet)) {
saveNewVaccine(RABIES_VACCINE, LocalDate.now().plus(NEXT_RABIES_VACCINE_OFFSET.get(appliedName)), pet);
if (petNeedsLeukemiaVaccine(pet)) {
saveNewVaccine(FELV_VACCINE, LocalDate.now().plusDays(21), pet);
}
Comment thread
josdem marked this conversation as resolved.
}
}
}
Expand Down Expand Up @@ -111,6 +115,15 @@ private boolean isSpecificCriteriaSatisfiedForApplyingNextVaccine(String applied
return true;
}

public boolean petNeedsLeukemiaVaccine(Pet pet) {
return Optional.ofNullable(pet)
.map(Pet::getBreed)
.map(Breed::getType)
.filter(PetType.CAT::equals)
.flatMap(goingOutOften -> Optional.ofNullable(pet.getGoingOutOften()))
.orElse(false);
}
Comment thread
josdem marked this conversation as resolved.
Outdated

private void saveNewVaccine(String name, LocalDate date, Pet pet) {
Vaccination future = new Vaccination(null, name, date, VaccinationStatus.NEW, pet);
vaccinationRepository.save(future);
Expand Down
46 changes: 45 additions & 1 deletion src/test/java/com/josdem/vetlog/helper/VaccinationHelperTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class VaccinationHelperTest {
}

@Test
fun `should not create TRICAT_BOOST 45 days later when TRICAT applied and pet is cat not aged 9 to 16 weeks`(testInfo: TestInfo) {
fun `should not create TRICAT_BOOST 21 days later when TRICAT applied and pet is cat not aged 9 to 16 weeks`(testInfo: TestInfo) {
log.info(testInfo.displayName)
val pet = Pet()
val breed = Breed()
Expand Down Expand Up @@ -291,4 +291,48 @@ class VaccinationHelperTest {

verify(vaccinationRepository).save(any())
}

@Test
fun `should update tricat_boost vaccination status to APPLIED`(testInfo: TestInfo) {
log.info(testInfo.displayName)
val previousVaccines = Vaccination(3L, "TRICAT_BOOST", LocalDate.now(), VaccinationStatus.PENDING, pet)
val newVaccines = Vaccination(3L, "TRICAT_BOOST", LocalDate.now(), VaccinationStatus.APPLIED, pet)
whenever(vaccinationRepository.findAllByPetId(1L)).thenReturn(listOf(previousVaccines))
vaccinationHelper.validateRabiesVaccine(listOf(previousVaccines), listOf(newVaccines), pet)
val expectedDate = LocalDate.now().plusDays(21)
verify(vaccinationRepository).save(
argThat { vaccination ->
vaccination.name == "Rabies" &&
vaccination.status == VaccinationStatus.NEW &&
vaccination.date == expectedDate &&
vaccination.pet == pet
},
)
}

@Test
fun `should create new FELV vaccine`(testInfo: TestInfo) {
log.info(testInfo.displayName)
val pet = Pet()
pet.id = 1L
pet.birthDate = LocalDate.now().minusWeeks(20)
pet.goingOutOften = true
pet.breed = Breed().apply { type = PetType.CAT }
val previousVaccines = Vaccination(1L, "TRICAT", LocalDate.now(), VaccinationStatus.PENDING, pet)
val newVaccines = Vaccination(1L, "TRICAT", LocalDate.now(), VaccinationStatus.APPLIED, pet)

val expectedDate = LocalDate.now().plusDays(21)
whenever { vaccinationRepository.findAllByPetId(1L) }.thenReturn(listOf(previousVaccines))
Comment thread
josdem marked this conversation as resolved.
Outdated

vaccinationHelper.validateRabiesVaccine(listOf(previousVaccines), listOf(newVaccines), pet)

verify(vaccinationRepository).save(
argThat { vaccination ->
vaccination.name == "FeLV" &&
vaccination.status == VaccinationStatus.NEW &&
vaccination.date == expectedDate &&
vaccination.pet == pet
},
)
}
}
Loading