From 8e604b632c216dd1b1295693b6cba491f82a067b Mon Sep 17 00:00:00 2001 From: raphael Date: Tue, 28 Apr 2026 17:26:47 +0200 Subject: [PATCH] Ajout de la partie Subscription + tests. Remove des imports en trops. --- .../but3/dev62/mylibrary/avis/AvisDTO.java | 3 +- .../dev62/mylibrary/avis/entity/Avis.java | 5 +- .../avis/repository/AvisRepository.java | 3 +- .../mylibrary/avis/usecase/AvisUseCase.java | 1 + .../but3/dev62/mylibrary/book/BookDTO.java | 5 +- .../dev62/mylibrary/book/entity/Book.java | 7 +- .../book/repository/BookRepository.java | 5 +- .../mylibrary/book/usecase/BookUseCase.java | 3 +- .../book/validator/BookValidator.java | 3 +- .../dev62/mylibrary/customer/CustomerDTO.java | 3 +- .../mylibrary/customer/entity/Customer.java | 3 +- .../repository/CustomerRepository.java | 3 +- .../customer/usecase/CustomerUseCase.java | 1 + .../but3/dev62/mylibrary/order/OrderDTO.java | 7 +- .../order/converter/OrderConverter.java | 3 +- .../mylibrary/order/entity/LigneCommande.java | 7 +- .../dev62/mylibrary/order/entity/Order.java | 7 +- .../order/repository/OrderRepository.java | 5 +- .../mylibrary/order/usecase/OrderUseCase.java | 3 +- .../mylibrary/subscription/ModePaiement.java | 11 + .../subscription/SubscriptionDTO.java | 17 ++ .../subscription/SubscriptionDuree.java | 19 ++ .../subscription/SubscriptionInfo.java | 12 + .../mylibrary/subscription/TypePaiement.java | 6 + .../converter/SubscriptionConverter.java | 38 ++++ .../subscription/entity/Subscription.java | 25 +++ .../NotValidSubscriptionException.java | 9 + .../SubscriptionNotFoundException.java | 14 ++ .../repository/SubscriptionRepository.java | 52 +++++ .../usecase/SubscriptionUseCase.java | 62 +++++ .../validator/SubscriptionValidator.java | 51 +++++ .../entity/AvisNotFoundExceptionTest.java | 3 +- .../exception/NotValidAvisExceptionTest.java | 3 +- .../avis/usecase/AvisUseCaseTest.java | 2 +- .../exception/BookNotFoundExceptionTest.java | 3 +- .../exception/NotValidBookExceptionTest.java | 3 +- .../book/usecase/BookUseCaseTest.java | 11 +- .../converter/CustomerConverterTest.java | 7 +- .../customer/entity/CustomerTest.java | 5 +- .../IllegalCustomerPointExceptionTest.java | 3 +- .../mylibrary/features/RunCucumberTest.java | 5 +- .../mylibrary/features/avis/AvisSteps.java | 5 +- .../mylibrary/features/book/BookSteps.java | 11 +- .../features/client/CustomerSteps.java | 15 +- .../mylibrary/features/order/OrderSteps.java | 15 +- .../order/converter/OrderConverterTest.java | 12 +- .../mylibrary/order/entity/OrderTest.java | 6 +- .../exception/NotValidOrderExceptionTest.java | 7 +- .../exception/OrderNotFoundExceptionTest.java | 9 +- .../order/repository/OrderRepositoryTest.java | 6 +- .../order/usecase/OrderUseCaseTest.java | 17 +- .../order/validator/OrderValidatorTest.java | 6 +- .../converter/SubscriptionConverterTest.java | 78 +++++++ .../subscription/entity/SubscriptionTest.java | 67 ++++++ .../NotValidSubscriptionExceptionTest.java | 61 +++++ .../SubscriptionNotFoundExceptionTest.java | 48 ++++ .../SubscriptionRepositoryTest.java | 194 ++++++++++++++++ .../usecase/SubscriptionUseCaseTest.java | 211 ++++++++++++++++++ .../validator/SubscriptionValidatorTest.java | 200 +++++++++++++++++ 59 files changed, 1294 insertions(+), 112 deletions(-) create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/ModePaiement.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDTO.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDuree.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionInfo.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/TypePaiement.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverter.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/Subscription.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionException.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundException.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepository.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCase.java create mode 100644 src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidator.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverterTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/SubscriptionTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionExceptionTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundExceptionTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepositoryTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCaseTest.java create mode 100644 src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidatorTest.java diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/AvisDTO.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/AvisDTO.java index 00edcd6..09dad8f 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/AvisDTO.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/AvisDTO.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.avis; -import java.util.UUID; import lombok.Builder; import lombok.Getter; +import java.util.UUID; + @Builder @Getter public class AvisDTO { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/Avis.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/Avis.java index 57bbaf8..715b5b7 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/Avis.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/Avis.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.avis.entity; +import lombok.Builder; +import lombok.Getter; + import java.time.LocalDate; import java.util.UUID; -import lombok.Builder; -import lombok.Getter; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/repository/AvisRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/repository/AvisRepository.java index a48d1c4..d26a933 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/repository/AvisRepository.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/repository/AvisRepository.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.avis.repository; import fr.iut_fbleau.but3.dev62.mylibrary.avis.entity.Avis; +import lombok.NoArgsConstructor; + import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; -import lombok.NoArgsConstructor; @NoArgsConstructor public final class AvisRepository { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCase.java index 7c43fb4..0b81ede 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCase.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCase.java @@ -9,6 +9,7 @@ import fr.iut_fbleau.but3.dev62.mylibrary.avis.repository.AvisRepository; import fr.iut_fbleau.but3.dev62.mylibrary.avis.validator.AvisValidator; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.CustomerNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.repository.CustomerRepository; + import java.util.Optional; import java.util.UUID; diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java index 83807e6..ea1a8d5 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/BookDTO.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book; +import lombok.Builder; +import lombok.Getter; + import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.UUID; -import lombok.Builder; -import lombok.Getter; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/Book.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/Book.java index 80e901a..a40dd1c 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/Book.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/entity/Book.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.entity; - + +import lombok.Builder; +import lombok.Getter; + import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import java.util.UUID; -import lombok.Builder; -import lombok.Getter; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepository.java index e96f55b..447c408 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepository.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/repository/BookRepository.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.repository; - + import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; +import lombok.NoArgsConstructor; + import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; -import lombok.NoArgsConstructor; @NoArgsConstructor public final class BookRepository { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCase.java index 723960c..1f2e03d 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCase.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCase.java @@ -1,5 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.usecase; - + 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.converter.BookConverter; @@ -8,6 +8,7 @@ import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.BookNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException; import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository; import fr.iut_fbleau.but3.dev62.mylibrary.book.validator.BookValidator; + import java.util.Optional; import java.util.UUID; diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java index 76325f2..8313000 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/book/validator/BookValidator.java @@ -1,7 +1,8 @@ package fr.iut_fbleau.but3.dev62.mylibrary.book.validator; - + import fr.iut_fbleau.but3.dev62.mylibrary.book.BookInfo; import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException; + import java.math.BigDecimal; public final class BookValidator { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/CustomerDTO.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/CustomerDTO.java index 96f626b..968968c 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/CustomerDTO.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/CustomerDTO.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer; -import java.util.UUID; import lombok.Builder; import lombok.Getter; +import java.util.UUID; + @Builder @Getter public class CustomerDTO { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/Customer.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/Customer.java index 5a2fa69..911c731 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/Customer.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/Customer.java @@ -2,10 +2,11 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer.entity; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.IllegalCustomerPointException; -import java.util.UUID; import lombok.Builder; import lombok.Getter; +import java.util.UUID; + @Builder @Getter public class Customer { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java index 7d79f32..ed6d835 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/repository/CustomerRepository.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer.repository; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; +import lombok.NoArgsConstructor; + import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; -import lombok.NoArgsConstructor; @NoArgsConstructor public final class CustomerRepository { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java index 3241c30..256526f 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/usecase/CustomerUseCase.java @@ -9,6 +9,7 @@ import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.IllegalCustomerPoin import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.NotValidCustomerException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.repository.CustomerRepository; import fr.iut_fbleau.but3.dev62.mylibrary.customer.validator.CustomerValidator; + import java.util.Optional; import java.util.UUID; diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/OrderDTO.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/OrderDTO.java index 451d8cd..7a2ef07 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/OrderDTO.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/OrderDTO.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order; - -import java.math.BigDecimal; -import java.util.UUID; + import lombok.Builder; import lombok.Getter; + +import java.math.BigDecimal; +import java.util.UUID; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverter.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverter.java index abd7442..99680b2 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverter.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverter.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.converter; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderDTO; import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderInfo; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.LigneCommande; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; + import java.math.BigDecimal; import java.util.List; diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/LigneCommande.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/LigneCommande.java index 9a4d536..e70a249 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/LigneCommande.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/LigneCommande.java @@ -1,9 +1,10 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.entity; - -import java.math.BigDecimal; -import java.util.UUID; + import lombok.Builder; import lombok.Getter; + +import java.math.BigDecimal; +import java.util.UUID; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/Order.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/Order.java index 96612b8..f38cea2 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/Order.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/Order.java @@ -1,12 +1,13 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.entity; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; +import lombok.Builder; +import lombok.Getter; + import java.math.BigDecimal; import java.util.List; import java.util.UUID; -import lombok.Builder; -import lombok.Getter; @Builder @Getter diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepository.java index 127bc6e..c773123 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepository.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepository.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.repository; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; +import lombok.NoArgsConstructor; + import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.UUID; -import lombok.NoArgsConstructor; @NoArgsConstructor public final class OrderRepository { diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCase.java index d6a6a45..5af112b 100644 --- a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCase.java +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCase.java @@ -1,5 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.usecase; - + import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; @@ -15,6 +15,7 @@ import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; import fr.iut_fbleau.but3.dev62.mylibrary.order.exception.NotValidOrderException; import fr.iut_fbleau.but3.dev62.mylibrary.order.repository.OrderRepository; import fr.iut_fbleau.but3.dev62.mylibrary.order.validator.OrderValidator; + import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/ModePaiement.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/ModePaiement.java new file mode 100644 index 0000000..c7800e5 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/ModePaiement.java @@ -0,0 +1,11 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class ModePaiement { + private final TypePaiement type; + private final Object details; +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDTO.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDTO.java new file mode 100644 index 0000000..8deed03 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDTO.java @@ -0,0 +1,17 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription; + +import lombok.Builder; +import lombok.Getter; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.UUID; + +@Builder +@Getter +public class SubscriptionDTO { + private final UUID abonnementId; + private final Date dateDebut; + private final Date dateFin; + private final BigDecimal montantMensuel; +} \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDuree.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDuree.java new file mode 100644 index 0000000..f8bb31f --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionDuree.java @@ -0,0 +1,19 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription; + +import java.math.BigDecimal; + +public enum SubscriptionDuree { + M3,M6,M12; + + + private Integer[] subValues = {3,6,12}; + private BigDecimal[] subPrices = {BigDecimal.valueOf(9.99), BigDecimal.valueOf(9.50), BigDecimal.valueOf(8.99)}; + + public int getValue(){ + return subValues[this.ordinal()]; + } + + public BigDecimal getMonthlyPricing(){ + return subPrices[this.ordinal()]; + } +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionInfo.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionInfo.java new file mode 100644 index 0000000..f758b4b --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/SubscriptionInfo.java @@ -0,0 +1,12 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription; + +import java.util.Date; +import java.util.UUID; + +public record SubscriptionInfo( + UUID clientId, + SubscriptionDuree duree, + ModePaiement modePaiement, + Date dateDebutSouhaitee +) { +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/TypePaiement.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/TypePaiement.java new file mode 100644 index 0000000..c3217ad --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/TypePaiement.java @@ -0,0 +1,6 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription; + +public enum TypePaiement { + CB, + Paypal +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverter.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverter.java new file mode 100644 index 0000000..de66d7c --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverter.java @@ -0,0 +1,38 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.converter; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDTO; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; + +import java.util.Calendar; + +public final class SubscriptionConverter { + + private SubscriptionConverter() { + } + + public static Subscription toDomain(SubscriptionInfo subscriptionInfo) { + Subscription sub = Subscription.builder() + .clientId(subscriptionInfo.clientId()) + .duree(subscriptionInfo.duree()) + .modePaiement(subscriptionInfo.modePaiement()) + .dateDebutSouhaitee(subscriptionInfo.dateDebutSouhaitee()) + .build(); + sub.setRandomUUID(); + return sub; + } + + public static SubscriptionDTO toDTO(Subscription subscription) { + + Calendar cal = Calendar.getInstance(); + cal.setTime(subscription.getDateDebutSouhaitee()); + cal.add(Calendar.MONTH, subscription.getDuree().getValue()); + + return SubscriptionDTO.builder() + .abonnementId(subscription.getAbonnementId()) + .dateDebut(subscription.getDateDebutSouhaitee()) + .dateFin(cal.getTime()) + .montantMensuel(subscription.getDuree().getMonthlyPricing()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/Subscription.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/Subscription.java new file mode 100644 index 0000000..b81bcf5 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/Subscription.java @@ -0,0 +1,25 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity; + + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.ModePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDuree; +import lombok.Builder; +import lombok.Getter; + +import java.util.Date; +import java.util.UUID; + +@Builder +@Getter +public class Subscription { + private UUID abonnementId; + private UUID clientId; + private SubscriptionDuree duree; + private ModePaiement modePaiement; + private Date dateDebutSouhaitee; + + public void setRandomUUID() { + this.abonnementId = UUID.randomUUID(); + } + +} diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionException.java new file mode 100644 index 0000000..88f80a7 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionException.java @@ -0,0 +1,9 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception; + +public class NotValidSubscriptionException extends Exception { + + public NotValidSubscriptionException(String message) { + super(message); + } +} + \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundException.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundException.java new file mode 100644 index 0000000..358e2e1 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundException.java @@ -0,0 +1,14 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception; + +import java.text.MessageFormat; +import java.util.UUID; + +public class SubscriptionNotFoundException extends Exception { + + public static final String THE_SUBSCRIPTION_WITH_ID_DOES_NOT_EXIST_MESSAGE = "The Subscription with id {0} does not exist"; + + public SubscriptionNotFoundException(UUID uuid) { + super(MessageFormat.format(THE_SUBSCRIPTION_WITH_ID_DOES_NOT_EXIST_MESSAGE, uuid)); + } +} + \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepository.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepository.java new file mode 100644 index 0000000..4ef2f95 --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepository.java @@ -0,0 +1,52 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.repository; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; +import lombok.NoArgsConstructor; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +@NoArgsConstructor +public final class SubscriptionRepository { + + private final List subscriptions = new ArrayList<>(); + + public List findAll() { + return subscriptions; + } + + public void deleteAll() { + subscriptions.clear(); + } + + public Subscription save(Subscription newSubscription) { + Optional optionalBookWithSameId = this.findByUuid(newSubscription.getAbonnementId()); + optionalBookWithSameId.ifPresentOrElse(subscriptions::remove, newSubscription::setRandomUUID); + this.subscriptions.add(newSubscription); + return newSubscription; + } + + public Optional findByUuid(UUID uuid) { + return this.subscriptions.stream() + .filter(subscription -> subscription.getAbonnementId().equals(uuid)) + .findFirst(); + } + + public boolean existsById(UUID uuid) { + return this.subscriptions.stream() + .anyMatch(subscription -> subscription.getAbonnementId().equals(uuid)); + } + + public Optional findByClientUuid(UUID uuid) { + return this.subscriptions.stream() + .filter(subscription -> subscription.getClientId().equals(uuid)) + .findFirst(); + } + + public void delete(Subscription subscription) { + this.subscriptions.remove(subscription); + } +} + \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCase.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCase.java new file mode 100644 index 0000000..e34630b --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCase.java @@ -0,0 +1,62 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.usecase; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDTO; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.converter.SubscriptionConverter; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.SubscriptionNotFoundException; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.repository.SubscriptionRepository; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.validator.SubscriptionValidator; + +import java.util.Optional; +import java.util.UUID; + +public final class SubscriptionUseCase { + + private final SubscriptionRepository subscriptionRepository; + + public SubscriptionUseCase(SubscriptionRepository subscriptionRepository) { + this.subscriptionRepository = subscriptionRepository; + } + + public SubscriptionDTO registerSubscription(SubscriptionInfo subscriptionInfo) throws NotValidSubscriptionException { + SubscriptionValidator.validate(subscriptionInfo); + Subscription subscriptionToRegister = SubscriptionConverter.toDomain(subscriptionInfo); + Subscription registeredSubscription = subscriptionRepository.save(subscriptionToRegister); + return SubscriptionConverter.toDTO(registeredSubscription); + } + + public Optional findSubscriptionByUuid(UUID uuid) { + Optional optionalSubscription = subscriptionRepository.findByClientUuid(uuid); + return optionalSubscription.map(SubscriptionConverter::toDTO); + } + + public SubscriptionDTO updateSubscription(UUID uuid, SubscriptionInfo subscriptionInfo) throws SubscriptionNotFoundException, NotValidSubscriptionException { + SubscriptionValidator.validate(subscriptionInfo); + Subscription existingSubscription = getSubscriptionIfNotFoundThrowException(uuid); + Subscription updatedSubscription = Subscription.builder() + .abonnementId(uuid) + .clientId(subscriptionInfo.clientId()) + .duree(subscriptionInfo.duree()) + .modePaiement(subscriptionInfo.modePaiement()) + .dateDebutSouhaitee(subscriptionInfo.dateDebutSouhaitee()) + .build(); + Subscription saved = subscriptionRepository.save(updatedSubscription); + return SubscriptionConverter.toDTO(saved); + } + + public void deleteSubscription(UUID uuid) throws SubscriptionNotFoundException { + Subscription subscriptionToDelete = getSubscriptionIfNotFoundThrowException(uuid); + subscriptionRepository.delete(subscriptionToDelete); + } + + private Subscription getSubscriptionIfNotFoundThrowException(UUID uuid) throws SubscriptionNotFoundException { + Optional optionalSubscription = subscriptionRepository.findByUuid(uuid); + if (optionalSubscription.isEmpty()) { + throw new SubscriptionNotFoundException(uuid); + } + return optionalSubscription.get(); + } +} + \ No newline at end of file diff --git a/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidator.java b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidator.java new file mode 100644 index 0000000..c8b3f0c --- /dev/null +++ b/src/main/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidator.java @@ -0,0 +1,51 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.validator; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.TypePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException; + +public final class SubscriptionValidator { + + public static final String Client_ID_NOT_VALID = "l'identifient du client est incorect" ; + public static final String LA_DUREE_RENSEIGNEE_N_EST_PAS_CORRECTE = "La durée renseignée n'est pas correcte"; + public static final String LE_TYPE_DE_PAYEMENT_N_EST_PAS_PRIS_EN_CHARGE = "Le type de payement n'est pas pris en charge"; + public static final String LA_DATE_DE_DEBUT_N_A_PAS_ETE_RENSEIGNEE = "La date de début n'a pas été renseignée"; + + private SubscriptionValidator() { + } + + public static void validate(SubscriptionInfo bookInfo) throws NotValidSubscriptionException { + validateClientID(bookInfo); + validateDuree(bookInfo); + validateModePaiement(bookInfo); + validateDateDebut(bookInfo); + } + + private static void validateClientID(SubscriptionInfo bookInfo) throws NotValidSubscriptionException { + if (bookInfo.clientId() == null){ + throw new NotValidSubscriptionException(Client_ID_NOT_VALID); + } + } + + private static void validateDuree(SubscriptionInfo bookInfo) throws NotValidSubscriptionException { + try { + if (bookInfo.duree().getValue() != 3 && bookInfo.duree().getValue() != 6 && bookInfo.duree().getValue() != 12){ + throw new NotValidSubscriptionException(LA_DUREE_RENSEIGNEE_N_EST_PAS_CORRECTE); + } + } catch (Exception e) { + throw new NotValidSubscriptionException(LA_DUREE_RENSEIGNEE_N_EST_PAS_CORRECTE); + } + } + + private static void validateModePaiement(SubscriptionInfo bookInfo) throws NotValidSubscriptionException{ + if (bookInfo.modePaiement().getType() != TypePaiement.CB && bookInfo.modePaiement().getType() != TypePaiement.Paypal){ + throw new NotValidSubscriptionException(LE_TYPE_DE_PAYEMENT_N_EST_PAS_PRIS_EN_CHARGE); + } + } + + private static void validateDateDebut(SubscriptionInfo bookInfo) throws NotValidSubscriptionException{ + if (bookInfo.dateDebutSouhaitee() == null){ + throw new NotValidSubscriptionException(LA_DATE_DE_DEBUT_N_A_PAS_ETE_RENSEIGNEE); + } + } +} \ No newline at end of file diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/AvisNotFoundExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/AvisNotFoundExceptionTest.java index fd7cc94..aa70cb3 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/AvisNotFoundExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/entity/AvisNotFoundExceptionTest.java @@ -5,7 +5,8 @@ import org.junit.jupiter.api.Test; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class AvisNotFoundExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/exception/NotValidAvisExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/exception/NotValidAvisExceptionTest.java index 066dbe1..768db03 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/exception/NotValidAvisExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/exception/NotValidAvisExceptionTest.java @@ -5,7 +5,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class NotValidAvisExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCaseTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCaseTest.java index 8a33155..82d78c3 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCaseTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/avis/usecase/AvisUseCaseTest.java @@ -5,8 +5,8 @@ import fr.iut_fbleau.but3.dev62.mylibrary.avis.AvisInfo; import fr.iut_fbleau.but3.dev62.mylibrary.avis.entity.Avis; import fr.iut_fbleau.but3.dev62.mylibrary.avis.exception.NotValidAvisException; import fr.iut_fbleau.but3.dev62.mylibrary.avis.repository.AvisRepository; -import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.CustomerNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; +import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.CustomerNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.repository.CustomerRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java index 90ae6e3..6b368aa 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/BookNotFoundExceptionTest.java @@ -5,7 +5,8 @@ import org.junit.jupiter.api.Test; import java.util.UUID; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class BookNotFoundExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookExceptionTest.java index 427bd1b..cb86316 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/exception/NotValidBookExceptionTest.java @@ -5,7 +5,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class NotValidBookExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCaseTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCaseTest.java index 34145e2..85c2dca 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCaseTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/book/usecase/BookUseCaseTest.java @@ -6,11 +6,6 @@ import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.BookNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.book.exception.NotValidBookException; import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository; -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.List; -import java.util.Optional; -import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -20,6 +15,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/converter/CustomerConverterTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/converter/CustomerConverterTest.java index 231fbab..27f558c 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/converter/CustomerConverterTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/converter/CustomerConverterTest.java @@ -3,14 +3,13 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer.converter; import fr.iut_fbleau.but3.dev62.mylibrary.customer.CustomerDTO; import fr.iut_fbleau.but3.dev62.mylibrary.customer.CustomerInfo; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; -import java.util.UUID; 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.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertNull; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; @DisplayName("CustomerConverter Unit Tests") class CustomerConverterTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/CustomerTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/CustomerTest.java index 515187e..04cdb15 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/CustomerTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/entity/CustomerTest.java @@ -1,13 +1,14 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer.entity; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.IllegalCustomerPointException; -import org.junit.jupiter.api.Test; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.Test; import java.util.UUID; +import static org.junit.jupiter.api.Assertions.*; + class CustomerTest { @Test diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/exception/IllegalCustomerPointExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/exception/IllegalCustomerPointExceptionTest.java index c89306c..9d74209 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/exception/IllegalCustomerPointExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/customer/exception/IllegalCustomerPointExceptionTest.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.customer.exception; -import java.text.MessageFormat; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; +import java.text.MessageFormat; + import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/RunCucumberTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/RunCucumberTest.java index 6080357..04702e6 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/RunCucumberTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/RunCucumberTest.java @@ -1,6 +1,9 @@ package fr.iut_fbleau.but3.dev62.mylibrary.features; -import org.junit.platform.suite.api.*; +import org.junit.platform.suite.api.ConfigurationParameter; +import org.junit.platform.suite.api.IncludeEngines; +import org.junit.platform.suite.api.SelectClasspathResource; +import org.junit.platform.suite.api.Suite; import static io.cucumber.junit.platform.engine.Constants.GLUE_PROPERTY_NAME; import static io.cucumber.junit.platform.engine.Constants.PLUGIN_PROPERTY_NAME; diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/avis/AvisSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/avis/AvisSteps.java index b71b08e..f4c68d2 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/avis/AvisSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/avis/AvisSteps.java @@ -1,7 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.features.avis; -import static org.junit.jupiter.api.Assertions.*; - import fr.iut_fbleau.but3.dev62.mylibrary.avis.AvisDTO; import fr.iut_fbleau.but3.dev62.mylibrary.avis.AvisInfo; import fr.iut_fbleau.but3.dev62.mylibrary.avis.exception.NotValidAvisException; @@ -18,6 +16,7 @@ import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; + import java.math.BigDecimal; import java.time.LocalDate; import java.util.HashMap; @@ -25,6 +24,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import static org.junit.jupiter.api.Assertions.*; + public class AvisSteps { private final CustomerRepository customerRepository = new CustomerRepository(); diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java index 1c81f01..5d465a6 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/book/BookSteps.java @@ -1,7 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.features.book; -import static org.junit.jupiter.api.Assertions.*; - 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; @@ -15,13 +13,12 @@ import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; + import java.math.BigDecimal; import java.time.LocalDate; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; public class BookSteps { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/client/CustomerSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/client/CustomerSteps.java index e71f786..291c53c 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/client/CustomerSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/client/CustomerSteps.java @@ -1,11 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.features.client; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - import fr.iut_fbleau.but3.dev62.mylibrary.customer.CustomerDTO; import fr.iut_fbleau.but3.dev62.mylibrary.customer.CustomerInfo; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; @@ -19,11 +13,10 @@ import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.UUID; + +import java.util.*; + +import static org.junit.jupiter.api.Assertions.*; public class CustomerSteps { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/order/OrderSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/order/OrderSteps.java index d5405c4..4099502 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/order/OrderSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/order/OrderSteps.java @@ -1,21 +1,11 @@ package fr.iut_fbleau.but3.dev62.mylibrary.features.order; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.junit.jupiter.api.Assertions.assertTrue; - import fr.iut_fbleau.but3.dev62.mylibrary.book.entity.Book; import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.CustomerNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.repository.CustomerRepository; -import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; -import fr.iut_fbleau.but3.dev62.mylibrary.order.LigneCommandeInfo; -import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderDTO; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.order.*; import fr.iut_fbleau.but3.dev62.mylibrary.order.exception.NotValidOrderException; import fr.iut_fbleau.but3.dev62.mylibrary.order.repository.OrderRepository; import fr.iut_fbleau.but3.dev62.mylibrary.order.usecase.OrderUseCase; @@ -25,6 +15,7 @@ import io.cucumber.java.en.And; import io.cucumber.java.en.Given; import io.cucumber.java.en.Then; import io.cucumber.java.en.When; + import java.math.BigDecimal; import java.time.LocalDate; import java.util.HashMap; @@ -32,6 +23,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import static org.junit.jupiter.api.Assertions.*; + public class OrderSteps { private final CustomerRepository customerRepository = new CustomerRepository(); diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverterTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverterTest.java index 830cfa5..e527210 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverterTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/converter/OrderConverterTest.java @@ -1,20 +1,16 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.converter; - -import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; -import fr.iut_fbleau.but3.dev62.mylibrary.order.LigneCommandeInfo; -import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderDTO; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderInfo; + +import fr.iut_fbleau.but3.dev62.mylibrary.order.*; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.LigneCommande; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; - + import java.math.BigDecimal; import java.util.List; import java.util.UUID; - + import static org.junit.jupiter.api.Assertions.*; @DisplayName("OrderConverter Unit Tests") diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/OrderTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/OrderTest.java index 5bd7468..04f7411 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/OrderTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/entity/OrderTest.java @@ -1,14 +1,14 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.entity; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; - + import java.math.BigDecimal; import java.util.List; import java.util.UUID; - + import static org.junit.jupiter.api.Assertions.*; class OrderTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/NotValidOrderExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/NotValidOrderExceptionTest.java index 9025e0a..3c13c35 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/NotValidOrderExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/NotValidOrderExceptionTest.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.exception; - + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; - -import static org.junit.jupiter.api.Assertions.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; class NotValidOrderExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/OrderNotFoundExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/OrderNotFoundExceptionTest.java index 2c2198b..ce4937d 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/OrderNotFoundExceptionTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/exception/OrderNotFoundExceptionTest.java @@ -1,11 +1,12 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.exception; - + import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; - + import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.*; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class OrderNotFoundExceptionTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepositoryTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepositoryTest.java index 73ec9fc..75bd662 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepositoryTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/repository/OrderRepositoryTest.java @@ -1,5 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.repository; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; @@ -7,12 +7,12 @@ 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.math.BigDecimal; import java.util.List; import java.util.Optional; import java.util.UUID; - + import static org.junit.jupiter.api.Assertions.*; class OrderRepositoryTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCaseTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCaseTest.java index b7cf1f4..591ad3d 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCaseTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/usecase/OrderUseCaseTest.java @@ -5,19 +5,10 @@ import fr.iut_fbleau.but3.dev62.mylibrary.book.repository.BookRepository; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.CustomerNotFoundException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.repository.CustomerRepository; -import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; -import fr.iut_fbleau.but3.dev62.mylibrary.order.LigneCommandeInfo; -import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderDTO; -import fr.iut_fbleau.but3.dev62.mylibrary.order.OrderInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.order.*; import fr.iut_fbleau.but3.dev62.mylibrary.order.entity.Order; import fr.iut_fbleau.but3.dev62.mylibrary.order.exception.NotValidOrderException; import fr.iut_fbleau.but3.dev62.mylibrary.order.repository.OrderRepository; -import java.math.BigDecimal; -import java.time.LocalDate; -import java.util.List; -import java.util.Optional; -import java.util.UUID; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -27,6 +18,12 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.*; diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/validator/OrderValidatorTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/validator/OrderValidatorTest.java index ee928db..4401d7b 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/validator/OrderValidatorTest.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/order/validator/OrderValidatorTest.java @@ -1,5 +1,5 @@ package fr.iut_fbleau.but3.dev62.mylibrary.order.validator; - + import fr.iut_fbleau.but3.dev62.mylibrary.order.AdresseLivraison; import fr.iut_fbleau.but3.dev62.mylibrary.order.LigneCommandeInfo; import fr.iut_fbleau.but3.dev62.mylibrary.order.ModePaiement; @@ -8,10 +8,10 @@ import fr.iut_fbleau.but3.dev62.mylibrary.order.exception.NotValidOrderException import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; - + import java.util.List; import java.util.UUID; - + import static org.junit.jupiter.api.Assertions.*; class OrderValidatorTest { diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverterTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverterTest.java new file mode 100644 index 0000000..31f5bb4 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/converter/SubscriptionConverterTest.java @@ -0,0 +1,78 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.converter; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.*; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.Calendar; +import java.util.Date; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +@DisplayName("SubscriptionConverter Unit Tests") +class SubscriptionConverterTest { + + @Nested + @DisplayName("toDomain() method tests") + class ToDomainTests { + + @Test + @DisplayName("Should convert SubscriptionInfo to Subscription domain object") + void shouldConvertSubscriptionInfoToDomain() { + SubscriptionInfo subscriptionInfo = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date() + ); + + Subscription result = SubscriptionConverter.toDomain(subscriptionInfo); + + assertNotNull(result); + assertEquals(subscriptionInfo.clientId(), result.getClientId()); + assertEquals(subscriptionInfo.duree(), result.getDuree()); + assertEquals(subscriptionInfo.modePaiement().getType(), result.getModePaiement().getType()); + assertEquals(subscriptionInfo.modePaiement().getDetails(), result.getModePaiement().getDetails()); + assertEquals(subscriptionInfo.dateDebutSouhaitee(), result.getDateDebutSouhaitee()); + } + } + + @Nested + @DisplayName("toDTO() method tests") + class ToDTOTests { + + @Test + @DisplayName("Should convert Subscription domain object to SubscriptionDTO with all fields mapped correctly") + void shouldConvertSubscriptionToDTO() { + Subscription subscription = Subscription.builder() + .clientId(UUID.randomUUID()) + .duree(SubscriptionDuree.M3) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build()) + .dateDebutSouhaitee(new Date()) + .build(); + subscription.setRandomUUID(); + + SubscriptionDTO result = SubscriptionConverter.toDTO(subscription); + + Calendar cal = Calendar.getInstance(); + cal.setTime(subscription.getDateDebutSouhaitee()); + cal.add(Calendar.MONTH, subscription.getDuree().getValue()); + + assertNotNull(result); + assertEquals(subscription.getAbonnementId(), result.getAbonnementId()); + assertEquals(subscription.getDateDebutSouhaitee(), result.getDateDebut()); + assertEquals(cal.getTime(), result.getDateFin()); + assertEquals(subscription.getDuree().getMonthlyPricing(), result.getMontantMensuel()); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/SubscriptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/SubscriptionTest.java new file mode 100644 index 0000000..dfd2da6 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/entity/SubscriptionTest.java @@ -0,0 +1,67 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.ModePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDuree; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.TypePaiement; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.Date; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +class SubscriptionTest { + + @Test + @DisplayName("Builder should create a valid Subscription instance") + void testSubscriptionBuilder() { + UUID id = UUID.randomUUID(); + UUID id2 = UUID.randomUUID(); + Date adj = new Date(); + + Subscription subscription = Subscription.builder() + .abonnementId(id) + .clientId(id2) + .duree(SubscriptionDuree.M3) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build()) + .dateDebutSouhaitee(adj) + .build(); + + + assertEquals(id, subscription.getAbonnementId()); + assertEquals(id2, subscription.getClientId()); + assertEquals(SubscriptionDuree.M3, subscription.getDuree()); + assertEquals(TypePaiement.CB, subscription.getModePaiement().getType()); + assertEquals("yes", subscription.getModePaiement().getDetails()); + assertEquals(adj, subscription.getDateDebutSouhaitee()); + } + + @Test + @DisplayName("setRandomUUID should set a new non-null UUID") + void testSetRandomUUID() { + Subscription subscription = Subscription.builder().build(); + UUID originalId = subscription.getAbonnementId(); + + subscription.setRandomUUID(); + + assertNotNull(subscription.getAbonnementId()); + assertNotEquals(originalId, subscription.getAbonnementId()); + } + + @Test + @DisplayName("Two setRandomUUID calls should produce different UUIDs") + void testSetRandomUUIDTwice() { + Subscription subscription = Subscription.builder().build(); + subscription.setRandomUUID(); + UUID firstId = subscription.getAbonnementId(); + + subscription.setRandomUUID(); + UUID secondId = subscription.getAbonnementId(); + + assertNotEquals(firstId, secondId); + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionExceptionTest.java new file mode 100644 index 0000000..8a5d00c --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/NotValidSubscriptionExceptionTest.java @@ -0,0 +1,61 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class NotValidSubscriptionExceptionTest { + + @Test + @DisplayName("Exception should be created with the provided message") + void testExceptionCreation() { + String errorMessage = "Subscription data is not valid"; + + NotValidSubscriptionException exception = new NotValidSubscriptionException(errorMessage); + + assertEquals(errorMessage, exception.getMessage()); + } + + @ParameterizedTest + @ValueSource(strings = { + "Client UUID must be set", + "Durée cannot be blank", + "ModePayement cannot be blank", + "DateDebutSouhaitee cannot be blank" + }) + @DisplayName("Exception should handle different validation messages") + void testExceptionWithDifferentMessages(String errorMessage) { + NotValidSubscriptionException exception = new NotValidSubscriptionException(errorMessage); + + assertEquals(errorMessage, exception.getMessage()); + } + + @Test + @DisplayName("Exception should be properly thrown and caught") + void testExceptionCanBeThrownAndCaught() { + String errorMessage = "Client UUID must be set"; + + Exception exception = assertThrows(NotValidSubscriptionException.class, () -> { + throw new NotValidSubscriptionException(errorMessage); + }); + + assertEquals(errorMessage, exception.getMessage()); + } + + @Test + @DisplayName("Exception should be catchable as a general Exception") + void testExceptionInheritance() { + String errorMessage = "Price must be positive"; + + try { + throw new NotValidSubscriptionException(errorMessage); + } catch (Exception e) { + assertEquals(NotValidSubscriptionException.class, e.getClass()); + assertEquals(errorMessage, e.getMessage()); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundExceptionTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundExceptionTest.java new file mode 100644 index 0000000..4e3e405 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/exception/SubscriptionNotFoundExceptionTest.java @@ -0,0 +1,48 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; + +class SubscriptionNotFoundExceptionTest { + + @Test + @DisplayName("Exception message should contain the UUID provided") + void testExceptionMessageContainsUUID() { + UUID uuid = UUID.randomUUID(); + + SubscriptionNotFoundException exception = new SubscriptionNotFoundException(uuid); + + String expectedMessage = String.format("The Subscription with id %s does not exist", uuid); + assertEquals(expectedMessage, exception.getMessage()); + } + + @Test + @DisplayName("Exception should use the correct constant message format") + void testExceptionUsesConstantMessageFormat() { + UUID uuid = UUID.randomUUID(); + + SubscriptionNotFoundException exception = new SubscriptionNotFoundException(uuid); + + assertEquals("The Subscription with id {0} does not exist", + SubscriptionNotFoundException.THE_SUBSCRIPTION_WITH_ID_DOES_NOT_EXIST_MESSAGE); + assertTrue(exception.getMessage().contains(uuid.toString())); + } + + @Test + @DisplayName("Exception should be properly thrown and caught") + void testExceptionCanBeThrownAndCaught() { + UUID uuid = UUID.randomUUID(); + + try { + throw new SubscriptionNotFoundException(uuid); + } catch (SubscriptionNotFoundException e) { + String expectedMessage = String.format("The Subscription with id %s does not exist", uuid); + assertEquals(expectedMessage, e.getMessage()); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepositoryTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepositoryTest.java new file mode 100644 index 0000000..58c4256 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/repository/SubscriptionRepositoryTest.java @@ -0,0 +1,194 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.repository; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.ModePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDuree; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.TypePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; +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.util.Date; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +class SubscriptionRepositoryTest { + + private SubscriptionRepository repository; + private Subscription subscription1; + private Subscription subscription2; + + @BeforeEach + void setUp() { + repository = new SubscriptionRepository(); + + subscription1 = Subscription.builder() + .clientId(UUID.randomUUID()) + .duree(SubscriptionDuree.M3) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build()) + .dateDebutSouhaitee(new Date()) + .build(); + subscription1.setRandomUUID(); + + subscription2 = Subscription.builder() + .clientId(UUID.randomUUID()) + .duree(SubscriptionDuree.M6) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.Paypal) + .details("No") + .build()) + .dateDebutSouhaitee(new Date(0)) + .build(); + subscription2.setRandomUUID(); + } + + @Test + @DisplayName("New repository should be empty") + void testNewRepositoryIsEmpty() { + assertTrue(repository.findAll().isEmpty()); + assertEquals(0, repository.findAll().size()); + } + + @Nested + @DisplayName("Save operations") + class SaveOperations { + + @Test + @DisplayName("Save should add a new subscription") + void testSaveNewSubscription() { + Subscription saved = repository.save(subscription1); + + assertEquals(1, repository.findAll().size()); + assertEquals(subscription1.getAbonnementId(), saved.getAbonnementId()); + assertEquals(subscription1.getClientId(), saved.getClientId()); + } + + @Test + @DisplayName("Save should update existing subscription with same ID") + void testSaveUpdatesExistingSubscription() { + repository.save(subscription1); + UUID uuid = subscription1.getAbonnementId(); + + Subscription updatedSubscription = Subscription.builder() + .abonnementId(uuid) + .clientId(UUID.randomUUID()) + .duree(SubscriptionDuree.M12) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.CB) + .details("maybe") + .build()) + .dateDebutSouhaitee(new Date(500000)) + .build(); + + Subscription saved = repository.save(updatedSubscription); + + assertEquals(1, repository.findAll().size()); + assertEquals(uuid, saved.getAbonnementId()); + assertEquals(SubscriptionDuree.M12, saved.getDuree()); + assertEquals("maybe", saved.getModePaiement().getDetails()); + } + + @Test + @DisplayName("Save multiple subscriptions should add all of them") + void testSaveMultipleSubscriptions() { + repository.save(subscription1); + repository.save(subscription2); + + assertEquals(2, repository.findAll().size()); + assertTrue(repository.findAll().contains(subscription1)); + assertTrue(repository.findAll().contains(subscription2)); + } + } + + @Nested + @DisplayName("Find operations") + class FindOperations { + + @BeforeEach + void setUpSubscriptions() { + repository.save(subscription1); + repository.save(subscription2); + } + + @Test + @DisplayName("FindAll should return all subscriptions") + void testFindAll() { + assertEquals(2, repository.findAll().size()); + } + + @Test + @DisplayName("findByUuid should return subscription with matching ID") + void testfindByUuid() { + Optional found = repository.findByClientUuid(subscription1.getClientId()); + + assertTrue(found.isPresent()); + assertEquals(subscription1.getAbonnementId(), found.get().getAbonnementId()); + assertEquals(subscription1.getDuree(), found.get().getDuree()); + } + + @Test + @DisplayName("FindById should return empty Optional when ID doesn't exist") + void testFindByIdNotFound() { + Optional found = repository.findByUuid(UUID.randomUUID()); + + assertTrue(found.isEmpty()); + } + + @Test + @DisplayName("ExistsById should return true when ID exists") + void testExistsByIdExists() { + assertTrue(repository.existsById(subscription1.getAbonnementId())); + } + + @Test + @DisplayName("ExistsById should return false when ID doesn't exist") + void testExistsByIdNotExists() { + assertFalse(repository.existsById(UUID.randomUUID())); + } + } + + @Nested + @DisplayName("Delete operations") + class DeleteOperations { + + @BeforeEach + void setUpSubscriptions() { + repository.save(subscription1); + repository.save(subscription2); + } + + @Test + @DisplayName("Delete should remove the specified subscription") + void testDelete() { + repository.delete(subscription1); + + assertEquals(1, repository.findAll().size()); + assertFalse(repository.findAll().contains(subscription1)); + assertTrue(repository.findAll().contains(subscription2)); + } + + @Test + @DisplayName("DeleteAll should remove all subscriptions") + void testDeleteAll() { + repository.deleteAll(); + + assertTrue(repository.findAll().isEmpty()); + } + + @Test + @DisplayName("Delete should not throw exception when subscription doesn't exist") + void testDeleteNonExistentSubscription() { + Subscription nonExistent = Subscription.builder().clientId(UUID.randomUUID()).build(); + nonExistent.setRandomUUID(); + + assertDoesNotThrow(() -> repository.delete(nonExistent)); + assertEquals(2, repository.findAll().size()); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCaseTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCaseTest.java new file mode 100644 index 0000000..e311de0 --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/usecase/SubscriptionUseCaseTest.java @@ -0,0 +1,211 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.usecase; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.*; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.entity.Subscription; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.SubscriptionNotFoundException; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.repository.SubscriptionRepository; +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 org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.util.Date; +import java.util.Optional; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class SubscriptionUseCaseTest { + + @Mock + private SubscriptionRepository subscriptionRepository; + + @InjectMocks + private SubscriptionUseCase subscriptionUseCase; + + private UUID subscriptionId; + private UUID subscriptionClientId; + private Subscription testSubscription; + private SubscriptionInfo validSubscriptionInfo; + + @BeforeEach + void setUp() { + subscriptionId = UUID.randomUUID(); + subscriptionClientId = UUID.randomUUID(); + + Date adj = new Date(); + + testSubscription = Subscription.builder() + .abonnementId(subscriptionId) + .clientId(subscriptionClientId) + .duree(SubscriptionDuree.M3) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build()) + .dateDebutSouhaitee(new Date()) + .build(); + + validSubscriptionInfo = new SubscriptionInfo( + subscriptionClientId, + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + adj + ); + } + + @Nested + @DisplayName("Register subscription tests") + class RegisterSubscriptionTests { + + @Test + @DisplayName("Should register subscription when valid data is provided") + void testRegisterSubscriptionWithValidData() throws NotValidSubscriptionException { + when(subscriptionRepository.save(any(Subscription.class))).thenReturn(testSubscription); + + SubscriptionDTO returnedSubscriptionDTO = subscriptionUseCase.registerSubscription(validSubscriptionInfo); + + assertNotNull(returnedSubscriptionDTO); + assertEquals(subscriptionId, returnedSubscriptionDTO.getAbonnementId()); + verify(subscriptionRepository, times(1)).save(any(Subscription.class)); + } + + @Test + @DisplayName("Should throw exception when subscription data is not valid") + void testRegisterSubscriptionWithInvalidData() { + SubscriptionInfo invalidSubscriptionInfo = new SubscriptionInfo( + null, + null, + null, + null + ); + + assertThrows(NotValidSubscriptionException.class, + () -> subscriptionUseCase.registerSubscription(invalidSubscriptionInfo)); + + verify(subscriptionRepository, never()).save(any(Subscription.class)); + } + } + + @Nested + @DisplayName("Find subscription tests") + class FindSubscriptionTests { + + @Test + @DisplayName("Should return subscription when client UUID exists") + void testFindSubscriptionByUuid() { + when(subscriptionRepository.findByClientUuid(subscriptionClientId)).thenReturn(Optional.of(testSubscription)); + + Optional foundSubscription = subscriptionUseCase.findSubscriptionByUuid(subscriptionClientId); + + assertTrue(foundSubscription.isPresent()); + assertEquals(testSubscription.getAbonnementId(), foundSubscription.get().getAbonnementId()); + verify(subscriptionRepository, times(1)).findByClientUuid(subscriptionClientId); + } + + @Test + @DisplayName("Should return empty Optional when UUID doesn't exist") + void testFindSubscriptionByUuidNotFound() { + UUID uuid = UUID.randomUUID(); + + Optional foundSubscription = subscriptionUseCase.findSubscriptionByUuid(uuid); + + assertTrue(foundSubscription.isEmpty()); + } + } + + @Nested + @DisplayName("Update subscription tests") + class UpdateSubscriptionTests { + + @Test + @DisplayName("Should update subscription when valid data is provided") + void testUpdateSubscriptionWithValidData() throws SubscriptionNotFoundException, NotValidSubscriptionException { + when(subscriptionRepository.findByUuid(subscriptionId)).thenReturn(Optional.of(testSubscription)); + + Subscription updatedSubscription = Subscription.builder() + .abonnementId(subscriptionId) + .clientId(subscriptionClientId) + .duree(SubscriptionDuree.M6) + .modePaiement(ModePaiement.builder() + .type(TypePaiement.Paypal) + .details("no") + .build()) + .dateDebutSouhaitee(new Date(0)) + .build(); + + when(subscriptionRepository.save(any(Subscription.class))).thenReturn(updatedSubscription); + + SubscriptionInfo updateInfo = new SubscriptionInfo( + subscriptionClientId, + SubscriptionDuree.M6, + ModePaiement.builder() + .type(TypePaiement.Paypal) + .details("no") + .build(), + new Date(0) + ); + + SubscriptionDTO result = subscriptionUseCase.updateSubscription(subscriptionId, updateInfo); + + assertNotNull(result); + assertEquals(subscriptionId, result.getAbonnementId()); + assertEquals(new Date(0), result.getDateDebut()); + verify(subscriptionRepository, times(1)).findByUuid(subscriptionId); + verify(subscriptionRepository, times(1)).save(any(Subscription.class)); + } + + @Test + @DisplayName("Should throw exception when subscription ID doesn't exist") + void testUpdateSubscriptionNotFound() { + UUID nonExistentId = UUID.randomUUID(); + when(subscriptionRepository.findByUuid(nonExistentId)).thenReturn(Optional.empty()); + + assertThrows(SubscriptionNotFoundException.class, + () -> subscriptionUseCase.updateSubscription(nonExistentId, validSubscriptionInfo)); + + verify(subscriptionRepository, times(1)).findByUuid(nonExistentId); + verify(subscriptionRepository, never()).save(any(Subscription.class)); + } + } + + @Nested + @DisplayName("Delete subscription tests") + class DeleteSubscriptionTests { + + @Test + @DisplayName("Should delete subscription when ID exists") + void testDeleteSubscription() throws SubscriptionNotFoundException { + when(subscriptionRepository.findByUuid(subscriptionId)).thenReturn(Optional.of(testSubscription)); + + assertDoesNotThrow(() -> subscriptionUseCase.deleteSubscription(subscriptionId)); + + verify(subscriptionRepository, times(1)).findByUuid(subscriptionId); + verify(subscriptionRepository, times(1)).delete(testSubscription); + } + + @Test + @DisplayName("Should throw exception when deleting unknown subscription") + void testDeleteSubscriptionNotFound() { + UUID nonExistentId = UUID.randomUUID(); + when(subscriptionRepository.findByUuid(nonExistentId)).thenReturn(Optional.empty()); + + assertThrows(SubscriptionNotFoundException.class, + () -> subscriptionUseCase.deleteSubscription(nonExistentId)); + + verify(subscriptionRepository, times(1)).findByUuid(nonExistentId); + verify(subscriptionRepository, never()).delete(any(Subscription.class)); + } + } +} diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidatorTest.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidatorTest.java new file mode 100644 index 0000000..22d74ad --- /dev/null +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/subscription/validator/SubscriptionValidatorTest.java @@ -0,0 +1,200 @@ +package fr.iut_fbleau.but3.dev62.mylibrary.subscription.validator; + +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.ModePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDuree; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.TypePaiement; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.util.Date; +import java.util.UUID; + +import static org.junit.jupiter.api.Assertions.*; + +class SubscriptionValidatorTest { + + private SubscriptionInfo validSubscription() { + + UUID uuid = UUID.randomUUID(); + Date adj = new Date(); + + return new SubscriptionInfo( + uuid, + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + adj + ); + } + + @Test + @DisplayName("Should validate subscription with valid data") + void testValidateValidSubscription() { + assertDoesNotThrow(() -> SubscriptionValidator.validate(validSubscription())); + } + + @Nested + @DisplayName("UUID validation tests") + class UuidValidationTests { + + @Test + @DisplayName("Should Be valid") + void testValidatenormalUUID() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date(0) + ); + + assertDoesNotThrow(() -> SubscriptionValidator.validate(subscription)); + } + + @Test + @DisplayName("Should throw exception when UUID is blank") + void testValidateBlankUuid() { + SubscriptionInfo subscription = new SubscriptionInfo( + null, + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date(0) + ); + + NotValidSubscriptionException exception = assertThrows(NotValidSubscriptionException.class, + () -> SubscriptionValidator.validate(subscription)); + + assertEquals(SubscriptionValidator.Client_ID_NOT_VALID, exception.getMessage()); + } + } + + @Nested + @DisplayName("Date validation tests") + class DateValidationTests { + + @Test + @DisplayName("Should be good") + void testValidateTodayDate() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date() + ); + + assertDoesNotThrow(() -> SubscriptionValidator.validate(subscription)); + } + + @Test + @DisplayName("Should throw exception when Date is null") + void testValidateNullDate() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + null + ); + + NotValidSubscriptionException exception = assertThrows(NotValidSubscriptionException.class, + () -> SubscriptionValidator.validate(subscription)); + + assertEquals(SubscriptionValidator.LA_DATE_DE_DEBUT_N_A_PAS_ETE_RENSEIGNEE, exception.getMessage()); + } + } + + @Nested + @DisplayName("ModePaiement validation tests") + class ModePaiementValidationTests { + + @Test + @DisplayName("Should be good") + void testValidateGoodModePaiement() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date() + ); + + assertDoesNotThrow(() -> SubscriptionValidator.validate(subscription)); + } + + @Test + @DisplayName("Should throw exception when Date is null") + void testValidateNullModePaiement() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(null) + .details("yes") + .build(), + new Date() + ); + + NotValidSubscriptionException exception = assertThrows(NotValidSubscriptionException.class, + () -> SubscriptionValidator.validate(subscription)); + + assertEquals(SubscriptionValidator.LE_TYPE_DE_PAYEMENT_N_EST_PAS_PRIS_EN_CHARGE, exception.getMessage()); + } + } + + @Nested + @DisplayName("Durée validation tests") + class DureeValidationTests { + + @Test + @DisplayName("Should be good") + void testValidateGoodDuree() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + SubscriptionDuree.M3, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date() + ); + + assertDoesNotThrow(() -> SubscriptionValidator.validate(subscription)); + } + + @Test + @DisplayName("Should throw exception when Date is null") + void testValidateNullDuree() { + SubscriptionInfo subscription = new SubscriptionInfo( + UUID.randomUUID(), + null, + ModePaiement.builder() + .type(TypePaiement.CB) + .details("yes") + .build(), + new Date() + ); + + NotValidSubscriptionException exception = assertThrows(NotValidSubscriptionException.class, + () -> SubscriptionValidator.validate(subscription)); + + assertEquals(SubscriptionValidator.LA_DUREE_RENSEIGNEE_N_EST_PAS_CORRECTE, exception.getMessage()); + } + } +}