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
Showing only changes of commit 4c79ddcf6a - Show all commits
@@ -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<String> 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<Book> 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<String> 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<Book> 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<Book> 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<Book> 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<Book> 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<Book> 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<Book> 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<String> 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());
}
}
}