Merge remote-tracking branch 'origin/main'

This commit is contained in:
2025-06-13 20:01:59 +02:00
8 changed files with 45 additions and 28 deletions

View File

@@ -4,7 +4,7 @@ import java.text.MessageFormat;
public class IllegalBookStockException extends Exception {
public static final String CANNOT_REMOVE_STOCK = "Cannot remove {0} stock from {1} points";
public static final String CANNOT_REMOVE_STOCK = "Cannot remove {0} stock from {1} stock";
public IllegalBookStockException(int needed, int actual) {
super(MessageFormat.format(CANNOT_REMOVE_STOCK, needed,

View File

@@ -7,6 +7,8 @@ import java.util.Optional;
import java.util.UUID;
import lombok.NoArgsConstructor;
import javax.swing.text.html.Option;
@NoArgsConstructor
public final class BookRepository {
private final List<Book> books = new ArrayList<>();
@@ -20,17 +22,24 @@ public final class BookRepository {
}
public Book save(Book newBook) {
Optional<Book> optionalBookWithSameId = this.findByISBN(newBook.getIsbn());
optionalBookWithSameId.ifPresent(books::remove);
for (Book book: books) {
if (book.getIsbn().equals(newBook.getIsbn())){
books.remove(book);
break;
}
}
this.books.add(newBook);
return newBook;
}
public Optional<Book> findByISBN(String isbn) {
return this.books.stream()
.filter(book -> book.getIsbn().equals(isbn))
.findFirst();
for (Book book:books) {
System.out.println(book.getIsbn());
if(book.getIsbn().equals(isbn)){
return Optional.of(book);
}
}
return Optional.empty();
}
public boolean existsByISBN(String isbn) {

View File

@@ -23,11 +23,12 @@ public final class BookUseCase {
public String registerBook(BookInfo newBook) throws NotValidBookException {
BookValidator.validate(newBook);
Book bookToRegister = BookConverter.toDomain(newBook);
Book bookToRegistered = bookRepository.save(bookToRegister);
return bookToRegistered.getIsbn();
bookRepository.save(bookToRegister);
return bookToRegister.getIsbn();
}
public Optional<BookDTO> findBookByISBN(String isbn) {
System.out.println(bookRepository.findAll().size());
Optional<Book> optionalBook = bookRepository.findByISBN(isbn);
return optionalBook.map(BookConverter::toDTO);
}

View File

@@ -24,7 +24,10 @@ public final class BookValidator {
public static void validate(BookInfo newBook) throws NotValidBookException {
validateAuthor(newBook);
validateTitle(newBook);
validatePublisher(newBook);
validateISBN(newBook);
validatePrice(newBook);
validateInitialStock(newBook);
}
private static void validateISBN(BookInfo newBook)

View File

@@ -72,7 +72,7 @@ class BookRepositoryTest {
assertEquals(book1.getTitle(), savedBook.getTitle());
assertEquals(book1.getAuthor(), savedBook.getAuthor());
assertEquals(book1.getPublisher(), savedBook.getPublisher());
assertEquals(book1, savedBook.getDate());
assertEquals(book1.getDate(), savedBook.getDate());
assertEquals(book1.getPrice(), savedBook.getPrice());
assertEquals(book1.getInitialStock(), savedBook.getInitialStock());
assertEquals(book1.getCategories(), savedBook.getCategories());
@@ -103,16 +103,16 @@ class BookRepositoryTest {
Book savedBook = repository.save(updatedBook);
assertEquals(1, repository.findAll().size());
assertEquals(book1.getIsbn(), savedBook.getIsbn());
assertEquals(book1.getTitle(), savedBook.getTitle());
assertEquals(book1.getAuthor(), savedBook.getAuthor());
assertEquals(book1.getPublisher(), savedBook.getPublisher());
assertEquals(book1, savedBook.getDate());
assertEquals(book1.getPrice(), savedBook.getPrice());
assertEquals(book1.getInitialStock(), savedBook.getInitialStock());
assertEquals(book1.getCategories(), savedBook.getCategories());
assertEquals(book1.getDescription(), savedBook.getDescription());
assertEquals(book1.getLanguage(), savedBook.getLanguage());
assertEquals(updatedBook.getIsbn(), savedBook.getIsbn());
assertEquals(updatedBook.getTitle(), savedBook.getTitle());
assertEquals(updatedBook.getAuthor(), savedBook.getAuthor());
assertEquals(updatedBook.getPublisher(), savedBook.getPublisher());
assertEquals(updatedBook.getDate(), savedBook.getDate());
assertEquals(updatedBook.getPrice(), savedBook.getPrice());
assertEquals(updatedBook.getInitialStock(), savedBook.getInitialStock());
assertEquals(updatedBook.getCategories(), savedBook.getCategories());
assertEquals(updatedBook.getDescription(), savedBook.getDescription());
assertEquals(updatedBook.getLanguage(), savedBook.getLanguage());
}
@Test
@@ -159,7 +159,7 @@ class BookRepositoryTest {
assertEquals(book1.getTitle(), foundBook.get().getTitle());
assertEquals(book1.getAuthor(), foundBook.get().getAuthor());
assertEquals(book1.getPublisher(), foundBook.get().getPublisher());
assertEquals(book1, foundBook.get().getDate());
assertEquals(book1.getDate(), foundBook.get().getDate());
assertEquals(book1.getPrice(), foundBook.get().getPrice());
assertEquals(book1.getInitialStock(), foundBook.get().getInitialStock());
assertEquals(book1.getCategories(), foundBook.get().getCategories());
@@ -187,7 +187,7 @@ class BookRepositoryTest {
assertEquals(book1.getTitle(), foundBook.get().getTitle());
assertEquals(book1.getAuthor(), foundBook.get().getAuthor());
assertEquals(book1.getPublisher(), foundBook.get().getPublisher());
assertEquals(book1, foundBook.get().getDate());
assertEquals(book1.getDate(), foundBook.get().getDate());
assertEquals(book1.getPrice(), foundBook.get().getPrice());
assertEquals(book1.getInitialStock(), foundBook.get().getInitialStock());
assertEquals(book1.getCategories(), foundBook.get().getCategories());

View File

@@ -2,6 +2,7 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.usecase;
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.converter.BookConverter;
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;
@@ -15,6 +16,7 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import javax.swing.text.html.Option;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
@@ -44,7 +46,7 @@ public class BookUseCaseTest {
ArrayList<String> categories = new ArrayList<>(); categories.add("Histoire"); categories.add("Action");
Date date = Date.from(Instant.now());
testBook = Book.builder()
.isbn(bookISBN)
.isbn("1234567890123")
.title("LivreRandom")
.author("John Doe")
.publisher("RandomPublisher")
@@ -56,7 +58,7 @@ public class BookUseCaseTest {
.language("Francais")
.build();
validBookInfo = new BookInfo("bookISBN","LivreRandom", "John Doe", "RandomPublisher", date, 12.5, 50, categories, "Je suis un livre qui est composé de mots.", "Francais");
validBookInfo = new BookInfo("1234567890123","LivreRandom", "John Doe", "RandomPublisher", date, 12.5, 50, categories, "Je suis un livre qui est composé de mots.", "Francais");
}
@@ -68,6 +70,7 @@ public class BookUseCaseTest {
@Test
@DisplayName("Should register book when valid data is provided")
void testRegisterBookWithValidData() throws NotValidBookException {
bookISBN = "1234567890123";
when(bookRepository.save(any(Book.class))).thenReturn(testBook);
String registeredISBN = bookUseCase.registerBook(validBookInfo);
@@ -100,8 +103,10 @@ public class BookUseCaseTest {
@Test
@DisplayName("Should return book when ISBN exists")
void testFindBookByISBN() {
when(bookRepository.findByISBN("1234567890123")).thenReturn(Optional.empty());
void testFindBookByISBN() throws NotValidBookException {
when(bookRepository.findByISBN("1234567890123")).thenReturn(Optional.of(testBook));
String registeredISBN = bookUseCase.registerBook(validBookInfo);
Optional<BookDTO> foundBook = bookUseCase.findBookByISBN("1234567890123");

View File

@@ -224,7 +224,7 @@ class BookValidatorTest {
@Test
@DisplayName("Should throw exception when Initial Stock is negative")
void testValidateNegativePrice() {
void testValidateNegativeStock() {
ArrayList<String> categories = new ArrayList<>(); categories.add("Categorie1"); categories.add("Categorie2");
BookInfo bookWithNegativeInitialStock = new BookInfo("1234567890123", "Livre", "Auteur", "Editeur", Date.from(Instant.now()), 5.12, -15, categories, "description", "langue");

View File

@@ -225,7 +225,6 @@ public class OrderSteps {
assertTrue(isOrderOrBookNotFound,
"The exception should be of type OrderNotFoundException or BookNotFoundException. Exception réelle : " + exception.getClass().getName());
String actualMessage = exception.getMessage();
System.out.println("[DEBUG] Exception message: '" + actualMessage + "'");
boolean match = false;
if (actualMessage != null) {
match = actualMessage.contains(errorMessage);