diff --git a/src/main/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacade.java b/src/main/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacade.java index 3f9e9c1c4..27ac17051 100644 --- a/src/main/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacade.java +++ b/src/main/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacade.java @@ -252,6 +252,8 @@ public void completeConsultantAgencyAssigment( this.consultantAgencyRelationCreatorService.completeConsultantAgencyAssigment( new CreateConsultantAgencyDTOInputAdapter(consultantId, agency), LogService::logInfo)); + + consultantAgencyRelationCreatorService.updateConsultantStatus(consultantId); } /** diff --git a/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorService.java b/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorService.java index 13bdd7ed1..ebc4aa4ca 100644 --- a/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorService.java +++ b/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorService.java @@ -12,6 +12,7 @@ import de.caritas.cob.userservice.api.model.ConsultantAgency; import de.caritas.cob.userservice.api.model.ConsultantAgencyStatus; import de.caritas.cob.userservice.api.model.ConsultantStatus; +import de.caritas.cob.userservice.api.port.out.ConsultantAgencyRepository; import de.caritas.cob.userservice.api.port.out.ConsultantRepository; import de.caritas.cob.userservice.api.port.out.IdentityClient; import de.caritas.cob.userservice.api.service.ConsultantAgencyService; @@ -20,6 +21,7 @@ import de.caritas.cob.userservice.api.service.agency.AgencyService; import de.caritas.cob.userservice.api.tenant.TenantContext; import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; @@ -39,6 +41,8 @@ public class ConsultantAgencyRelationCreatorService { private final @NonNull ConsultingTypeManager consultingTypeManager; private final @NonNull RocketChatAsyncHelper rocketChatAsyncHelper; + private final @NonNull ConsultantAgencyRepository consultantAgencyRepository; + /** * Creates a new {@link ConsultantAgency} based on the {@link ImportRecord} and agency ids. * @@ -107,6 +111,21 @@ public void completeConsultantAgencyAssigment( } } + public void updateConsultantStatus(String consultantId) { + var consultant = retrieveConsultant(consultantId); + updateConsultantStatus(consultant); + } + + private void updateConsultantStatus(Consultant consultant) { + List consultantAgencies = + consultantAgencyRepository.findByConsultantIdAndStatusAndDeleteDateIsNull( + consultant.getId(), ConsultantAgencyStatus.IN_PROGRESS); + if (consultantAgencies.size() == 0) { + consultant.setStatus(ConsultantStatus.CREATED); + consultantRepository.save(consultant); + } + } + private void ensureConsultingTypeRoles(ConsultantAgencyCreationInput input, AgencyDTO agency) { var roles = consultingTypeManager.getConsultingTypeSettings(agency.getConsultingType()).getRoles(); diff --git a/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/RocketChatAsyncHelper.java b/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/RocketChatAsyncHelper.java index ffc577d81..761c387e2 100644 --- a/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/RocketChatAsyncHelper.java +++ b/src/main/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/RocketChatAsyncHelper.java @@ -60,7 +60,7 @@ public void addConsultantToSessions( .onSessions(relevantSessions) .withConsultant(consultant) .addToGroupsOrRollbackOnFailure(); - updateConsultantStatus(consultant, agency); + updateConsultantAgencyStatus(consultant, agency); } catch (Exception e) { consultant.setStatus(ConsultantStatus.ERROR); consultantRepository.save(consultant); @@ -70,19 +70,12 @@ public void addConsultantToSessions( TenantContext.clear(); } - private void updateConsultantStatus(Consultant consultant, AgencyDTO agencyDTO) { + private void updateConsultantAgencyStatus(Consultant consultant, AgencyDTO agencyDTO) { ConsultantAgency consultantAgency = consultantAgencyRepository.findByConsultantIdAndAgencyIdAndStatusAndDeleteDateIsNull( consultant.getId(), agencyDTO.getId(), ConsultantAgencyStatus.IN_PROGRESS); consultantAgency.setStatus(ConsultantAgencyStatus.CREATED); - List consultantAgencies = - consultantAgencyRepository.findByConsultantIdAndStatusAndDeleteDateIsNull( - consultant.getId(), ConsultantAgencyStatus.IN_PROGRESS); - if (consultantAgencies.size() == 0) { - consultant.setStatus(ConsultantStatus.CREATED); - consultantRepository.save(consultant); - } } private void sendErrorEmail(Consultant consultant, Exception exception) { diff --git a/src/test/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacadeTest.java b/src/test/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacadeTest.java index 5286667f7..fa1f99fe0 100644 --- a/src/test/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacadeTest.java +++ b/src/test/java/de/caritas/cob/userservice/api/admin/facade/ConsultantAdminFacadeTest.java @@ -21,6 +21,7 @@ import de.caritas.cob.userservice.api.admin.service.agency.ConsultantAgencyAdminService; import de.caritas.cob.userservice.api.admin.service.consultant.ConsultantAdminFilterService; import de.caritas.cob.userservice.api.admin.service.consultant.ConsultantAdminService; +import de.caritas.cob.userservice.api.admin.service.consultant.create.agencyrelation.ConsultantAgencyCreationInput; import de.caritas.cob.userservice.api.admin.service.consultant.create.agencyrelation.ConsultantAgencyRelationCreatorService; import de.caritas.cob.userservice.api.exception.httpresponses.BadRequestException; import de.caritas.cob.userservice.api.exception.httpresponses.ForbiddenException; @@ -28,6 +29,7 @@ import de.caritas.cob.userservice.api.service.agency.AgencyService; import java.util.ArrayList; import java.util.List; +import java.util.function.Consumer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -49,7 +51,7 @@ class ConsultantAdminFacadeTest { @Mock private ConsultantAgencyAdminService consultantAgencyAdminService; - @Mock private ConsultantAgencyRelationCreatorService relationCreatorService; + @Mock private ConsultantAgencyRelationCreatorService consultantAgencyRelationCreatorService; @Mock private AuthenticatedUser authenticatedUser; @@ -99,7 +101,7 @@ void findConsultantAgencies_Should_useConsultantAgencyAdminServiceCorrectly() { void createNewConsultantAgency_Should_useConsultantAgencyAdminServiceCorrectly() { this.consultantAdminFacade.createNewConsultantAgency(null, null); - verify(this.relationCreatorService).createNewConsultantAgency(null, null); + verify(this.consultantAgencyRelationCreatorService).createNewConsultantAgency(null, null); } @Test @@ -266,6 +268,23 @@ void checkAssignedAgenciesMatchConsultantTenant_Should_PassCheck_When_Multitenan Mockito.verifyNoInteractions(agencyService); } + @Test + void completeConsultantAgencyAssigment_Should_UpdateConsultantStatusAfterCompletingAssignment() { + String consultantId = "test-consultant-id"; + List agencies = new ArrayList<>(); + CreateConsultantAgencyDTO agency1 = new CreateConsultantAgencyDTO(); + agencies.add(agency1); + CreateConsultantAgencyDTO agency2 = new CreateConsultantAgencyDTO(); + agencies.add(agency2); + + consultantAdminFacade.completeConsultantAgencyAssigment(consultantId, agencies); + + verify(consultantAgencyRelationCreatorService, times(2)) + .completeConsultantAgencyAssigment( + Mockito.any(ConsultantAgencyCreationInput.class), Mockito.any(Consumer.class)); + verify(consultantAgencyRelationCreatorService, times(1)).updateConsultantStatus(consultantId); + } + private AgencyDTO createAgencyWithTenant(Long tenantId) { AgencyDTO agency = new AgencyDTO(); agency.setTenantId(tenantId); diff --git a/src/test/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorServiceTest.java b/src/test/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorServiceTest.java index ff21a9edf..e5fc3abcf 100644 --- a/src/test/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorServiceTest.java +++ b/src/test/java/de/caritas/cob/userservice/api/admin/service/consultant/create/agencyrelation/ConsultantAgencyRelationCreatorServiceTest.java @@ -1,8 +1,10 @@ package de.caritas.cob.userservice.api.admin.service.consultant.create.agencyrelation; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import de.caritas.cob.userservice.api.adapters.keycloak.KeycloakService; @@ -10,9 +12,13 @@ import de.caritas.cob.userservice.api.adapters.web.dto.CreateConsultantAgencyDTO; import de.caritas.cob.userservice.api.manager.consultingtype.ConsultingTypeManager; import de.caritas.cob.userservice.api.model.Consultant; +import de.caritas.cob.userservice.api.model.ConsultantAgencyStatus; +import de.caritas.cob.userservice.api.model.ConsultantStatus; +import de.caritas.cob.userservice.api.port.out.ConsultantAgencyRepository; import de.caritas.cob.userservice.api.port.out.ConsultantRepository; import de.caritas.cob.userservice.api.service.ConsultantAgencyService; import de.caritas.cob.userservice.api.service.agency.AgencyService; +import java.util.Collections; import java.util.Optional; import org.jeasy.random.EasyRandom; import org.junit.jupiter.api.Test; @@ -22,7 +28,7 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) -public class ConsultantAgencyRelationCreatorServiceTest { +class ConsultantAgencyRelationCreatorServiceTest { private final EasyRandom easyRandom = new EasyRandom(); @@ -41,8 +47,10 @@ public class ConsultantAgencyRelationCreatorServiceTest { @Mock private ConsultingTypeManager consultingTypeManager; + @Mock private ConsultantAgencyRepository consultantAgencyRepository; + @Test - public void + void createNewConsultantAgency_Should_notThrowNullPointerException_When_agencyTypeIsU25AndConsultantHasNoAgencyAssigned() { AgencyDTO agencyDTO = new AgencyDTO().consultingType(1).id(2L); @@ -64,4 +72,23 @@ public class ConsultantAgencyRelationCreatorServiceTest { this.consultantAgencyRelationCreatorService.createNewConsultantAgency( "consultant Id", createConsultantAgencyDTO)); } + + @Test + void updateConsultantStatus_Should_UpdateStatusToCreated_When_NoInProgressAgencies() { + String consultantId = "test-consultant-id"; + Consultant consultant = new Consultant(); + consultant.setId(consultantId); + + when(consultantRepository.findByIdAndDeleteDateIsNull(consultantId)) + .thenReturn(Optional.of(consultant)); + + when(consultantAgencyRepository.findByConsultantIdAndStatusAndDeleteDateIsNull( + consultantId, ConsultantAgencyStatus.IN_PROGRESS)) + .thenReturn(Collections.emptyList()); + + consultantAgencyRelationCreatorService.updateConsultantStatus(consultantId); + + assertThat(consultant.getStatus()).isEqualTo(ConsultantStatus.CREATED); + verify(consultantRepository).save(consultant); + } }