Début de la feature avec des tests de base sur les variables #3
+255
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user