forked from pierront/mylibrary-template
validitor
This commit is contained in:
+184
@@ -0,0 +1,184 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.avis.repository;
|
||||||
|
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.avis.entity.Avis;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class AvisRepositoryTest {
|
||||||
|
|
||||||
|
private AvisRepository repository;
|
||||||
|
private Avis avis1;
|
||||||
|
private Avis avis2;
|
||||||
|
private UUID clientId1;
|
||||||
|
private UUID livreId1;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
repository = new AvisRepository();
|
||||||
|
clientId1 = UUID.randomUUID();
|
||||||
|
livreId1 = UUID.randomUUID();
|
||||||
|
|
||||||
|
avis1 = Avis.builder()
|
||||||
|
.clientId(clientId1)
|
||||||
|
.livreId(livreId1)
|
||||||
|
.note(5)
|
||||||
|
.commentaire("Excellent livre !")
|
||||||
|
.dateAchat(LocalDate.of(2024, 1, 15))
|
||||||
|
.build();
|
||||||
|
avis1.setRandomUUID();
|
||||||
|
|
||||||
|
avis2 = Avis.builder()
|
||||||
|
.clientId(UUID.randomUUID())
|
||||||
|
.livreId(livreId1)
|
||||||
|
.note(3)
|
||||||
|
.commentaire("Pas mal")
|
||||||
|
.dateAchat(LocalDate.of(2024, 2, 10))
|
||||||
|
.build();
|
||||||
|
avis2.setRandomUUID();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("New repository should be empty")
|
||||||
|
void testNewRepositoryIsEmpty() {
|
||||||
|
assertTrue(repository.findAll().isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("Save operations")
|
||||||
|
class SaveOperations {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Save should add a new avis")
|
||||||
|
void testSaveNewAvis() {
|
||||||
|
Avis saved = repository.save(avis1);
|
||||||
|
|
||||||
|
assertEquals(1, repository.findAll().size());
|
||||||
|
assertEquals(avis1.getId(), saved.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Save should update existing avis with same ID")
|
||||||
|
void testSaveUpdatesExistingAvis() {
|
||||||
|
repository.save(avis1);
|
||||||
|
UUID id = avis1.getId();
|
||||||
|
|
||||||
|
Avis updated = Avis.builder()
|
||||||
|
.id(id)
|
||||||
|
.clientId(clientId1)
|
||||||
|
.livreId(livreId1)
|
||||||
|
.note(3)
|
||||||
|
.commentaire("Finalement moyen")
|
||||||
|
.dateAchat(LocalDate.of(2024, 1, 15))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Avis saved = repository.save(updated);
|
||||||
|
|
||||||
|
assertEquals(1, repository.findAll().size());
|
||||||
|
assertEquals(id, saved.getId());
|
||||||
|
assertEquals(3, saved.getNote());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Save multiple avis should add all of them")
|
||||||
|
void testSaveMultipleAvis() {
|
||||||
|
repository.save(avis1);
|
||||||
|
repository.save(avis2);
|
||||||
|
|
||||||
|
assertEquals(2, repository.findAll().size());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("Find operations")
|
||||||
|
class FindOperations {
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUpAvis() {
|
||||||
|
repository.save(avis1);
|
||||||
|
repository.save(avis2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("FindById should return avis with matching ID")
|
||||||
|
void testFindById() {
|
||||||
|
Optional<Avis> found = repository.findById(avis1.getId());
|
||||||
|
|
||||||
|
assertTrue(found.isPresent());
|
||||||
|
assertEquals(avis1.getId(), found.get().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("FindById should return empty Optional when ID doesn't exist")
|
||||||
|
void testFindByIdNotFound() {
|
||||||
|
Optional<Avis> found = repository.findById(UUID.randomUUID());
|
||||||
|
|
||||||
|
assertTrue(found.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("FindByLivreId should return all avis for a book")
|
||||||
|
void testFindByLivreId() {
|
||||||
|
List<Avis> found = repository.findByLivreId(livreId1);
|
||||||
|
|
||||||
|
assertEquals(2, found.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("FindByClientId should return all avis for a client")
|
||||||
|
void testFindByClientId() {
|
||||||
|
List<Avis> found = repository.findByClientId(clientId1);
|
||||||
|
|
||||||
|
assertEquals(1, found.size());
|
||||||
|
assertEquals(avis1.getId(), found.getFirst().getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("ExistsById should return true when ID exists")
|
||||||
|
void testExistsByIdExists() {
|
||||||
|
assertTrue(repository.existsById(avis1.getId()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("ExistsById should return false when ID doesn't exist")
|
||||||
|
void testExistsByIdNotExists() {
|
||||||
|
assertFalse(repository.existsById(UUID.randomUUID()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("Delete operations")
|
||||||
|
class DeleteOperations {
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUpAvis() {
|
||||||
|
repository.save(avis1);
|
||||||
|
repository.save(avis2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Delete should remove the specified avis")
|
||||||
|
void testDelete() {
|
||||||
|
repository.delete(avis1);
|
||||||
|
|
||||||
|
assertEquals(1, repository.findAll().size());
|
||||||
|
assertFalse(repository.findAll().contains(avis1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("DeleteAll should remove all avis")
|
||||||
|
void testDeleteAll() {
|
||||||
|
repository.deleteAll();
|
||||||
|
|
||||||
|
assertTrue(repository.findAll().isEmpty());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+131
@@ -0,0 +1,131 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.avis.validator;
|
||||||
|
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.avis.AvisInfo;
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.avis.exception.NotValidAvisException;
|
||||||
|
import org.junit.jupiter.api.DisplayName;
|
||||||
|
import org.junit.jupiter.api.Nested;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.ValueSource;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class AvisValidatorTest {
|
||||||
|
|
||||||
|
private final UUID clientId = UUID.randomUUID();
|
||||||
|
private final UUID livreId = UUID.randomUUID();
|
||||||
|
|
||||||
|
private AvisInfo validAvis() {
|
||||||
|
return new AvisInfo(clientId, livreId, 5, "Excellent livre !", LocalDate.of(2024, 1, 15));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Should validate avis with valid data")
|
||||||
|
void testValidateValidAvis() {
|
||||||
|
assertDoesNotThrow(() -> AvisValidator.validate(validAvis()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("ClientId validation tests")
|
||||||
|
class ClientIdValidationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Should throw exception when clientId is null")
|
||||||
|
void testValidateNullClientId() {
|
||||||
|
AvisInfo avis = new AvisInfo(null, livreId, 5, "Commentaire", LocalDate.now());
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.CLIENT_ID_CANNOT_BE_NULL, exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("LivreId validation tests")
|
||||||
|
class LivreIdValidationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Should throw exception when livreId is null")
|
||||||
|
void testValidateNullLivreId() {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, null, 5, "Commentaire", LocalDate.now());
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.LIVRE_ID_CANNOT_BE_NULL, exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("Note validation tests")
|
||||||
|
class NoteValidationTests {
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(ints = {1, 2, 3, 4, 5})
|
||||||
|
@DisplayName("Should validate when note is between 1 and 5")
|
||||||
|
void testValidateValidNote(int validNote) {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, livreId, validNote, "Commentaire", LocalDate.now());
|
||||||
|
assertDoesNotThrow(() -> AvisValidator.validate(avis));
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(ints = {0, -1, 6, 10})
|
||||||
|
@DisplayName("Should throw exception when note is out of range")
|
||||||
|
void testValidateInvalidNote(int invalidNote) {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, livreId, invalidNote, "Commentaire", LocalDate.now());
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.NOTE_MUST_BE_BETWEEN_1_AND_5, exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("Commentaire validation tests")
|
||||||
|
class CommentaireValidationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Should throw exception when commentaire is blank")
|
||||||
|
void testValidateBlankCommentaire() {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, livreId, 5, "", LocalDate.now());
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.COMMENTAIRE_CANNOT_BE_BLANK, exception.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(strings = {" ", " ", "\t", "\n"})
|
||||||
|
@DisplayName("Should throw exception when commentaire contains only whitespace")
|
||||||
|
void testValidateWhitespaceCommentaire(String whitespace) {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, livreId, 5, whitespace, LocalDate.now());
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.COMMENTAIRE_CANNOT_BE_BLANK, exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nested
|
||||||
|
@DisplayName("DateAchat validation tests")
|
||||||
|
class DateAchatValidationTests {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Should throw exception when dateAchat is null")
|
||||||
|
void testValidateNullDateAchat() {
|
||||||
|
AvisInfo avis = new AvisInfo(clientId, livreId, 5, "Commentaire", null);
|
||||||
|
|
||||||
|
NotValidAvisException exception = assertThrows(NotValidAvisException.class,
|
||||||
|
() -> AvisValidator.validate(avis));
|
||||||
|
|
||||||
|
assertEquals(AvisValidator.DATE_ACHAT_CANNOT_BE_NULL, exception.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user