forked from pierront/mylibrary-template
book end
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -8,5 +8,5 @@
|
|||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_24" project-jdk-name="ms-21" project-jdk-type="JavaSDK" />
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21_PREVIEW" project-jdk-name="ms-21" project-jdk-type="JavaSDK" />
|
||||||
</project>
|
</project>
|
@@ -22,8 +22,6 @@ public class Book {
|
|||||||
this.language = language;
|
this.language = language;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters (setters optionnels si besoin)
|
|
||||||
|
|
||||||
public String getIsbn() {
|
public String getIsbn() {
|
||||||
return isbn;
|
return isbn;
|
||||||
}
|
}
|
||||||
|
@@ -1,43 +1,54 @@
|
|||||||
package fr.iut_fbleau.but3.dev62.mylibrary.book.error;
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.error;
|
||||||
|
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.book.*;
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.*;
|
||||||
import org.junit.jupiter.api.*;
|
import org.junit.jupiter.api.*;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@DisplayName("Book error and failure scenarios")
|
@DisplayName("Book error and failure scenarios")
|
||||||
public class bookErrorTest {
|
public class bookErrorTest {
|
||||||
|
|
||||||
private String lastErrorMessage;
|
private BookManagement bookManagement;
|
||||||
private boolean lastOperationSuccess;
|
|
||||||
private List<Map<String, String>> lastBookResult;
|
|
||||||
|
|
||||||
@Test
|
@BeforeEach
|
||||||
@DisplayName("Registration fails when data is invalid")
|
void setUp() {
|
||||||
void testRegistrationFails() {
|
bookManagement = new BookManagement();
|
||||||
lastOperationSuccess = false;
|
|
||||||
assertFalse(lastOperationSuccess);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Error message contains expected substring")
|
@DisplayName("Registration fails when book data is invalid")
|
||||||
void testErrorMessageContains() {
|
void testRegistrationFailsInvalidData() {
|
||||||
lastErrorMessage = "Conflict with existing book in database";
|
Book invalidBook = new Book("", "", "", "", "", "", "", "");
|
||||||
assertNotNull(lastErrorMessage);
|
InvalidBookDataException exception = assertThrows(InvalidBookDataException.class, () -> {
|
||||||
assertTrue(lastErrorMessage.contains("Conflict"));
|
bookManagement.registerBook(invalidBook);
|
||||||
|
});
|
||||||
|
assertTrue(exception.getMessage().contains("Invalid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Receiving an empty list of books")
|
@DisplayName("Registration fails when duplicate book ISBN")
|
||||||
|
void testRegistrationFailsDuplicateBook() throws Exception {
|
||||||
|
Book book = new Book("123", "Title", "Author", "Publisher", "2024-01-01", "10", "5", "FR");
|
||||||
|
bookManagement.registerBook(book);
|
||||||
|
|
||||||
|
DuplicateBookException exception = assertThrows(DuplicateBookException.class, () -> {
|
||||||
|
bookManagement.registerBook(book);
|
||||||
|
});
|
||||||
|
assertTrue(exception.getMessage().contains("Conflict"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Get book by ISBN throws BookNotFoundException if not found")
|
||||||
|
void testGetBookByIsbnNotFound() {
|
||||||
|
BookNotFoundException exception = assertThrows(BookNotFoundException.class, () -> {
|
||||||
|
bookManagement.getBookByIsbn("non-existent-isbn");
|
||||||
|
});
|
||||||
|
assertTrue(exception.getMessage().contains("not found"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Empty book list when no books registered")
|
||||||
void testEmptyBookList() {
|
void testEmptyBookList() {
|
||||||
lastBookResult = new ArrayList<>();
|
assertTrue(bookManagement.getAllBooks().isEmpty());
|
||||||
assertNotNull(lastBookResult);
|
|
||||||
assertTrue(lastBookResult.isEmpty());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName("Request fails")
|
|
||||||
void testRequestFails() {
|
|
||||||
lastOperationSuccess = false;
|
|
||||||
assertFalse(lastOperationSuccess);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,123 +1,130 @@
|
|||||||
package fr.iut_fbleau.but3.dev62.mylibrary.book.function;
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.function;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import fr.iut_fbleau.but3.dev62.mylibrary.book.*;
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.*;
|
||||||
import io.cucumber.datatable.DataTable;
|
import io.cucumber.datatable.DataTable;
|
||||||
import org.junit.jupiter.api.*;
|
import org.junit.jupiter.api.*;
|
||||||
import java.util.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@DisplayName("Book retrieval scenarios and data registration")
|
@DisplayName("Book retrieval scenarios and data registration")
|
||||||
public class bookFunctionTest {
|
public class bookFunctionTest {
|
||||||
|
|
||||||
private Map<String, Map<String, String>> books;
|
private BookManagement bookManagement;
|
||||||
private List<Map<String, String>> lastBookResult;
|
|
||||||
private Map<String, String> lastSingleBookResult;
|
|
||||||
private boolean lastOperationSuccess;
|
private boolean lastOperationSuccess;
|
||||||
private String lastErrorMessage;
|
private String lastErrorMessage;
|
||||||
|
private List<Book> lastBookResult;
|
||||||
|
private Book lastSingleBookResult;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
books = new HashMap<>();
|
bookManagement = new BookManagement();
|
||||||
lastBookResult = new ArrayList<>();
|
|
||||||
lastSingleBookResult = null;
|
|
||||||
lastOperationSuccess = false;
|
lastOperationSuccess = false;
|
||||||
lastErrorMessage = null;
|
lastErrorMessage = null;
|
||||||
|
lastBookResult = null;
|
||||||
|
lastSingleBookResult = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Register a new book with valid data")
|
@DisplayName("Register a new book with valid data")
|
||||||
void testRegisterNewBook() {
|
void testRegisterNewBook() throws Exception {
|
||||||
DataTable dataTable = DataTable.create(
|
Book newBook = new Book(
|
||||||
List.of(
|
"999",
|
||||||
List.of("isbn", "title", "author", "publisher", "publicationDate", "price", "quantity", "language"),
|
"La vie de Bob",
|
||||||
List.of("999", "La vie de Bob", "Boby Bob", "Bob", "2025-01-01", "29.99", "10", "FR")
|
"Boby Bob",
|
||||||
)
|
"Bob",
|
||||||
|
"2025-01-01",
|
||||||
|
"29.99",
|
||||||
|
"10",
|
||||||
|
"FR"
|
||||||
);
|
);
|
||||||
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
|
||||||
|
try {
|
||||||
|
bookManagement.registerBook(newBook);
|
||||||
|
lastOperationSuccess = true;
|
||||||
|
} catch (InvalidBookDataException | DuplicateBookException e) {
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
lastErrorMessage = e.getMessage();
|
||||||
|
}
|
||||||
|
|
||||||
assertTrue(lastOperationSuccess);
|
assertTrue(lastOperationSuccess);
|
||||||
}
|
assertNull(lastErrorMessage);
|
||||||
|
assertEquals(1, bookManagement.getBookCount());
|
||||||
public void iRegisterANewBookWithTheFollowingInformation(DataTable dataTable) {
|
|
||||||
Map<String, String> newBook = dataTable.asMaps(String.class, String.class).get(0);
|
|
||||||
String isbn = newBook.get("isbn");
|
|
||||||
|
|
||||||
if (isbn == null || isbn.isBlank()
|
|
||||||
|| newBook.get("title") == null || newBook.get("title").isBlank()
|
|
||||||
|| newBook.get("author") == null || newBook.get("author").isBlank()
|
|
||||||
|| newBook.get("publisher") == null || newBook.get("publisher").isBlank()
|
|
||||||
|| newBook.get("publicationDate") == null || newBook.get("publicationDate").isBlank()
|
|
||||||
|| newBook.get("price") == null || newBook.get("price").isBlank()
|
|
||||||
|| newBook.get("quantity") == null || newBook.get("quantity").isBlank()
|
|
||||||
|| newBook.get("language") == null || newBook.get("language").isBlank()) {
|
|
||||||
lastOperationSuccess = false;
|
|
||||||
lastErrorMessage = "Invalid book data provided";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (books.containsKey(isbn)) {
|
|
||||||
lastOperationSuccess = false;
|
|
||||||
lastErrorMessage = "Conflict with existing book in database";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
books.put(isbn, new HashMap<>(newBook));
|
|
||||||
lastOperationSuccess = true;
|
|
||||||
lastErrorMessage = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Request all books")
|
@DisplayName("Request all books")
|
||||||
void testRequestAllBooks() {
|
void testRequestAllBooks() throws Exception {
|
||||||
books.put("1", Map.of("title", "Livre A"));
|
bookManagement.registerBook(new Book("1", "Livre A", "Auteur", "Éditeur", "2024-01-01", "10", "1", "FR"));
|
||||||
books.put("2", Map.of("title", "Livre B"));
|
bookManagement.registerBook(new Book("2", "Livre B", "Auteur", "Éditeur", "2024-01-01", "12", "1", "FR"));
|
||||||
|
|
||||||
iRequestAllBooks();
|
lastBookResult = bookManagement.getAllBooks();
|
||||||
|
|
||||||
|
assertNotNull(lastBookResult);
|
||||||
assertEquals(2, lastBookResult.size());
|
assertEquals(2, lastBookResult.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void iRequestAllBooks() {
|
|
||||||
lastBookResult = new ArrayList<>(books.values());
|
|
||||||
lastOperationSuccess = true;
|
|
||||||
lastErrorMessage = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Request single book by ID")
|
@DisplayName("Request single book by ISBN")
|
||||||
void testRequestBookById() {
|
void testRequestBookByIsbn() throws Exception {
|
||||||
books.put("123", Map.of("isbn", "123", "title", "blabla"));
|
Book book = new Book("123", "blabla", "Auteur", "Éditeur", "2024-01-01", "15", "1", "FR");
|
||||||
iRequestTheBookWithId("123");
|
bookManagement.registerBook(book);
|
||||||
|
|
||||||
|
lastSingleBookResult = bookManagement.getBookByIsbn("123");
|
||||||
|
|
||||||
assertNotNull(lastSingleBookResult);
|
assertNotNull(lastSingleBookResult);
|
||||||
assertEquals("blabla", lastSingleBookResult.get("title"));
|
assertEquals("blabla", lastSingleBookResult.getTitle());
|
||||||
}
|
|
||||||
|
|
||||||
public void iRequestTheBookWithId(String isbn) {
|
|
||||||
if (!books.containsKey(isbn)) {
|
|
||||||
lastSingleBookResult = null;
|
|
||||||
lastOperationSuccess = false;
|
|
||||||
lastErrorMessage = "Book not found";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
lastSingleBookResult = books.get(isbn);
|
|
||||||
lastOperationSuccess = true;
|
|
||||||
lastErrorMessage = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Attempt to register a book that should fail")
|
@DisplayName("Attempt to register a duplicate book")
|
||||||
void testRegisterBookWithExpectedFailure() {
|
void testRegisterDuplicateBook() {
|
||||||
DataTable dataTable = DataTable.create(
|
Map<String, String> bookData = Map.of(
|
||||||
List.of(
|
"isbn", "666",
|
||||||
List.of("isbn", "title", "author", "publisher", "publicationDate", "price", "quantity", "language"),
|
"title", "La vie de Boby",
|
||||||
List.of("666", "La vie de Boby", "Boby Bob", "bob", "2025-01-01", "25.00", "10", "FR")
|
"author", "Boby Bob",
|
||||||
)
|
"publisher", "bob",
|
||||||
|
"publicationDate", "2025-01-01",
|
||||||
|
"price", "25.00",
|
||||||
|
"quantity", "10",
|
||||||
|
"language", "FR"
|
||||||
);
|
);
|
||||||
iTryToRegisterANewBookWithTheFollowingInformation(dataTable);
|
|
||||||
|
iRegisterANewBookWithTheFollowingInformation(bookData);
|
||||||
|
assertTrue(lastOperationSuccess);
|
||||||
|
|
||||||
|
iTryToRegisterANewBookWithTheFollowingInformation(bookData);
|
||||||
assertFalse(lastOperationSuccess);
|
assertFalse(lastOperationSuccess);
|
||||||
assertNotNull(lastErrorMessage);
|
assertNotNull(lastErrorMessage);
|
||||||
|
assertTrue(lastErrorMessage.contains("Conflict"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void iTryToRegisterANewBookWithTheFollowingInformation(DataTable dataTable) {
|
public void iRegisterANewBookWithTheFollowingInformation(Map<String, String> row) {
|
||||||
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
Book newBook = new Book(
|
||||||
|
row.get("isbn"),
|
||||||
|
row.get("title"),
|
||||||
|
row.get("author"),
|
||||||
|
row.get("publisher"),
|
||||||
|
row.get("publicationDate"),
|
||||||
|
row.get("price"),
|
||||||
|
row.get("quantity"),
|
||||||
|
row.get("language")
|
||||||
|
);
|
||||||
|
|
||||||
|
try {
|
||||||
|
bookManagement.registerBook(newBook);
|
||||||
|
lastOperationSuccess = true;
|
||||||
|
lastErrorMessage = null;
|
||||||
|
} catch (InvalidBookDataException | DuplicateBookException e) {
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
lastErrorMessage = e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void iTryToRegisterANewBookWithTheFollowingInformation(Map<String, String> row) {
|
||||||
|
iRegisterANewBookWithTheFollowingInformation(row);
|
||||||
if (lastOperationSuccess) {
|
if (lastOperationSuccess) {
|
||||||
lastOperationSuccess = false;
|
lastOperationSuccess = false;
|
||||||
lastErrorMessage = "Expected failure but succeeded";
|
lastErrorMessage = "Expected failure but succeeded";
|
||||||
@@ -126,20 +133,17 @@ public class bookFunctionTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Request all books with specific title")
|
@DisplayName("Request all books with specific title")
|
||||||
void testRequestBooksByTitle() {
|
void testRequestBooksByTitle() throws Exception {
|
||||||
books.put("1", Map.of("title", "Wouah"));
|
bookManagement.registerBook(new Book("1", "Bien", "X", "Y", "2020", "1", "1", "FR"));
|
||||||
books.put("2", Map.of("title", "Troop"));
|
bookManagement.registerBook(new Book("2", "Troop", "X", "Y", "2020", "1", "1", "FR"));
|
||||||
books.put("3", Map.of("title", "Bien"));
|
bookManagement.registerBook(new Book("3", "Bien", "X", "Y", "2020", "1", "1", "FR"));
|
||||||
|
|
||||||
iRequestAllBooksWithTitle("Bien");
|
lastBookResult = bookManagement.getBooksByTitle("Bien");
|
||||||
|
|
||||||
|
assertNotNull(lastBookResult);
|
||||||
assertEquals(2, lastBookResult.size());
|
assertEquals(2, lastBookResult.size());
|
||||||
}
|
for (Book b : lastBookResult) {
|
||||||
|
assertEquals("Bien", b.getTitle());
|
||||||
public void iRequestAllBooksWithTitle(String titleFilter) {
|
}
|
||||||
lastBookResult = books.values().stream()
|
|
||||||
.filter(book -> book.get("title").equalsIgnoreCase(titleFilter))
|
|
||||||
.toList();
|
|
||||||
lastOperationSuccess = true;
|
|
||||||
lastErrorMessage = null;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,81 +1,61 @@
|
|||||||
package fr.iut_fbleau.but3.dev62.mylibrary.book.result;
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.result;
|
||||||
|
|
||||||
|
import fr.iut_fbleau.but3.dev62.mylibrary.book.Book;
|
||||||
import org.junit.jupiter.api.*;
|
import org.junit.jupiter.api.*;
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import java.util.*;
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
@DisplayName("Book result success scenarios")
|
@DisplayName("Book result success scenarios")
|
||||||
public class bookResultTest {
|
public class bookResultTest {
|
||||||
private Map<String, String> lastSingleBookResult;
|
|
||||||
private Map<String, Map<String, String>> books;
|
private Map<String, Book> books;
|
||||||
|
private Book sampleBook;
|
||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
books = new HashMap<>();
|
books = new HashMap<>();
|
||||||
books.put("123", Map.of("titre", "Livre A"));
|
books.put("123", new Book("123", "Livre A", "Auteur", "Éditeur", "2024-01-01", "10", "1", "FR"));
|
||||||
books.put("456", Map.of("title", "Livre B"));
|
books.put("456", new Book("456", "Livre B", "Auteur", "Éditeur", "2024-01-01", "12", "2", "FR"));
|
||||||
|
|
||||||
lastSingleBookResult = Map.of(
|
sampleBook = new Book(
|
||||||
"isbn", "888",
|
"888",
|
||||||
"title", "La vie de Bob",
|
"La vie de Bob",
|
||||||
"author", "Boby Bob",
|
"Boby Bob",
|
||||||
"publisher", "Bob",
|
"Bob",
|
||||||
"publicationDate", "2025-01-01",
|
"2025-01-01",
|
||||||
"price", "29.99",
|
"29.99",
|
||||||
"quantity", "10",
|
"10",
|
||||||
"language", "Fr"
|
"FR"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Book is successfully registered")
|
@DisplayName("Book is successfully created with correct data")
|
||||||
void testBookRegistrationSuccess() {
|
void testBookCreation() {
|
||||||
boolean lastOperationSuccess = true;
|
assertEquals("888", sampleBook.getIsbn());
|
||||||
assertTrue(lastOperationSuccess);
|
assertEquals("La vie de Bob", sampleBook.getTitle());
|
||||||
|
assertEquals("Boby Bob", sampleBook.getAuthor());
|
||||||
|
assertEquals("Bob", sampleBook.getPublisher());
|
||||||
|
assertEquals("2025-01-01", sampleBook.getPublicationDate());
|
||||||
|
assertEquals("29.99", sampleBook.getPrice());
|
||||||
|
assertEquals("10", sampleBook.getQuantity());
|
||||||
|
assertEquals("FR", sampleBook.getLanguage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("Receive detailed information of a single book")
|
@DisplayName("Books map contains expected number of books")
|
||||||
void testReceiveSingleBookInformation() {
|
void testBooksMapSize() {
|
||||||
lastSingleBookResult = Map.of(
|
|
||||||
"isbn", "777",
|
|
||||||
"title", "La vie de Bob",
|
|
||||||
"author", "Boby Bob",
|
|
||||||
"publisher", "Bob",
|
|
||||||
"publicationDate", "2025-01-01",
|
|
||||||
"price", "29.99",
|
|
||||||
"quantity", "10",
|
|
||||||
"language", "Fr"
|
|
||||||
);
|
|
||||||
|
|
||||||
List<Map<String, String>> expectedList = List.of(Map.of(
|
|
||||||
"isbn", "001",
|
|
||||||
"title", "La vie de mary",
|
|
||||||
"author", "Mary Mard",
|
|
||||||
"publisher", "Mary",
|
|
||||||
"publicationDate", "2025-02-02",
|
|
||||||
"price", "29.99",
|
|
||||||
"quantity", "10",
|
|
||||||
"language", "Fr"
|
|
||||||
));
|
|
||||||
|
|
||||||
Map<String, String> expectedBook = expectedList.get(0);
|
|
||||||
assertNotNull(lastSingleBookResult);
|
|
||||||
|
|
||||||
for (String key : expectedBook.keySet()) {
|
|
||||||
assertEquals(expectedBook.get(key), lastSingleBookResult.get(key));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
@DisplayName("System has expected number of books after registration")
|
|
||||||
void testSystemHasBooks() {
|
|
||||||
assertEquals(2, books.size());
|
assertEquals(2, books.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("System still has expected number of books")
|
@DisplayName("Books map contains expected books")
|
||||||
void testSystemStillHasBooks() {
|
void testBooksMapContent() {
|
||||||
assertEquals(2, books.size());
|
assertTrue(books.containsKey("123"));
|
||||||
|
assertTrue(books.containsKey("456"));
|
||||||
|
assertEquals("Livre A", books.get("123").getTitle());
|
||||||
|
assertEquals("Livre B", books.get("456").getTitle());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user