diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2ee03b5..6568344 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -8,5 +8,5 @@
-
+
\ No newline at end of file
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
index ff53167..29c1374 100644
--- 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
@@ -27,6 +27,11 @@ public final class BookValidator {
checkTitle(info);
checkAuthor(info);
checkStock(info);
+ checkPublisher(info);
+ checkPublicationDate(info);
+ checkCategories(info);
+ checkDescription(info);
+ checkLanguage(info);
}
private static void checkIsbn(BookInfo info) throws NotValidBookException {
@@ -52,7 +57,7 @@ public final class BookValidator {
}
private static void checkPrice(BookInfo info) throws NotValidBookException {
- if (info.price() < 0) {
+ if (info.price() <= 0) {
throw new NotValidBookException(ERROR_NEGATIVE_PRICE);
}
}
@@ -62,4 +67,35 @@ public final class BookValidator {
throw new NotValidBookException(ERROR_NEGATIVE_STOCK);
}
}
+
+ private static void checkPublisher(BookInfo info) throws NotValidBookException {
+ if (info.publisher() == null || info.publisher().isBlank()) {
+ throw new NotValidBookException(ERROR_PUBLISHER_EMPTY);
+ }
+ }
+
+ private static void checkPublicationDate(BookInfo info) throws NotValidBookException {
+ if (info.publicationDate() == null) {
+ throw new NotValidBookException(ERROR_PUBLICATION_DATE_NULL);
+ }
+ }
+
+ private static void checkCategories(BookInfo info) throws NotValidBookException {
+ if (info.categories() == null || info.categories().isEmpty()) {
+ throw new NotValidBookException(ERROR_CATEGORIES_EMPTY);
+ }
+ }
+
+ private static void checkDescription(BookInfo info) throws NotValidBookException {
+ if (info.description() == null || info.description().isBlank()) {
+ throw new NotValidBookException(ERROR_DESCRIPTION_EMPTY);
+ }
+ }
+
+ private static void checkLanguage(BookInfo info) throws NotValidBookException {
+ if (info.language() == null || info.language().isBlank()) {
+ throw new NotValidBookException(ERROR_LANGUAGE_EMPTY);
+ }
+ }
+
}
diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java
index 7d79f32..2ede10c 100644
--- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java
+++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java
@@ -20,27 +20,35 @@ public final class CustomerRepository {
}
public Customer save(Customer newCustomer) {
- Optional optionalCustomerWithSameId = this.findById(newCustomer.getId());
- optionalCustomerWithSameId.ifPresentOrElse(customers::remove, newCustomer::setRandomUUID);
+ if (newCustomer.getId() == null) {
+ newCustomer.setRandomUUID();
+ }
+
+ this.findById(newCustomer.getId()).ifPresent(customers::remove);
+
this.customers.add(newCustomer);
return newCustomer;
}
public Optional findById(UUID uuid) {
+ if (uuid == null) {
+ return Optional.empty();
+ }
+
return this.customers.stream()
- .filter(customer -> customer.getId().equals(uuid))
- .findFirst();
+ .filter(customer -> uuid.equals(customer.getId()))
+ .findFirst();
}
public boolean existsById(UUID uuid) {
return this.customers.stream()
- .anyMatch(customer -> customer.getId().equals(uuid));
+ .anyMatch(customer -> customer.getId().equals(uuid));
}
public Optional findByPhoneNumber(String phoneNumber) {
return this.customers.stream()
- .filter(customer -> customer.getPhoneNumber().equals(phoneNumber))
- .findFirst();
+ .filter(customer -> customer.getPhoneNumber().equals(phoneNumber))
+ .findFirst();
}
public void delete(Customer customer) {
diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java
index 95b793a..dd44b6e 100644
--- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java
+++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java
@@ -25,7 +25,7 @@ public final class CustomerUseCase {
}
public UUID create(CustomerInfo input) throws NotValidCustomerException {
- CustomerValidator.validate(input);
+ CustomerValidator.check(input);
Customer newCustomer = CustomerConverter.toDomain(input);
Customer saved = repo.save(newCustomer);
return saved.getId();
@@ -53,7 +53,7 @@ public final class CustomerUseCase {
public CustomerDTO modify(UUID id, CustomerInfo input)
throws CustomerNotFoundException, NotValidCustomerException {
- CustomerValidator.validate(input);
+ CustomerValidator.check(input);
Customer existing = resolveOrFail(id);
Customer updated = Customer.builder()
.id(id)
diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/BookTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/BookTest.java
index f176326..edc1184 100644
--- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/BookTest.java
+++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/BookTest.java
@@ -21,7 +21,7 @@ class BookTest {
LocalDate publicationDate = LocalDate.of(2012, 6, 20);
double price = 39.95;
int stock = 7;
- List categories = List.of(Category.TECHNOLOGY);
+ List categories = List.of(Category.MYSTERY);
String description = "A deep dive into the evolution of AI.";
String language = "English";
diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java
index b528aa9..b1df9ca 100644
--- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java
+++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java
@@ -13,9 +13,9 @@ class BookNotFoundExceptionTest {
String isbn = "9780001112223";
try {
- throw new BookNotFoundException(isbn);
+ throw BookNotFoundException.forIsbn(isbn);
} catch (BookNotFoundException e) {
- String expected = String.format("The book with isbn %s does not exist", isbn);
+ String expected = String.format(BookNotFoundException.THE_BOOK_WITH_ISBN_DOES_NOT_EXIST_MESSAGE, isbn);
assertEquals(expected, e.getMessage());
}
}
@@ -25,10 +25,10 @@ class BookNotFoundExceptionTest {
void shouldIncludeIsbnInMessage() {
String isbn = "9780001112223";
- BookNotFoundException exception = new BookNotFoundException(isbn);
+ BookNotFoundException exception = BookNotFoundException.forIsbn(isbn);
assertTrue(exception.getMessage().contains(isbn));
- assertEquals(String.format("The book with isbn %s does not exist", isbn), exception.getMessage());
+ assertEquals(String.format(BookNotFoundException.THE_BOOK_WITH_ISBN_DOES_NOT_EXIST_MESSAGE, isbn), exception.getMessage());
}
@Test
@@ -36,9 +36,9 @@ class BookNotFoundExceptionTest {
void shouldUseCorrectConstantMessageFormat() {
String isbn = "9780001112223";
- BookNotFoundException ex = new BookNotFoundException(isbn);
+ BookNotFoundException ex = BookNotFoundException.forIsbn(isbn);
- assertEquals("The book with isbn {0} does not exist", BookNotFoundException.THE_BOOK_WITH_ISBN_DOES_NOT_EXIST_MESSAGE);
+ assertEquals("The book with isbn %s does not exist", BookNotFoundException.THE_BOOK_WITH_ISBN_DOES_NOT_EXIST_MESSAGE);
assertTrue(ex.getMessage().contains(isbn));
}
}
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 759b219..49dc83a 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
@@ -39,8 +39,8 @@ class BookValidatorTest {
@Test
@DisplayName("Should fail if ISBN is null")
- void shouldFailOnNullIsbn() {
- BookInfo book = new BookInfo(
+ void shouldFailOnNullIsbn() throws NotValidBookException {
+ BookInfo book = new BookInfo (
null, "Title", "Author", "Publisher", LocalDate.now(), 10.0, 2,
List.of(Category.SCIENCE), "Details", "English"
);
@@ -124,7 +124,7 @@ class BookValidatorTest {
class PublicationDateTests {
@Test
@DisplayName("Should fail if publication date is null")
- void shouldFailOnNullPublicationDate() {
+ void shouldFailOnNullPublicationDate() throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", null, 10.0, 2,
List.of(Category.SCIENCE), "Details", "English"
@@ -140,7 +140,7 @@ class BookValidatorTest {
@ParameterizedTest
@ValueSource(doubles = {0.0, -5.5, -100.0})
@DisplayName("Should fail if price is zero or negative")
- void shouldFailOnInvalidPrice(double price) {
+ void shouldFailOnInvalidPrice(double price) throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", LocalDate.now(), price, 2,
List.of(Category.SCIENCE), "Details", "English"
@@ -156,7 +156,7 @@ class BookValidatorTest {
@ParameterizedTest
@ValueSource(ints = {-1, -50})
@DisplayName("Should fail if stock is negative")
- void shouldFailOnNegativeStock(int stock) {
+ void shouldFailOnNegativeStock(int stock) throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", LocalDate.now(), 10.0, stock,
List.of(Category.SCIENCE), "Details", "English"
@@ -171,7 +171,7 @@ class BookValidatorTest {
class CategoryTests {
@Test
@DisplayName("Should fail if category list is empty")
- void shouldFailOnEmptyCategoryList() {
+ void shouldFailOnEmptyCategoryList() throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", LocalDate.now(), 10.0, 2,
Collections.emptyList(), "Details", "English"
@@ -186,7 +186,7 @@ class BookValidatorTest {
class DescriptionTests {
@Test
@DisplayName("Should fail if description is blank")
- void shouldFailOnBlankDescription() {
+ void shouldFailOnBlankDescription() throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", LocalDate.now(), 10.0, 2,
List.of(Category.SCIENCE), "", "English"
@@ -201,7 +201,7 @@ class BookValidatorTest {
class LanguageTests {
@Test
@DisplayName("Should fail if language is blank")
- void shouldFailOnBlankLanguage() {
+ void shouldFailOnBlankLanguage() throws NotValidBookException {
BookInfo book = new BookInfo(
"9780001234567", "Title", "Author", "Publisher", LocalDate.now(), 10.0, 2,
List.of(Category.SCIENCE), "Details", ""
diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java
index a43a2df..18d2752 100644
--- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java
+++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java
@@ -1,26 +1,26 @@
package fr.iut_fbleau.but3.dev62.mylibrary.features.book;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDTO;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.Category;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.BookNotFoundException;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository;
+import fr.iut_fbleau.but3.dev62.mylibrary.book.usecase.BookUseCase;
import io.cucumber.datatable.DataTable;
-import io.cucumber.java.en.And;
import io.cucumber.java.en.Given;
import io.cucumber.java.en.Then;
import io.cucumber.java.en.When;
import java.time.LocalDate;
-import java.util.*;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.*;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDTO;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.Category;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.BookNotFoundException;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository;
-import fr.iut_fbleau.but3.dev62.mylibrary.book.usecase.BookUseCase;
-
public class BookSteps {
private final BookRepository bookRepository = new BookRepository();
@@ -31,290 +31,153 @@ public class BookSteps {
private BookDTO updatedBook;
private String deletedBookIsbn;
private Exception storedException;
- private List booksPageResult;
- private int totalBooks;
- private int totalPages;
- private List filteredBooksResult;
- private NotValidBookException notValidBookException;
- @Given("Le systeme possedent les livres suivants :")
- public void leSystemePossedeLesLivresSuivants(DataTable dataTable) {
+ @Given("the system contains the following books:")
+ public void theSystemContainsTheFollowingBooks(DataTable table) {
bookRepository.deleteAll();
- List