diff --git a/backend/src/main/java/ch/puzzle/pcts/repository/MemberRepository.java b/backend/src/main/java/ch/puzzle/pcts/repository/MemberRepository.java index b767f9127..c419dfbbf 100644 --- a/backend/src/main/java/ch/puzzle/pcts/repository/MemberRepository.java +++ b/backend/src/main/java/ch/puzzle/pcts/repository/MemberRepository.java @@ -2,15 +2,19 @@ import ch.puzzle.pcts.model.member.Member; import java.util.Optional; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface MemberRepository extends SoftDeleteRepository { Optional findByPtimeIdAndIdNotAndPtimeIdNotNull(Long ptimeId, Long id); + @Query("SELECT m FROM Member m WHERE m.deletedAt IS NULL AND m.ptimeId = :ptimeId") Optional findByPtimeId(Long ptimeId); + @Query("SELECT m FROM Member m WHERE m.deletedAt IS NULL AND m.abbreviation = :abbreviation") Optional findByAbbreviation(String abbreviation); + @Query("SELECT m FROM Member m WHERE m.deletedAt IS NULL AND m.ldapName = :ldapName") Optional findMemberByLdapName(String ldapName); } diff --git a/backend/src/test/java/ch/puzzle/pcts/service/persistence/MemberPersistenceServiceIT.java b/backend/src/test/java/ch/puzzle/pcts/service/persistence/MemberPersistenceServiceIT.java index 922c74c90..e3e65bd13 100644 --- a/backend/src/test/java/ch/puzzle/pcts/service/persistence/MemberPersistenceServiceIT.java +++ b/backend/src/test/java/ch/puzzle/pcts/service/persistence/MemberPersistenceServiceIT.java @@ -82,4 +82,36 @@ void shouldReturnEmptyWhenLdapNameDoesNotExist() { assertTrue(result.isEmpty()); } + + @DisplayName("Should not return member by id when member is deleted") + @Test + void shouldNotReturnMemberByIdWhenIsDeleted() { + Optional result = persistenceService.findById(DELETED_MEMBER_4.getId()); + + assertTrue(result.isEmpty()); + } + + @DisplayName("Should not return member by LDAP name when member is deleted") + @Test + void shouldNotReturnMemberByLdapNameWhenIsDeleted() { + Optional result = persistenceService.findByLdapName(DELETED_MEMBER_4.getLdapName()); + + assertTrue(result.isEmpty()); + } + + @DisplayName("Should not return member by ptimeId when member is deleted") + @Test + void shouldNotReturnMemberByPtimeIdWhenIsDeleted() { + Optional result = persistenceService.findByPtimeId(DELETED_MEMBER_4.getPtimeId()); + + assertTrue(result.isEmpty()); + } + + @DisplayName("Should not return member by abbreviation when member is deleted") + @Test + void shouldNotReturnMemberByAbbreviationWhenIsDeleted() { + Optional result = persistenceService.findByAbbreviation(DELETED_MEMBER_4.getAbbreviation()); + + assertTrue(result.isEmpty()); + } } diff --git a/backend/src/test/java/ch/puzzle/pcts/util/TestDataModels.java b/backend/src/test/java/ch/puzzle/pcts/util/TestDataModels.java index c5a54bdb9..f045a7036 100644 --- a/backend/src/test/java/ch/puzzle/pcts/util/TestDataModels.java +++ b/backend/src/test/java/ch/puzzle/pcts/util/TestDataModels.java @@ -135,6 +135,22 @@ private TestDataModels() { .withSyncErrorCount(0) .build(); + public static final Member DELETED_MEMBER_4 = Member.Builder + .builder() + .withId(DELETED_MEMBER_4_ID) + .withFirstName("Member 4") + .withLastName("Test") + .withLdapName("mtest4") + .withEmploymentState(EmploymentState.MEMBER) + .withAbbreviation("M4") + .withDateOfHire(LocalDate.of(2020, 6, 1)) + .withBirthDate(LocalDate.of(1998, 3, 3)) + .withOrganisationUnit(ORG_UNIT_2) + .withPtimeId(4L) + .withLastSuccessfulSync(LocalDateTime.of(2025, 12, 1, 1, 1)) + .withSyncErrorCount(0) + .build(); + public static final Member MEMBER_5 = Member.Builder .builder() .withId(MEMBER_5_DELETED_CERT_ID)