Skip to content
Snippets Groups Projects
Commit a31594bb authored by Guyslain's avatar Guyslain
Browse files

TD 9 exceptions up

parent c5c7887f
Branches
No related tags found
No related merge requests found
......@@ -2,8 +2,4 @@ package fr.univamu.progav.td9;
public class BookException extends Exception {
public Book book() {
// TODO
return null;
}
}
package fr.univamu.progav.td9;
public class BookNotFoundException extends BookException {
//TODO
}
package fr.univamu.progav.td9;
public class BookUnavailableException extends BookException {
// TODO
}
package fr.univamu.progav.td9;
import java.util.ArrayList;
import java.util.List;
public record BulkCheckoutResult(
......@@ -7,6 +8,9 @@ public record BulkCheckoutResult(
List<BookException> failedCheckouts
) {
public BulkCheckoutResult() {
this(new ArrayList<>(), new ArrayList<>());
}
public boolean isCompletelySuccessful() {
// TODO
......
......@@ -5,9 +5,12 @@ import java.util.List;
import java.util.Map;
public class Library {
private final Map<String, Book> collection = new HashMap<>();
private final Map<Book, BookStatus> bookStatuses = new HashMap<>();
public void addBook(Book book) {
collection.put(book.isbn(), book);
bookStatuses.put(book, BookStatus.AVAILABLE);
}
......@@ -16,17 +19,20 @@ public class Library {
return null;
}
public void checkoutBook(Book book) throws BookException {
public BookStatus getBookStatus(String isbn) {
// TODO
return null;
}
public BulkCheckoutResult checkoutBooks(List<Book> books) {
public Book checkoutBook(String isbn) {
// TODO
return null;
}
public BookStatus getBookStatus(Book book) {
public BulkCheckoutResult checkoutBooks(List<String> isbns) {
// TODO
return null;
}
}
......@@ -3,7 +3,7 @@ gestion des livres d'une bibliothèque, qui n'est pas un exemple très
pertinent pour l'utilisation d'exceptions, mais qui a l'avantage d'être
relativement simple pour apprendre les bases de la manipulation des exceptions.
La bibliothèque ```Library``` possède une collection de livre ```Book```, et
La bibliothèque ```Library``` possède une collection de livres ```Book```, et
les clients peuvent venir emprunter un ou plusieurs livres (méthodes
```checkoutBook``` et ```checkoutBooks```). Un livre peut donc être
disponible ou indisponible (classe ```BookStatus```), ou bien ne pas faire
......@@ -16,27 +16,21 @@ bibliothèque, l'exception ```BookNotFoundException``` sera levée.
Exercice 1
==========
Compléter la classe d'exception ```BookException```, en y ajoutant une
propriété ```Book```, et une méthode ```toString``` affichant le livre.
Compléter aussi la méthode ```book```.
Compléter les 2 extensions ```BookNotFoundException``` (possédant un code
ISBN) et ```BookUnavailable``` (possédant un livre) de la
classe```BookException```. Assurez-vous que la méthode ```getMessage``` de
chacune délivre un message adapté et mentionnant soit le code ISBN, soit le
livre concerné.
Exercice 2
==========
Compléter les 2 extensions ```BookNotFoundException``` et
```BookUnavailable``` de ```BookException```. Assurez-vous que le
```toString``` de chacune affiche un message adapté et mentionnant le livre
concerné.
Exercice 3
==========
Compléter la méthode ```findBook``` de la classe ```Library```. Elle doit
retourner le livre dont le code ISBN est fourni. S'il n'existe pas un tel
livre, il faut émettre l'exception ```BookNotFoundException```. Ajouter la
déclaration d'exception à la méthode.
Exercice 4
Exercice 3
==========
Compléter la méthode ```checkBookStatus``` de la classe ```Library```,
......@@ -44,7 +38,7 @@ retournant le status d'un livre précisé par son code ISBN. Si le livre
n'existe pas, l'exception ```BookNotFound``` sera émise. Ajouter la
déclaration d'exception à la méthode.
Exercice 5
Exercice 4
==========
Compléter la méthode ```checkoutBook``` de la classe ```Library```.
......@@ -53,7 +47,7 @@ code ISBN), et modifie alors son status à ```BORROWED```. Si les conditions
ne sont pas respectées, la méthode émet l'exception appropriée. Ajouter la
déclaration d'exception à la méthode.
Exercice 6
Exercice 5
==========
Compléter la méthode ```isCompletelySuccessful``` de la classe
......@@ -62,9 +56,10 @@ réservation d'une liste de livres, comprenant :
- la liste des livres empruntés;
- la liste des échecs des tentatives d'emprunt.
Exercice 7
Exercice 6
==========
Compléter la méthode ```checkoutBooks``` de la classe ```Library```.
Vérifier votre travail à l'aide des tests fournis.
\ No newline at end of file
......@@ -34,28 +34,34 @@ public class LibraryTest {
@Test
void testSingleCheckoutSuccess() throws BookException {
library.checkoutBook(book1);
assertEquals(BookStatus.BORROWED, library.getBookStatus(book1));
library.checkoutBook("123");
assertEquals(BookStatus.BORROWED, library.getBookStatus("123"));
}
@Test
void testBulkCheckoutPartialSuccess() throws BookException {
library.checkoutBook(book1);
library.checkoutBook("123");
Book nonExistentBook = new Book("999", "Nonexistent");
List<Book> booksToCheckout = List.of(book1, book2, nonExistentBook);
List<String> booksToCheckout = List.of("123", "456", "999");
BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertFalse(result.isCompletelySuccessful());
assertEquals(1, result.successfulCheckouts().size());
assertEquals(2, result.failedCheckouts().size());
assertInstanceOf(BookUnavailableException.class, result.failedCheckouts().get(0));
assertInstanceOf(BookNotFoundException.class, result.failedCheckouts().get(1));
assertEquals(book1,result.failedCheckouts().get(0).book());
assertEquals(nonExistentBook,result.failedCheckouts().get(1).book());
assertEquals(
"Book1 (123): book unavailable",
result.failedCheckouts().get(0).getMessage()
);
assertEquals(
"Nonexistent (999): book not found",
result.failedCheckouts().get(1).getMessage()
);
}
@Test
void testBulkCheckoutAllSuccess() {
List<Book> booksToCheckout = List.of(book1, book2);
List<String> booksToCheckout = List.of("123", "456");
BulkCheckoutResult result = library.checkoutBooks(booksToCheckout);
assertTrue(result.isCompletelySuccessful());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment