From 00e90aaa0c932fc56bf1086f688c69cdc0cdd15d Mon Sep 17 00:00:00 2001 From: RKaraMos_EVO Date: Fri, 12 Jun 2026 23:32:26 +0200 Subject: [PATCH] ajout du converter Info-entity-DTO + tests --- .../but3/dev62/mylibrary/book/BookDTO.java | 22 +++++ .../book/converter/BookConverter.java | 42 +++++++++ .../book/converter/BookConverterTest.java | 86 +++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java create mode 100644 mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverter.java create mode 100644 mylibrary/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverterTest.java diff --git a/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java b/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java new file mode 100644 index 0000000..8e3a505 --- /dev/null +++ b/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java @@ -0,0 +1,22 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.book; + +import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Category; +import java.time.LocalDate; +import java.util.List; +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class BookDTO { + private final long isbn; + private final String title; + private final String author; + private final String publisher; + private final LocalDate publicationDate; + private final double price; + private final int quantity; + private final List categories; + private final String description; + private final String language; +} diff --git a/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverter.java b/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverter.java new file mode 100644 index 0000000..4dcefe2 --- /dev/null +++ b/mylibrary/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverter.java @@ -0,0 +1,42 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.book.converter; + +import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDTO; +import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; + +public final class BookConverter { + + private BookConverter() { + + } + + public static Book toDomain(BookInfo book) { + return Book.builder() + .isbn(book.isbn()) + .title(book.title()) + .author(book.author()) + .publisher(book.publisher()) + .publicationDate(book.publicationDate()) + .price(book.price()) + .quantity(book.quantity()) + .categories(book.categories()) + .description(book.description()) + .language(book.language()) + .build(); + } + + public static BookDTO toDTO(Book book) { + return BookDTO.builder() + .isbn(book.getIsbn()) + .title(book.getTitle()) + .author(book.getAuthor()) + .publisher(book.getPublisher()) + .publicationDate(book.getPublicationDate()) + .price(book.getPrice()) + .quantity(book.getQuantity()) + .categories(book.getCategories()) + .description(book.getDescription()) + .language(book.getLanguage()) + .build(); + } +} diff --git a/mylibrary/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverterTest.java b/mylibrary/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverterTest.java new file mode 100644 index 0000000..f4ee00c --- /dev/null +++ b/mylibrary/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/converter/BookConverterTest.java @@ -0,0 +1,86 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.book.converter; + +import fr.iut_fbleau.but3.dev62.mylibrary.book.BookDTO; +import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; +import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Category; +import java.time.LocalDate; +import java.util.List; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class BookConverterTest { + + @Nested + @DisplayName("toDomain() method tests") + class ToDomainTests { + + @Test + @DisplayName("Should convert BookInfo to Book entity preserving all fields") + void testToDomain() { + BookInfo info = new BookInfo( + 9780321125217L, + "DDD", + "Evans", + "Addison-Wesley", + LocalDate.of(2003, 8, 22), + 54.99, + 10, + List.of(Category.SCIENCE), + "desc", + "EN" + ); + + Book book = BookConverter.toDomain(info); + + assertEquals(info.isbn(), book.getIsbn()); + assertEquals(info.title(), book.getTitle()); + assertEquals(info.author(), book.getAuthor()); + assertEquals(info.publisher(), book.getPublisher()); + assertEquals(info.publicationDate(), book.getPublicationDate()); + assertEquals(info.price(), book.getPrice()); + assertEquals(info.quantity(), book.getQuantity()); + assertEquals(info.categories(), book.getCategories()); + assertEquals(info.description(), book.getDescription()); + assertEquals(info.language(), book.getLanguage()); + } + } + + @Nested + @DisplayName("toDTO() method tests") + class ToDTOTests { + + @Test + @DisplayName("Should convert Book entity to BookDTO preserving all fields") + void testToDTO() { + Book book = Book.builder() + .isbn(123L) + .title("T") + .author("A") + .publisher("P") + .publicationDate(LocalDate.of(2020, 1, 1)) + .price(9.99) + .quantity(5) + .categories(List.of(Category.FICTION)) + .description("d") + .language("FR") + .build(); + + BookDTO dto = BookConverter.toDTO(book); + + assertEquals(123L, dto.getIsbn()); + assertEquals("T", dto.getTitle()); + assertEquals("A", dto.getAuthor()); + assertEquals("P", dto.getPublisher()); + assertEquals(LocalDate.of(2020, 1, 1), dto.getPublicationDate()); + assertEquals(9.99, dto.getPrice()); + assertEquals(5, dto.getQuantity()); + assertEquals(List.of(Category.FICTION), dto.getCategories()); + assertEquals("d", dto.getDescription()); + assertEquals("FR", dto.getLanguage()); + } + } +}