From e06a0b3b3cbaf84c934391da7775b9e91ecc4c18 Mon Sep 17 00:00:00 2001 From: thuret Date: Wed, 11 Jun 2025 15:40:58 +0200 Subject: [PATCH] correction de bug et upgrade du BDD --- .../repository/SubscriptionRepository.java | 6 +++ .../validator/SubscriptionValidator.java | 18 +++++--- .../subscription/SubscriptionSteps.java | 46 ++++++++++++++++++- .../SubscriptionRepositoryTest.java | 4 +- .../validator/SubscriptionValidatorTest.java | 6 +-- .../resources/features/subscription.feature | 27 ++++++++++- 6 files changed, 94 insertions(+), 13 deletions(-) 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 index 5d4e682..d7fef2b 100644 --- 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 @@ -28,6 +28,12 @@ public class SubscriptionRepository { .findFirst(); } + public Optional findById(UUID id) { + return this.subscriptions.stream() + .filter(subscription -> subscription.getId().equals(id)) + .findFirst(); + } + public boolean existsById(UUID uuid) { return this.subscriptions.stream() .anyMatch(subscription -> subscription.getId().equals(uuid)); 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 index 51112ec..07de674 100644 --- 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 @@ -17,19 +17,25 @@ public class SubscriptionValidator { } - public static void validate(SubscriptionInfo newSubscription) throws fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException { + public static void validate(SubscriptionInfo newSubscription) throws NotValidSubscriptionException { + validateCustomerId(newSubscription); validateDuration(newSubscription); validatePaymentMethod(newSubscription); } - - private static void validateDuration(SubscriptionInfo newSubscription) throws fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException { - if (newSubscription.duration() == null) { - throw new fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException(DURATION_CANNOT_BE_NULL); + private static void validateCustomerId(SubscriptionInfo newSubscription) throws NotValidSubscriptionException { + if (newSubscription.customerId() == null) { + throw new NotValidSubscriptionException(CUSTOMER_ID_CANNOT_BE_NULL); } } - private static void validatePaymentMethod(SubscriptionInfo newSubscription) throws fr.iut_fbleau.but3.dev62.mylibrary.subscription.exception.NotValidSubscriptionException { + private static void validateDuration(SubscriptionInfo newSubscription) throws NotValidSubscriptionException { + if (newSubscription.duration() == null) { + throw new NotValidSubscriptionException(DURATION_CANNOT_BE_NULL); + } + } + + private static void validatePaymentMethod(SubscriptionInfo newSubscription) throws NotValidSubscriptionException { if (newSubscription.paymentMethod().isBlank()) { throw new NotValidSubscriptionException(PAYMENT_METHOD_CANNOT_BE_BLANK); } diff --git a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/subscription/SubscriptionSteps.java b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/subscription/SubscriptionSteps.java index eb52963..324fc34 100644 --- a/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/subscription/SubscriptionSteps.java +++ b/src/test/java/fr/iut_fbleau/but3/dev62/mylibrary/features/subscription/SubscriptionSteps.java @@ -9,8 +9,10 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import fr.iut_fbleau.but3.dev62.mylibrary.customer.exception.NotValidCustomerException; import fr.iut_fbleau.but3.dev62.mylibrary.customer.usecase.CustomerUseCase; import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionInfo; +import fr.iut_fbleau.but3.dev62.mylibrary.subscription.SubscriptionDTO; 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.usecase.SubscriptionUseCase; import fr.iut_fbleau.but3.dev62.mylibrary.customer.entity.Customer; @@ -25,6 +27,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.ArrayList; public class SubscriptionSteps { @@ -32,6 +35,8 @@ public class SubscriptionSteps { private final SubscriptionRepository subscriptionRepository = new SubscriptionRepository(); private final SubscriptionUseCase subscriptionUseCase = new SubscriptionUseCase(subscriptionRepository); private NotValidSubscriptionException notValidSubscriptionException; + private SubscriptionNotFoundException subscriptionNotFoundException; + private static final List subscriptions = new ArrayList<>(); private final CustomerRepository customerRepository = new CustomerRepository(); private UUID subscriptionRegistration; @@ -82,6 +87,8 @@ public class SubscriptionSteps { @Then("a new subscription is created") public void aNewSubscriptionIsCreated() { + assertNotNull(subscriptionRegistration); + assertTrue(subscriptionRepository.existsById(subscriptionRegistration)); } @@ -119,11 +126,48 @@ public class SubscriptionSteps { } @Then("the subsription duration creation fails") - public void theSubsriptionDurationCreationFails() {assertNotNull(notValidSubscriptionException);} + public void theSubsriptionDurationCreationFails() { + assertNotNull(notValidSubscriptionException); + } @And("I receive an error for validation subscription message containing {string}") public void iReceiveAnErrorForValidationSubscriptionMessageContaining(String errorMessage) { assertEquals(errorMessage, notValidSubscriptionException.getMessage()); } + + @When("I try to get a subscription with the following customerId:") + public void iTryToGetASubscriptionWithTheFollowingCustomerId(DataTable dataTable) { + List> rows = dataTable.asMaps(String.class, String.class); + Map subscriptionData = rows.getFirst(); + + UUID customerId = UUID.fromString(subscriptionData.get("customerId")); + try { + subscriptionRegistration = subscriptionUseCase.findSubscriptionByCustomerId(customerId) + .orElseThrow(() -> new SubscriptionNotFoundException(customerId)) + .getId(); + } catch (SubscriptionNotFoundException e) { + subscriptionNotFoundException = e; + } + } + + @Then("I receive the following subscription:") + public void iReceiveTheFollowingSubscription(DataTable dataTable) { + List> rows = dataTable.asMaps(String.class, String.class); + Map expectedSubscription = rows.getFirst(); + + SubscriptionDTO subscription = subscriptionUseCase.findSubscriptionByCustomerId( + UUID.fromString(expectedSubscription.get("customerId")) + ).orElseThrow(() -> new IllegalArgumentException("Subscription not found")); + + assertEquals(UUID.fromString(expectedSubscription.get("customerId")), subscription.getCustomerId()); + assertEquals(Integer.parseInt(expectedSubscription.get("duration")), subscription.getDuration()); + assertEquals(expectedSubscription.get("paymentMethod"), subscription.getPaymentMethod()); + + } + + @Then("I receive an error for not found subscription") + public void iReceiveAnErrorForNotFoundSubscription() { + assertNotNull(subscriptionNotFoundException); + } } 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 index 83ea5b2..0b2b8de 100644 --- 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 @@ -32,7 +32,7 @@ public class SubscriptionRepositoryTest { Subscription1.setRandomUUID(); Subscription2 = Subscription.builder() - .customerId(UUID.fromString("123e4567-e89b-12d3-a456-426614174000")) + .customerId(UUID.fromString("456e4567-e89b-12d3-a456-426614174000")) .duration(24) .paymentMethod("Paypal") .build(); @@ -99,7 +99,7 @@ public class SubscriptionRepositoryTest { @Test @DisplayName("FindById should return subscriptions with matching ID") void testFindById() { - Optional foundSubscription = repository.findByCustomerId(Subscription1.getId()); + Optional foundSubscription = repository.findById(Subscription1.getId()); assertTrue(foundSubscription.isPresent()); assertEquals(Subscription1.getId(), foundSubscription.get().getId()); 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 index 7343e8c..f5d711d 100644 --- 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 @@ -27,13 +27,13 @@ public class SubscriptionValidatorTest { class CustomerIdValidationTests { @Test - @DisplayName("Should throw exception when customer id is blank") + @DisplayName("Should throw exception when customer id is null") void testValidateBlankCustomerId() { - SubscriptionInfo subscriptionWithBlankCustomerId = new SubscriptionInfo(null, 12, "CB"); + SubscriptionInfo subscriptionWithNullCustomerId = new SubscriptionInfo(null, 12, "CB"); NotValidSubscriptionException exception = assertThrows( NotValidSubscriptionException.class, - () -> SubscriptionValidator.validate(subscriptionWithBlankCustomerId) + () -> SubscriptionValidator.validate(subscriptionWithNullCustomerId) ); assertEquals(SubscriptionValidator.CUSTOMER_ID_CANNOT_BE_NULL, diff --git a/src/test/resources/features/subscription.feature b/src/test/resources/features/subscription.feature index ea84780..3a1dd85 100644 --- a/src/test/resources/features/subscription.feature +++ b/src/test/resources/features/subscription.feature @@ -1,5 +1,7 @@ # language: en + + Feature: Manage customer subscription Background: Given the system has the following customers: @@ -25,4 +27,27 @@ Feature: Manage customer subscription | customerId | duration | paymentMethod | | 33333333-3333-3333-3333-333333333333 | 0 | CB | Then the subsription duration creation fails - And I receive an error for validation subscription message containing "Duration must be positive" \ No newline at end of file + And I receive an error for validation subscription message containing "Duration must be positive" + + Scenario: Attempt to get a subscription + Given I create a new subscription with CB: + | customerId | duration | paymentMethod | + | 11111111-1111-1111-1111-111111111111 | 12 | CB | + When I try to get a subscription with the following customerId: + | customerId | + | 11111111-1111-1111-1111-111111111111 | + Then I receive the following subscription: + | subscriptionId | customerId | duration | paymentMethod | debutDate | + | 99999999-9999-9999-9999-999999999999 | 11111111-1111-1111-1111-111111111111 | 12 | CB | 2025-06-11 | + + Scenario: Attempt to find a unexisting subscription + When I try to get a subscription with the following customerId: + | customerId | + | 11111111-1111-1111-1111-111111111111 | + Then I receive an error for not found subscription + + Scenario: Attempt to find a subscription with a non-existing customerId + When I try to get a subscription with the following customerId: + | customerId | + | 44444444-4444-4444-4444-444444444444 | + Then I receive an error for not found subscription \ No newline at end of file