Début de la feature avec des tests de base sur les variables #3

Open
Patrick FELIX-VIMALARATNAM wants to merge 19 commits from lebretonm/Projet_Pierront_Maxime_Marvin_Patrick:feature/RegisterNewBook into main
3 changed files with 126 additions and 7 deletions
Showing only changes of commit 7d11743c02 - Show all commits
@@ -0,0 +1,7 @@
package fr.iut_fbleau.but3.dev62.mylibrary.book.exception;
public class NotValidBookException extends RuntimeException {
public NotValidBookException(String message) {
super(message);
}
}
@@ -0,0 +1,111 @@
package fr.iut_fbleau.but3.dev62.mylibrary.book.validator;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDetails;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookSalesInfo;
import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException;
import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.NotValidCustomerException;
import java.time.LocalDate;
import java.util.ArrayList;
public class BookValidator {
public static final String ISBN_IS_NOT_VALID = "Isbn is not valid";
public static final String TITLE_CANNOT_BE_BLANK = "Title cannot be blank";
public static final String AUTHOR_CANNOT_BE_BLANK = "Author cannot be blank";
public static final String EDITOR_CANNOT_BE_BLANK = "Editor cannot be blank";
public static final String DATE_IS_NOT_VALID = "Date is not valid";
public static final String PRICE_IS_NOT_VALID = "Price is not valid";
public static final String STOCK_IS_NOT_VALID = "Stock is not valid";
public static final String CATEGORIES_IS_NOT_VALID = "Categories is not valid";
public static final String LANGUAGE_CANNOT_BE_BLANK = "Language cannot be blank";
private BookValidator() {
}
public static void validate(BookInfo newBook) throws NotValidCustomerException {
validateISBN(newBook);
validateTitle(newBook);
validateAuthor(newBook);
validateEditor(newBook);
validateDate(newBook);
}
public static void validate(BookSalesInfo newBook) throws NotValidCustomerException {
validatePrice(newBook);
validateStock(newBook);
}
public static void validate(BookDetails newBook) throws NotValidCustomerException {
validateCategories(newBook);
validateLanguage(newBook);
}
private static void validateISBN(BookInfo newBook) throws NotValidBookException {
if (newBook.isbn().isBlank()) {
throw new NotValidBookException(ISBN_IS_NOT_VALID);
} else if (newBook.isbn().length() != 13) {
throw new NotValidBookException(ISBN_IS_NOT_VALID);
}
}
private static void validateTitle(BookInfo newBook) throws NotValidBookException {
if (newBook.title().isBlank()) {
throw new NotValidBookException(TITLE_CANNOT_BE_BLANK);
}
}
private static void validateAuthor(BookInfo newBook) throws NotValidBookException {
if (newBook.author().isBlank()) {
throw new NotValidBookException(AUTHOR_CANNOT_BE_BLANK);
}
}
private static void validateEditor(BookInfo newBook) throws NotValidBookException {
if (newBook.editor().isBlank()) {
throw new NotValidBookException(EDITOR_CANNOT_BE_BLANK);
}
}
private static void validateDate(BookInfo newBook) throws NotValidBookException {
if (newBook.date().isAfter(LocalDate.now())) {
throw new NotValidBookException(DATE_IS_NOT_VALID);
}
}
private static void validatePrice(BookSalesInfo newBook) throws NotValidBookException {
if (newBook.getPrice() <= 0) {
throw new NotValidBookException(PRICE_IS_NOT_VALID);
}
}
private static void validateStock(BookSalesInfo newBook) throws NotValidBookException {
if (newBook.getStock() < 0) {
throw new NotValidBookException(STOCK_IS_NOT_VALID);
}
}
private static void validateCategories(BookDetails newBook) throws NotValidBookException {
if (newBook.getCategories().isEmpty()) {
throw new NotValidBookException(CATEGORIES_IS_NOT_VALID);
}else if (CategoriesNotBlank(newBook.getCategories())) {
throw new NotValidBookException(CATEGORIES_IS_NOT_VALID);
}
}
private static boolean CategoriesNotBlank(ArrayList<String> categories){
for (String categorie : categories) {
if (categorie.isBlank()) {
return true;
}
}
return false;
}
private static void validateLanguage(BookDetails newBook) throws NotValidBookException {
if (newBook.getLanguage().isBlank()) {
throw new NotValidBookException(LANGUAGE_CANNOT_BE_BLANK);
}
}
}
@@ -3,6 +3,7 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.validator;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDetails;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo;
import fr.iut_fbleau.but3.dev62.mylibrary.book.BookSalesInfo;
import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
@@ -62,13 +63,13 @@ public class BookValidatorTest {
@Test
@DisplayName("Should throw exception when isbn is blank")
void testValidateBlankTitle() {
void testValidateBlankISBN() {
LocalDate date = LocalDate.of(2026, 3, 24);
BookInfo bookWithBlankTitle = new BookInfo("", "La vie de Maxime", "Marvin Aubert", "Kioon", date);
BookInfo bookWithBlankISBN = new BookInfo("", "La vie de Maxime", "Marvin Aubert", "Kioon", date);
NotValidBookException exception = assertThrows(
NotValidBookException.class,
() -> BookValidator.validate(bookWithBlankTitle)
() -> BookValidator.validate(bookWithBlankISBN)
);
assertEquals(BookValidator.ISBN_IS_NOT_VALID, exception.getMessage());
@@ -79,11 +80,11 @@ public class BookValidatorTest {
@DisplayName("Should throw exception when isbn contains only whitespace")
void testValidateWhitespaceISBN(String whitespace) {
LocalDate date = LocalDate.of(2026, 3, 24);
BookInfo bookWithWhitespaceTitle = new BookInfo(whitespace, "La vie de Maxime", "Marvin Aubert", "Kioon", date);
BookInfo bookWithWhitespaceISBN = new BookInfo(whitespace, "La vie de Maxime", "Marvin Aubert", "Kioon", date);
NotValidBookException exception = assertThrows(
NotValidBookException.class,
() -> BookValidator.validate(bookWithWhitespaceTitle)
() -> BookValidator.validate(bookWithWhitespaceISBN)
);
assertEquals(BookValidator.ISBN_IS_NOT_VALID, exception.getMessage());
@@ -94,11 +95,11 @@ public class BookValidatorTest {
@DisplayName("Should throw exception when isbn contains only thriteen character")
void testValidateThirteenCharacterISBN(String number) {
LocalDate date = LocalDate.of(2026, 3, 24);
BookInfo bookWithWhitespaceTitle = new BookInfo(number, "La vie de Maxime", "Marvin Aubert", "Kioon", date);
BookInfo bookWithNotExactCharacterISBN = new BookInfo(number, "La vie de Maxime", "Marvin Aubert", "Kioon", date);
NotValidBookException exception = assertThrows(
NotValidBookException.class,
() -> BookValidator.validate(bookWithWhitespaceTitle)
() -> BookValidator.validate(bookWithNotExactCharacterISBN)
);
assertEquals(BookValidator.ISBN_IS_NOT_VALID, exception.getMessage());