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/EntitySmokeIT.java similarity index 79% 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 d12e94c..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 -@Import(DataaccessConfiguration.class) -public class EntitySmokeTestIT { +@DataJpaTest(bootstrapMode = BootstrapMode.LAZY) +public class EntitySmokeIT { @PersistenceContext private EntityManager em; 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;