diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookException.java new file mode 100644 index 0000000..bec0172 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookException.java @@ -0,0 +1,7 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.book.exception; + +public class NotValidBookException extends RuntimeException { + public NotValidBookException(String message) { + super(message); + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java new file mode 100644 index 0000000..ca601b0 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java @@ -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 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); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidatorTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidatorTest.java index 17a52b3..73dc509 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidatorTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidatorTest.java @@ -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());