forked from pierront/mylibrary-template
book end
This commit is contained in:
@@ -0,0 +1,52 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.book;
|
||||||
|
|
||||||
|
public class book {
|
||||||
|
private String isbn;
|
||||||
|
private String title;
|
||||||
|
private String author;
|
||||||
|
private String publisher;
|
||||||
|
private String publicationDate;
|
||||||
|
private String price;
|
||||||
|
private String quantity;
|
||||||
|
private String language;
|
||||||
|
|
||||||
|
public book(String isbn, String title, String author, String publisher,
|
||||||
|
String publicationDate, String price, String quantity, String language) {
|
||||||
|
this.isbn = isbn;
|
||||||
|
this.title = title;
|
||||||
|
this.author = author;
|
||||||
|
this.publisher = publisher;
|
||||||
|
this.publicationDate = publicationDate;
|
||||||
|
this.price = price;
|
||||||
|
this.quantity = quantity;
|
||||||
|
this.language = language;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Getters (setters optionnels si besoin)
|
||||||
|
|
||||||
|
public String getIsbn() {
|
||||||
|
return isbn;
|
||||||
|
}
|
||||||
|
public String getTitle() {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
public String getAuthor() {
|
||||||
|
return author;
|
||||||
|
}
|
||||||
|
public String getPublisher() {
|
||||||
|
return publisher;
|
||||||
|
}
|
||||||
|
public String getPublicationDate() {
|
||||||
|
return publicationDate;
|
||||||
|
}
|
||||||
|
public String getPrice() {
|
||||||
|
return price;
|
||||||
|
}
|
||||||
|
public String getQuantity() {
|
||||||
|
return quantity;
|
||||||
|
}
|
||||||
|
public String getLanguage() {
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -0,0 +1,54 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.book;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class bookManagement {
|
||||||
|
private final Map<String, book> books = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
public boolean registerBook(book book) {
|
||||||
|
if (!isValid(book)) {
|
||||||
|
throw new IllegalArgumentException("Invalid book data provided");
|
||||||
|
}
|
||||||
|
if (books.containsKey(book.getIsbn())) {
|
||||||
|
throw new IllegalStateException("Conflict with existing book in database");
|
||||||
|
}
|
||||||
|
books.put(book.getIsbn(), book);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<book> getAllBooks() {
|
||||||
|
return new ArrayList<>(books.values());
|
||||||
|
}
|
||||||
|
|
||||||
|
public book getBookByIsbn(String isbn) {
|
||||||
|
if (!books.containsKey(isbn)) {
|
||||||
|
throw new NoSuchElementException("Book not found");
|
||||||
|
}
|
||||||
|
return books.get(isbn);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<book> getBooksByTitle(String title) {
|
||||||
|
return books.values().stream()
|
||||||
|
.filter(book -> book.getTitle().equalsIgnoreCase(title))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getBookCount() {
|
||||||
|
return books.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValid(book book) {
|
||||||
|
return book != null &&
|
||||||
|
notEmpty(book.getIsbn()) &&
|
||||||
|
notEmpty(book.getTitle()) &&
|
||||||
|
notEmpty(book.getAuthor()) &&
|
||||||
|
notEmpty(book.getPublisher()) &&
|
||||||
|
notEmpty(book.getPublicationDate()) &&
|
||||||
|
notEmpty(book.getPrice()) &&
|
||||||
|
notEmpty(book.getQuantity()) &&
|
||||||
|
notEmpty(book.getLanguage());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean notEmpty(String value) {
|
||||||
|
return value != null && !value.isBlank();
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,43 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.bookError;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@DisplayName("Book error and failure scenarios")
|
||||||
|
public class error {
|
||||||
|
|
||||||
|
private String lastErrorMessage;
|
||||||
|
private boolean lastOperationSuccess;
|
||||||
|
private List<Map<String, String>> lastBookResult;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Registration fails when data is invalid")
|
||||||
|
void testRegistrationFails() {
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
assertFalse(lastOperationSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Error message contains expected substring")
|
||||||
|
void testErrorMessageContains() {
|
||||||
|
lastErrorMessage = "Conflict with existing book in database";
|
||||||
|
assertNotNull(lastErrorMessage);
|
||||||
|
assertTrue(lastErrorMessage.contains("Conflict"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Receiving an empty list of books")
|
||||||
|
void testEmptyBookList() {
|
||||||
|
lastBookResult = new ArrayList<>();
|
||||||
|
assertNotNull(lastBookResult);
|
||||||
|
assertTrue(lastBookResult.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Request fails")
|
||||||
|
void testRequestFails() {
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
assertFalse(lastOperationSuccess);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,145 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.function;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import io.cucumber.datatable.DataTable;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@DisplayName("Book retrieval scenarios and data registration")
|
||||||
|
public class bookFunctionTest {
|
||||||
|
|
||||||
|
private Map<String, Map<String, String>> books;
|
||||||
|
private List<Map<String, String>> lastBookResult;
|
||||||
|
private Map<String, String> lastSingleBookResult;
|
||||||
|
private boolean lastOperationSuccess;
|
||||||
|
private String lastErrorMessage;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
books = new HashMap<>();
|
||||||
|
lastBookResult = new ArrayList<>();
|
||||||
|
lastSingleBookResult = null;
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
lastErrorMessage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Register a new book with valid data")
|
||||||
|
void testRegisterNewBook() {
|
||||||
|
DataTable dataTable = DataTable.create(
|
||||||
|
List.of(
|
||||||
|
List.of("isbn", "title", "author", "publisher", "publicationDate", "price", "quantity", "language"),
|
||||||
|
List.of("999", "La vie de Bob", "Boby Bob", "Bob", "2025-01-01", "29.99", "10", "FR")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
||||||
|
assertTrue(lastOperationSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
@DisplayName("Request all books")
|
||||||
|
void testRequestAllBooks() {
|
||||||
|
books.put("1", Map.of("title", "Livre A"));
|
||||||
|
books.put("2", Map.of("title", "Livre B"));
|
||||||
|
|
||||||
|
iRequestAllBooks();
|
||||||
|
assertEquals(2, lastBookResult.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void iRequestAllBooks() {
|
||||||
|
lastBookResult = new ArrayList<>(books.values());
|
||||||
|
lastOperationSuccess = true;
|
||||||
|
lastErrorMessage = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Request single book by ID")
|
||||||
|
void testRequestBookById() {
|
||||||
|
books.put("123", Map.of("isbn", "123", "title", "blabla"));
|
||||||
|
iRequestTheBookWithId("123");
|
||||||
|
|
||||||
|
assertNotNull(lastSingleBookResult);
|
||||||
|
assertEquals("blabla", lastSingleBookResult.get("title"));
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
@DisplayName("Attempt to register a book that should fail")
|
||||||
|
void testRegisterBookWithExpectedFailure() {
|
||||||
|
DataTable dataTable = DataTable.create(
|
||||||
|
List.of(
|
||||||
|
List.of("isbn", "title", "author", "publisher", "publicationDate", "price", "quantity", "language"),
|
||||||
|
List.of("666", "La vie de Boby", "Boby Bob", "bob", "2025-01-01", "25.00", "10", "FR")
|
||||||
|
)
|
||||||
|
);
|
||||||
|
iTryToRegisterANewBookWithTheFollowingInformation(dataTable);
|
||||||
|
assertFalse(lastOperationSuccess);
|
||||||
|
assertNotNull(lastErrorMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void iTryToRegisterANewBookWithTheFollowingInformation(DataTable dataTable) {
|
||||||
|
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
||||||
|
if (lastOperationSuccess) {
|
||||||
|
lastOperationSuccess = false;
|
||||||
|
lastErrorMessage = "Expected failure but succeeded";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Request all books with specific title")
|
||||||
|
void testRequestBooksByTitle() {
|
||||||
|
books.put("1", Map.of("title", "Wouah"));
|
||||||
|
books.put("2", Map.of("title", "Troop"));
|
||||||
|
books.put("3", Map.of("title", "Bien"));
|
||||||
|
|
||||||
|
iRequestAllBooksWithTitle("Bien");
|
||||||
|
assertEquals(2, lastBookResult.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void iRequestAllBooksWithTitle(String titleFilter) {
|
||||||
|
lastBookResult = books.values().stream()
|
||||||
|
.filter(book -> book.get("title").equalsIgnoreCase(titleFilter))
|
||||||
|
.toList();
|
||||||
|
lastOperationSuccess = true;
|
||||||
|
lastErrorMessage = null;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,81 @@
|
|||||||
|
package fr.iut_fbleau.but3.dev62.mylibrary.book.result;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
@DisplayName("Book result success scenarios")
|
||||||
|
public class bookResultTest {
|
||||||
|
private Map<String, String> lastSingleBookResult;
|
||||||
|
private Map<String, Map<String, String>> books;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void setUp() {
|
||||||
|
books = new HashMap<>();
|
||||||
|
books.put("123", Map.of("titre", "Livre A"));
|
||||||
|
books.put("456", Map.of("title", "Livre B"));
|
||||||
|
|
||||||
|
lastSingleBookResult = Map.of(
|
||||||
|
"isbn", "888",
|
||||||
|
"title", "La vie de Bob",
|
||||||
|
"author", "Boby Bob",
|
||||||
|
"publisher", "Bob",
|
||||||
|
"publicationDate", "2025-01-01",
|
||||||
|
"price", "29.99",
|
||||||
|
"quantity", "10",
|
||||||
|
"language", "Fr"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Book is successfully registered")
|
||||||
|
void testBookRegistrationSuccess() {
|
||||||
|
boolean lastOperationSuccess = true;
|
||||||
|
assertTrue(lastOperationSuccess);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("Receive detailed information of a single book")
|
||||||
|
void testReceiveSingleBookInformation() {
|
||||||
|
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());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@DisplayName("System still has expected number of books")
|
||||||
|
void testSystemStillHasBooks() {
|
||||||
|
assertEquals(2, books.size());
|
||||||
|
}
|
||||||
|
}
|
@@ -116,10 +116,8 @@ public class BookSteps {
|
|||||||
// ----------------------------Scénario 4---------------------------------
|
// ----------------------------Scénario 4---------------------------------
|
||||||
@When("I try to register a new book with the following information:")
|
@When("I try to register a new book with the following information:")
|
||||||
public void iTryToRegisterANewBookWithTheFollowingInformation(DataTable dataTable) {
|
public void iTryToRegisterANewBookWithTheFollowingInformation(DataTable dataTable) {
|
||||||
// Réutilisation de la méthode normale, mais on garde le résultat
|
|
||||||
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
iRegisterANewBookWithTheFollowingInformation(dataTable);
|
||||||
if (lastOperationSuccess) {
|
if (lastOperationSuccess) {
|
||||||
// Si succès, on garde ça, sinon lastErrorMessage est mis à jour
|
|
||||||
lastOperationSuccess = false;
|
lastOperationSuccess = false;
|
||||||
lastErrorMessage = "Expected failure but succeeded";
|
lastErrorMessage = "Expected failure but succeeded";
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user