From 4c79ddcf6a4d0254dc9c71563d6d89fc150d4c31 Mon Sep 17 00:00:00 2001 From: felix-vi Date: Sun, 26 Apr 2026 17:53:24 +0200 Subject: [PATCH] =?UTF-8?q?:white=5Fcheck=5Fmark:=20cr=C3=A9ation=20des=20?= =?UTF-8?q?test=20des=20fonctions=20d'une=20BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/repository/BookRepositoryTest.java | 255 ++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepositoryTest.java diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepositoryTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepositoryTest.java new file mode 100644 index 0000000..62908e9 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepositoryTest.java @@ -0,0 +1,255 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.book.repository; + +import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; +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.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class BookRepositoryTest { + + private BookRepository repository; + private Book book1; + private Book book2; + + @BeforeEach + void setUp() { + repository = new BookRepository(); + + LocalDate date = LocalDate.of(2026, 3, 24); + ArrayList categories = new ArrayList<>(); + categories.add("Thriller"); + categories.add("Biographie"); + + book1 = Book.builder() + .isbn("1234567891012") + .title("La vie de Maxime") + .author("Marvin Aubert") + .editor("Kioon") + .date(date) + .price(12.99) + .stock(50) + .categories(categories) + .description("C'était un brave partit trop tôt") + .language("Français") + .build(); + + book2 = Book.builder() + .isbn("1234567891015") + .title("La vie de Marvin") + .author("Maxime Lebreton") + .editor("Kioon") + .date(date) + .price(12.99) + .stock(50) + .categories(categories) + .description("C'était un brave partit trop tôt") + .language("Français") + .build(); + } + + @Test + @DisplayName("New repository should be empty") + void testNewRepositoryIsEmpty() { + List books = repository.findAll(); + + assertTrue(books.isEmpty()); + assertEquals(0, books.size()); + } + + @Nested + @DisplayName("Save operations") + class SaveOperations { + + @Test + @DisplayName("Save should add a new book") + void testSaveNewBook() { + Book savedBook = repository.save(book1); + + assertEquals(1, repository.findAll().size()); + assertEquals(book1.getIsbn(), savedBook.getIsbn()); + assertEquals(book1.getTitle(), savedBook.getTitle()); + } + + @Test + @DisplayName("Save should update existing book with same isbn") + void testSaveUpdatesExistingBook() { + repository.save(book1); + + String isbn = "1516515616216"; + LocalDate date = LocalDate.of(2026, 3, 24); + ArrayList categories = new ArrayList<>(); + categories.add("Thriller"); + categories.add("Biographie"); + + Book updatedBook = Book.builder() + .isbn(isbn) + .title("La vie de Maxime") + .author("Updated") + .editor("Kioon") + .date(date) + .price(12.99) + .stock(50) + .categories(categories) + .description("C'était un brave partit trop tôt") + .language("Français") + .build(); + + Book savedBook = repository.save(updatedBook); + + assertEquals(1, repository.findAll().size()); + assertEquals(isbn, savedBook.getIsbn()); + assertEquals("La vie de Maxime", savedBook.getTitle()); + assertEquals("Updated", savedBook.getAuthor()); + assertEquals("Kioon", savedBook.getEditor()); + assertEquals(date, savedBook.getDate()); + assertEquals(12.99, savedBook.getPrice()); + assertEquals(50, savedBook.getStock()); + assertEquals(categories, savedBook.getCategories()); + assertEquals("C'était un brave partit trop tôt", savedBook.getDescription()); + assertEquals("Français", savedBook.getLanguage()); + } + + @Test + @DisplayName("Save multiple books should add all of them") + void testSaveMultipleBooks() { + repository.save(book1); + repository.save(book2); + + List books = repository.findAll(); + + assertEquals(2, books.size()); + assertTrue(books.contains(book1)); + assertTrue(books.contains(book2)); + } + } + + @Nested + @DisplayName("Find operations") + class FindOperations { + + @BeforeEach + void setUpBooks() { + repository.save(book1); + repository.save(book2); + } + + @Test + @DisplayName("FindAll should return all books") + void testFindAll() { + List books = repository.findAll(); + + assertEquals(2, books.size()); + assertTrue(books.contains(book1)); + assertTrue(books.contains(book2)); + } + + @Test + @DisplayName("FindByIsbn should return book with matching isbn") + void testFindByIsbn() { + Optional foundBook = repository.findByIsbn(book1.getIsbn()); + + assertTrue(foundBook.isPresent()); + assertEquals(book1.getTitle(), foundBook.get().getTitle()); + assertEquals(book1.getAuthor(), foundBook.get().getAuthor()); + } + + @Test + @DisplayName("FindByIsbn should return empty Optional when isbn doesn't exist") + void testFindByIsbnNotFound() { + String nonExistedisbn = "1515265522652"; + + Optional foundBook = repository.findByIsbn(nonExistedisbn); + + assertTrue(foundBook.isEmpty()); + } + + @Test + @DisplayName("ExistsByIsbn should return true when isbn exists") + void testExistsByIsbnExists() { + boolean exists = repository.existsByIsbn(book1.getIsbn()); + + assertTrue(exists); + } + + @Test + @DisplayName("ExistsByIsbn should return false when isbn doesn't exist") + void testExistsByIsbnNotExists() { + String nonExistedisbn = "1515265522652"; + + boolean exists = repository.existsByIsbn(nonExistedisbn); + + assertFalse(exists); + } + } + + @Nested + @DisplayName("Delete operations") + class DeleteOperations { + + @BeforeEach + void setUpCustomers() { + repository.save(book1); + repository.save(book2); + } + + @Test + @DisplayName("Delete should remove the specified book") + void testDelete() { + repository.delete(book1); + + List books = repository.findAll(); + + assertEquals(1, books.size()); + assertFalse(books.contains(book1)); + assertTrue(books.contains(book2)); + } + + @Test + @DisplayName("DeleteAll should remove all books") + void testDeleteAll() { + repository.deleteAll(); + + List books = repository.findAll(); + + assertTrue(books.isEmpty()); + assertEquals(0, books.size()); + } + + @Test + @DisplayName("Delete should not throw exception when book doesn't exist") + void testDeleteNonExistentBook() { + LocalDate date = LocalDate.of(2026, 3, 24); + ArrayList categories = new ArrayList<>(); + categories.add("Thriller"); + categories.add("Biographie"); + Book nonExistentBook = Book.builder() + .isbn("1515466461319") + .title("La vie de Patrick") + .author("Updated") + .editor("Kioon") + .date(date) + .price(12.99) + .stock(50) + .categories(categories) + .description("C'était un brave partit trop tôt") + .language("Français") + .build(); + + assertDoesNotThrow(() -> repository.delete(nonExistentBook)); + + assertEquals(2, repository.findAll().size()); + } + } +}