From 292963c4c8d8065a1761bd87436e07c917999789 Mon Sep 17 00:00:00 2001
From: Esmaeeil enani <esmaeeilenani@gmail.com>
Date: Tue, 18 Jul 2023 15:15:03 +0300
Subject: [PATCH] Es/enhancement/add tests (#105)

* add abstract to address entity

* #80
fix update car

* fix and complete registration test

* fix Registration IT

* fix and complete registration test

* fix Registration IT

* add more test into registration

* add more test into registration

* add more test into registration

* add more test into registration

* add more test into registration
---
 .../DriverLicenseRepository.java              |  4 ++
 .../RegistrationControllerIT.java             | 70 ++++++++++++++++++-
 2 files changed, 72 insertions(+), 2 deletions(-)

diff --git a/carRental/src/main/java/com/amigoscode/chohort2/carRental/driverLicense/DriverLicenseRepository.java b/carRental/src/main/java/com/amigoscode/chohort2/carRental/driverLicense/DriverLicenseRepository.java
index d7876ea..7763286 100644
--- a/carRental/src/main/java/com/amigoscode/chohort2/carRental/driverLicense/DriverLicenseRepository.java
+++ b/carRental/src/main/java/com/amigoscode/chohort2/carRental/driverLicense/DriverLicenseRepository.java
@@ -3,6 +3,10 @@
 import com.amigoscode.chohort2.carRental.abstracts.repository.CRJpaRepository;
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface DriverLicenseRepository extends CRJpaRepository<DriverLicense,Long> {
+
+    Optional<DriverLicense> findByDriverLicenseNumber(String number);
 }
diff --git a/carRental/src/test/java/com/amigoscode/chohort2/carRental/registration/RegistrationControllerIT.java b/carRental/src/test/java/com/amigoscode/chohort2/carRental/registration/RegistrationControllerIT.java
index d05e248..ab623ba 100644
--- a/carRental/src/test/java/com/amigoscode/chohort2/carRental/registration/RegistrationControllerIT.java
+++ b/carRental/src/test/java/com/amigoscode/chohort2/carRental/registration/RegistrationControllerIT.java
@@ -1,8 +1,16 @@
 package com.amigoscode.chohort2.carRental.registration;
 
 import com.amigoscode.chohort2.carRental.AbstractTestContainer;
+import com.amigoscode.chohort2.carRental.authority.AuthorityConstants;
+import com.amigoscode.chohort2.carRental.carProvider.CarProviderRepository;
+import com.amigoscode.chohort2.carRental.carProvider.VM.CarProviderVM;
+import com.amigoscode.chohort2.carRental.carProviderUser.CarProviderUser;
+import com.amigoscode.chohort2.carRental.carProviderUser.CarProviderUserRepository;
+import com.amigoscode.chohort2.carRental.driverLicense.DriverLicenseRepository;
 import com.amigoscode.chohort2.carRental.driverLicense.VM.DriverLicenseVM;
+import com.amigoscode.chohort2.carRental.registration.VM.CarProviderRegistrationVM;
 import com.amigoscode.chohort2.carRental.registration.VM.ClientRegistrationVM;
+import com.amigoscode.chohort2.carRental.user.User;
 import com.amigoscode.chohort2.carRental.user.UserRepository;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,6 +19,8 @@
 import reactor.core.publisher.Mono;
 
 import java.time.LocalDate;
+import java.util.Optional;
+
 import static org.assertj.core.api.Assertions.*;
 
 class RegistrationControllerIT extends AbstractTestContainer {
@@ -21,17 +31,26 @@ class RegistrationControllerIT extends AbstractTestContainer {
     @Autowired
     private RegistrationService registrationService;
 
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private DriverLicenseRepository driverLicenseRepository;
 
+    @Autowired
+    private CarProviderRepository carProviderRepository;
 
     @Autowired
-    private UserRepository userRepository;
+    private CarProviderUserRepository carProviderUserRepository;
+
+
 
 
     private static final String API_URL = "api/v1/registrations/";
 
 
     @Test
-    void givenClientRegistration_whenSave_thenCreateNewUser() {
+    void givenClientRegistration_whenSave_thenCreateNewClient() {
         // given precondition or setup
         ClientRegistrationVM clientRegistrationVM = (ClientRegistrationVM) new ClientRegistrationVM()
                 .setUsername("esmaeeil")
@@ -67,5 +86,52 @@ void givenClientRegistration_whenSave_thenCreateNewUser() {
 
 
 
+    }
+
+    @Test
+    void givenCarProviderRegistration_whenSave_thenCreateNewCarProvider() {
+        // given precondition or setup
+        CarProviderRegistrationVM carProviderRegistrationVM = (CarProviderRegistrationVM) new CarProviderRegistrationVM()
+                .setUsername("carProvider")
+                .setFirstName("esmaeeil")
+                .setLastName("enani")
+                .setEmail("carProvider@gmail.com")
+                .setNin("12345678988")
+                .setPassword("123456789");
+
+        CarProviderVM carProviderVM = new CarProviderVM()
+                .setName("car provider test")
+                .setCrNumber("123456789");
+
+        carProviderRegistrationVM.setCarProviderVM(carProviderVM);
+
+        // when - action or the behaviour that we are going test
+        webTestClient
+                .post()
+                .uri(API_URL + "car-providers")
+                .contentType(MediaType.APPLICATION_JSON)
+                .accept(MediaType.APPLICATION_JSON)
+                .body(Mono.just(carProviderRegistrationVM), CarProviderRegistrationVM.class)
+                .exchange()
+                .expectStatus().isCreated();
+
+
+        // then verify the output
+        Optional<User> userOpt = userRepository.findByUsernameWithAuthorities(carProviderRegistrationVM.getUsername());
+        assertThat(userOpt).isPresent();
+        User user = userOpt.get();
+        assertThat(user.getAuthorities())
+                .anyMatch(a -> a.getName().equals(AuthorityConstants.CAR_PROVIDER));
+
+        assertThat(user.getAuthorities())
+                .noneMatch(a -> a.getName().equals(AuthorityConstants.CLIENT))
+                .noneMatch(a -> a.getName().equals(AuthorityConstants.ADMIN));
+
+        Optional<CarProviderUser> carProviderUserOpt = carProviderUserRepository.findByUserId(user.getId());
+        assertThat(carProviderUserOpt).isPresent();
+        CarProviderUser carProviderUser = carProviderUserOpt.get();
+        assertThat(carProviderRepository.findById(carProviderUser.getCarProviderId())).isPresent();
+
+
     }
 }
\ No newline at end of file