From 31da82ada77c230170772290d58044ca7c5ab619 Mon Sep 17 00:00:00 2001 From: MichalLuzyna Date: Sun, 6 Apr 2025 21:19:21 +0200 Subject: [PATCH 1/2] Review changes - sync with documentation --- .../repository/AppointmentRepository.java | 1 + .../dataaccess/repository/BaseJpaRepository.java | 4 ++-- .../repository/TreatmentRepository.java | 2 +- .../dataaccess/repository/UserRepository.java | 2 +- .../common/BaseDataJpaTest.java | 11 +++++++++++ .../dataaccess/entity/EntitySmokeTestIT.java | 4 ++-- ...ryTestIT.java => AppointmentRepositoryIT.java} | 12 +++--------- ...ositoryTestIT.java => ClientRepositoryIT.java} | 12 +++--------- ...oryTestIT.java => SpecialistRepositoryIT.java} | 11 ++--------- ...toryTestIT.java => TreatmentRepositoryIT.java} | 15 ++++----------- ...epositoryTestIT.java => UserRepositoryIT.java} | 11 ++--------- 11 files changed, 32 insertions(+), 53 deletions(-) create mode 100644 src/test/java/com/capgemini/training/appointmentbooking/common/BaseDataJpaTest.java rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/{AppointmentRepositoryTestIT.java => AppointmentRepositoryIT.java} (93%) rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/{ClientRepositoryTestIT.java => ClientRepositoryIT.java} (67%) rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/{SpecialistRepositoryTestIT.java => SpecialistRepositoryIT.java} (77%) rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/{TreatmentRepositoryTestIT.java => TreatmentRepositoryIT.java} (91%) rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/{UserRepositoryTestIT.java => UserRepositoryIT.java} (73%) diff --git a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepository.java b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepository.java index 53927f1..9426b3c 100644 --- a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepository.java +++ b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepository.java @@ -77,6 +77,7 @@ SELECT CASE WHEN COUNT(a) > 0 THEN TRUE ELSE FALSE END JOIN a.treatment t WHERE t.specialist.id = :specialistId AND a.dateTime = :date + AND a.status <> com.capgemini.training.appointmentbooking.common.datatype.AppointmentStatus.CANCELLED """) boolean hasConflictingAppointmentBySpecialistIdAndDateTime(@Param("specialistId") Long specialistId, @Param("date") Instant date); diff --git a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/BaseJpaRepository.java b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/BaseJpaRepository.java index 1720af1..6b37c38 100644 --- a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/BaseJpaRepository.java +++ b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/BaseJpaRepository.java @@ -1,11 +1,11 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; import jakarta.persistence.EntityManager; -import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.NoRepositoryBean; @NoRepositoryBean -public interface BaseJpaRepository extends JpaRepositoryImplementation { +public interface BaseJpaRepository extends JpaRepository { EntityManager getEntityManager(); diff --git a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepository.java b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepository.java index 8479256..5eab402 100644 --- a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepository.java +++ b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepository.java @@ -14,7 +14,7 @@ @Repository public interface TreatmentRepository extends BaseJpaRepository { - List findAllByName(String name); + List findAllByNameStartingWithIgnoringCase(String name); List findByNameNamedQuery(String name); diff --git a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepository.java b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepository.java index 75d3412..52b8b87 100644 --- a/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepository.java +++ b/src/main/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepository.java @@ -15,7 +15,6 @@ @Repository public interface UserRepository extends BaseJpaRepository { - default List findByCriteria(UserCriteria criteria) { Objects.requireNonNull(criteria, "criteria must not be null"); @@ -41,4 +40,5 @@ default List findByCriteria(UserCriteria criteria) { return entityManager.createQuery(cq).getResultList(); } + } diff --git a/src/test/java/com/capgemini/training/appointmentbooking/common/BaseDataJpaTest.java b/src/test/java/com/capgemini/training/appointmentbooking/common/BaseDataJpaTest.java new file mode 100644 index 0000000..5eaeaff --- /dev/null +++ b/src/test/java/com/capgemini/training/appointmentbooking/common/BaseDataJpaTest.java @@ -0,0 +1,11 @@ +package com.capgemini.training.appointmentbooking.common; + +import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; +import org.springframework.context.annotation.Import; +import org.springframework.transaction.annotation.Transactional; + +@DataJpaTest +@Import(DataaccessConfiguration.class) +public class BaseDataJpaTest extends BaseTest{ +} diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java index d12e94c..23fb5e2 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java @@ -13,9 +13,9 @@ import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; +import org.springframework.data.repository.config.BootstrapMode; -@DataJpaTest -@Import(DataaccessConfiguration.class) +@DataJpaTest(bootstrapMode = BootstrapMode.LAZY) public class EntitySmokeTestIT { @PersistenceContext diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryIT.java similarity index 93% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryIT.java index becab6f..b1aa168 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/AppointmentRepositoryIT.java @@ -1,8 +1,7 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; -import com.capgemini.training.appointmentbooking.common.BaseTest; +import com.capgemini.training.appointmentbooking.common.BaseDataJpaTest; import com.capgemini.training.appointmentbooking.common.datatype.AppointmentStatus; -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; import com.capgemini.training.appointmentbooking.dataaccess.entity.AppointmentEntity; import com.capgemini.training.appointmentbooking.dataaccess.entity.ClientEntity; import com.capgemini.training.appointmentbooking.dataaccess.entity.SpecialistEntity; @@ -10,19 +9,14 @@ import com.capgemini.training.appointmentbooking.dataaccess.repository.criteria.AppointmentCriteria; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.transaction.annotation.Transactional; import java.time.Instant; import java.util.List; import java.util.Optional; -@Transactional -@DataJpaTest -@Import(DataaccessConfiguration.class) -public class AppointmentRepositoryTestIT extends BaseTest { + +public class AppointmentRepositoryIT extends BaseDataJpaTest { @Inject private AppointmentRepository appointmentRepository; diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryIT.java similarity index 67% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryIT.java index ce34fba..4a2538f 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/ClientRepositoryIT.java @@ -1,21 +1,15 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; -import com.capgemini.training.appointmentbooking.common.BaseTest; -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; +import com.capgemini.training.appointmentbooking.common.BaseDataJpaTest; import com.capgemini.training.appointmentbooking.dataaccess.entity.ClientEntity; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.transaction.annotation.Transactional; import java.util.List; -@Transactional -@DataJpaTest -@Import(DataaccessConfiguration.class) -public class ClientRepositoryTestIT extends BaseTest { + +public class ClientRepositoryIT extends BaseDataJpaTest { @Inject private ClientRepository clientRepository; diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryIT.java similarity index 77% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryIT.java index 6fdd6e9..c1ba94f 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/SpecialistRepositoryIT.java @@ -1,22 +1,15 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; -import com.capgemini.training.appointmentbooking.common.BaseTest; +import com.capgemini.training.appointmentbooking.common.BaseDataJpaTest; import com.capgemini.training.appointmentbooking.common.datatype.Specialization; -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; import com.capgemini.training.appointmentbooking.dataaccess.entity.SpecialistEntity; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.transaction.annotation.Transactional; import java.util.List; -@Transactional -@DataJpaTest -@Import(DataaccessConfiguration.class) -public class SpecialistRepositoryTestIT extends BaseTest { +public class SpecialistRepositoryIT extends BaseDataJpaTest { @Inject private SpecialistRepository specialistRepository; diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryIT.java similarity index 91% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryIT.java index e69e804..f2ddbf9 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/TreatmentRepositoryIT.java @@ -1,25 +1,18 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; -import com.capgemini.training.appointmentbooking.common.BaseTest; +import com.capgemini.training.appointmentbooking.common.BaseDataJpaTest; import com.capgemini.training.appointmentbooking.common.datatype.Specialization; -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; import com.capgemini.training.appointmentbooking.dataaccess.entity.SpecialistEntity; import com.capgemini.training.appointmentbooking.dataaccess.entity.TreatmentEntity; import com.capgemini.training.appointmentbooking.dataaccess.repository.criteria.TreatmentCriteria; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; -@Transactional -@DataJpaTest -@Import(DataaccessConfiguration.class) -public class TreatmentRepositoryTestIT extends BaseTest { +public class TreatmentRepositoryIT extends BaseDataJpaTest { @Inject private TreatmentRepository treatmentRepository; @@ -30,10 +23,10 @@ public class TreatmentRepositoryTestIT extends BaseTest { @Test void shouldFindTreatmentsByName() { // given - String treatmentName = "Konsultacja dentystyczna"; + String treatmentName = "konsUltacja de"; // when - List result = treatmentRepository.findAllByName(treatmentName); + List result = treatmentRepository.findAllByNameStartingWithIgnoringCase(treatmentName); // then assertThat(result).hasSize(1); diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryIT.java similarity index 73% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryIT.java index f00e8f1..561ed8e 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/repository/UserRepositoryIT.java @@ -1,22 +1,15 @@ package com.capgemini.training.appointmentbooking.dataaccess.repository; -import com.capgemini.training.appointmentbooking.common.BaseTest; -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; +import com.capgemini.training.appointmentbooking.common.BaseDataJpaTest; import com.capgemini.training.appointmentbooking.dataaccess.entity.UserEntity; import com.capgemini.training.appointmentbooking.dataaccess.repository.criteria.UserCriteria; import jakarta.inject.Inject; import org.junit.jupiter.api.Test; -import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; -import org.springframework.transaction.annotation.Transactional; import java.util.List; -@Transactional -@DataJpaTest -@Import(DataaccessConfiguration.class) -public class UserRepositoryTestIT extends BaseTest { +public class UserRepositoryIT extends BaseDataJpaTest { @Inject private UserRepository userRepository; From 896eab55a1e8a86a54ccfc5695044d631746dc0a Mon Sep 17 00:00:00 2001 From: MichalLuzyna Date: Tue, 8 Apr 2025 14:00:14 +0200 Subject: [PATCH 2/2] name correction for EntitySmoke integration test --- .../entity/{EntitySmokeTestIT.java => EntitySmokeIT.java} | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) rename src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/{EntitySmokeTestIT.java => EntitySmokeIT.java} (84%) diff --git a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeIT.java similarity index 84% rename from src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java rename to src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeIT.java index 23fb5e2..87c969c 100644 --- a/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeTestIT.java +++ b/src/test/java/com/capgemini/training/appointmentbooking/dataaccess/entity/EntitySmokeIT.java @@ -7,16 +7,13 @@ import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest; -import org.springframework.context.annotation.Import; - -import com.capgemini.training.appointmentbooking.dataaccess.config.DataaccessConfiguration; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.data.repository.config.BootstrapMode; @DataJpaTest(bootstrapMode = BootstrapMode.LAZY) -public class EntitySmokeTestIT { +public class EntitySmokeIT { @PersistenceContext private EntityManager em;