diff --git a/oso-backend.iml b/oso-backend.iml new file mode 100644 index 0000000..8021953 --- /dev/null +++ b/oso-backend.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/controllers/EmergencyController.kt b/src/main/kotlin/org/oso/core/controllers/EmergencyController.kt index 658b3fe..09d1b35 100644 --- a/src/main/kotlin/org/oso/core/controllers/EmergencyController.kt +++ b/src/main/kotlin/org/oso/core/controllers/EmergencyController.kt @@ -1,18 +1,16 @@ package org.oso.core.controllers import org.oso.config.Paths -import org.oso.core.dtos.EmergencyDto +import org.oso.core.dtos.* import org.oso.core.entities.Emergency import org.oso.core.exceptions.HelpRequesterNotFoundException import org.oso.core.services.EmergencyService import org.oso.core.services.HelpRequesterService import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpStatus +import org.springframework.http.ResponseEntity import org.springframework.stereotype.Controller -import org.springframework.web.bind.annotation.PostMapping -import org.springframework.web.bind.annotation.RequestBody -import org.springframework.web.bind.annotation.RequestMapping -import org.springframework.web.bind.annotation.ResponseStatus +import org.springframework.web.bind.annotation.* @Controller @@ -39,4 +37,14 @@ class EmergencyController emergencyService.emit(emergency) } + @PostMapping(Paths.Emergency.ACCEPTED) + fun acceptEmergency(@RequestBody emergencyAccepted: EmergencyAcceptedDto): ResponseEntity { + emergencyService.acceptEmergency( + emergencyId = emergencyAccepted.emergencyId, + helpProviderId = emergencyAccepted.helpProviderId + ) + + return ResponseEntity.accepted().build() + } + } \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/controllers/HelpProviderController.kt b/src/main/kotlin/org/oso/core/controllers/HelpProviderController.kt index ef1f4f4..de21b53 100644 --- a/src/main/kotlin/org/oso/core/controllers/HelpProviderController.kt +++ b/src/main/kotlin/org/oso/core/controllers/HelpProviderController.kt @@ -47,16 +47,6 @@ class HelpProviderController } } - // TODO eventually move to emergency controller - @PostMapping(Paths.HelpProvider.ACCEPTED_EMERGENCY) - fun acceptEmergency(@RequestBody emergencyAccepted: EmergencyAcceptedDto): ResponseEntity { - helpProviderService.acceptEmergency( - emergencyId = emergencyAccepted.emergencyId, - helpProviderId = emergencyAccepted.helpProviderId - ) - - return ResponseEntity.accepted().build() - } private fun getHelpProviderOrFail(id: String): HelpProvider { return helpProviderService.findById(id) ?: throw HelpProviderNotFoundException("HelpProvider<$id> not found") @@ -66,4 +56,5 @@ class HelpProviderController name = name, keycloakName = securityService.getCurrentUserName() ) + } \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/services/EmergencyService.kt b/src/main/kotlin/org/oso/core/services/EmergencyService.kt index b2ab87e..ed25101 100644 --- a/src/main/kotlin/org/oso/core/services/EmergencyService.kt +++ b/src/main/kotlin/org/oso/core/services/EmergencyService.kt @@ -13,4 +13,5 @@ interface EmergencyService { * @param emergency The emergency containing relevant information */ fun emit(emergency: Emergency) + fun acceptEmergency(emergencyId: String, helpProviderId: String) } \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/services/HelpProviderService.kt b/src/main/kotlin/org/oso/core/services/HelpProviderService.kt index c498792..d78b203 100644 --- a/src/main/kotlin/org/oso/core/services/HelpProviderService.kt +++ b/src/main/kotlin/org/oso/core/services/HelpProviderService.kt @@ -8,5 +8,4 @@ interface HelpProviderService { fun findById(id: String): HelpProvider? fun findHelpRequesters(id: String): Set fun createHelpProvider(helpProvider: HelpProvider): HelpProvider - fun acceptEmergency(emergencyId: String, helpProviderId: String) } \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/services/impl/DefaultEmergencyService.kt b/src/main/kotlin/org/oso/core/services/impl/DefaultEmergencyService.kt index ebb2fb3..6bdb697 100644 --- a/src/main/kotlin/org/oso/core/services/impl/DefaultEmergencyService.kt +++ b/src/main/kotlin/org/oso/core/services/impl/DefaultEmergencyService.kt @@ -1,20 +1,27 @@ package org.oso.core.services.impl import org.oso.core.entities.Emergency +import org.oso.core.entities.EmergencyStatusType import org.oso.core.repositories.EmergencyRepository import org.oso.core.services.EmergencyService +import org.oso.core.services.EmergencyStatusService import org.oso.core.services.external.NotificationService import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.ResponseBody +import org.oso.core.repositories.HelpProviderRepository +import org.slf4j.Logger +import org.slf4j.LoggerFactory @Service class DefaultEmergencyService @Autowired constructor( private val notificationService: NotificationService, - private val emergencyRepository: EmergencyRepository + private val emergencyRepository: EmergencyRepository, + private val emergencyStatusService: EmergencyStatusService, + private val helpProviderRepository: HelpProviderRepository ) : EmergencyService { override fun emit(emergency: Emergency) { @@ -33,4 +40,54 @@ class DefaultEmergencyService override fun findEmergency(emergencyId: String): Emergency? { return emergencyRepository.findById(emergencyId).orElse(null) } + + override fun acceptEmergency(emergencyId: String, helpProviderId: String) { + val emergency = findEmergency(emergencyId); + LOGGER.debug("emergency<$emergencyId> accepted by helpProvider<$helpProviderId>") + + if (emergency == null) { + LOGGER.warn("emergency<$emergencyId> does not exist") + return + } + + val helpProvider = helpProviderRepository.findById(helpProviderId).orElse(null) + + if (helpProvider == null) { + LOGGER.warn("helpProvider<$helpProviderId> does not exist") + return + } + + if (!helpProvider.isAssignedTo(emergency.helpRequester)) { + LOGGER.warn("helpProvider<$helpProviderId> is not assigned to helpRequester<${emergency.helpRequester.id}") + LOGGER.warn("helpProvider<$helpProviderId> is not allowed to accept emergency<$emergencyId> for helpresquester<${emergency.helpRequester.id}>") + return + } + + emergencyStatusService.addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) + + if (!emergency.active) { + LOGGER.info("emergency<$emergencyId> is already resolved") + return + } + emergency.helpRequester.helpProviders + .filter { it.expoPushToken != null } + .filter { it.id != helpProviderId } + .map { + notificationService.createEmergencyAcceptedPushNotification( + to = it.expoPushToken!!, + alarmID = emergencyId, + helpRequesterId = emergency.helpRequester.id!!, + helpProviderId = helpProviderId + ) + } + .let { + if(!it.isEmpty()) { + notificationService.sendPushNotification(it) + } + } + } + + companion object { + private val LOGGER: Logger = LoggerFactory.getLogger(DefaultEmergencyService::class.java) + } } \ No newline at end of file diff --git a/src/main/kotlin/org/oso/core/services/impl/DefaultHelpProviderService.kt b/src/main/kotlin/org/oso/core/services/impl/DefaultHelpProviderService.kt index 75534d3..f7df2ed 100644 --- a/src/main/kotlin/org/oso/core/services/impl/DefaultHelpProviderService.kt +++ b/src/main/kotlin/org/oso/core/services/impl/DefaultHelpProviderService.kt @@ -18,7 +18,6 @@ class DefaultHelpProviderService @Autowired constructor( private val notificationService: NotificationService, - private val emergencyStatusService: EmergencyStatusService, private val helpProviderRepository: HelpProviderRepository, private val emergencyService: EmergencyService ) : HelpProviderService { @@ -39,53 +38,5 @@ class DefaultHelpProviderService override fun createHelpProvider(helpProvider: HelpProvider): HelpProvider = helpProviderRepository.save(helpProvider) - override fun acceptEmergency(emergencyId: String, helpProviderId: String) { - val emergency = emergencyService.findEmergency(emergencyId); - LOGGER.debug("emergency<$emergencyId> accepted by helpProvider<$helpProviderId>") - if (emergency == null) { - LOGGER.warn("emergency<$emergencyId> does not exist") - return - } - - val helpProvider = helpProviderRepository.findById(helpProviderId).orElse(null) - - if (helpProvider == null) { - LOGGER.warn("helpProvider<$helpProviderId> does not exist") - return - } - - if (!helpProvider.isAssignedTo(emergency.helpRequester)) { - LOGGER.warn("helpProvider<$helpProviderId> is not assigned to helpRequester<${emergency.helpRequester.id}") - LOGGER.warn("helpProvider<$helpProviderId> is not allowed to accept emergency<$emergencyId> for helpresquester<${emergency.helpRequester.id}>") - return - } - - emergencyStatusService.addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) - - if (!emergency.active) { - LOGGER.info("emergency<$emergencyId> is already resolved") - return - } - emergency.helpRequester.helpProviders - .filter { it.expoPushToken != null } - .filter { it.id != helpProviderId } - .map { - notificationService.createEmergencyAcceptedPushNotification( - to = it.expoPushToken!!, - alarmID = emergencyId, - helpRequesterId = emergency.helpRequester.id!!, - helpProviderId = helpProviderId - ) - } - .let { - if(!it.isEmpty()) { - notificationService.sendPushNotification(it) - } - } - } - - companion object { - private val LOGGER: Logger = LoggerFactory.getLogger(DefaultHelpProviderService::class.java) - } } \ No newline at end of file diff --git a/src/test/kotlin/org/oso/core/controller/EmergencyControllerTest.kt b/src/test/kotlin/org/oso/core/controller/EmergencyControllerTest.kt index 06ed337..cf24eeb 100644 --- a/src/test/kotlin/org/oso/core/controller/EmergencyControllerTest.kt +++ b/src/test/kotlin/org/oso/core/controller/EmergencyControllerTest.kt @@ -9,10 +9,12 @@ import org.mockito.Mockito import org.oso.any import org.oso.core.controllers.EmergencyController import org.oso.core.dtos.EmergencyDto +import org.oso.core.dtos.EmergencyAcceptedDto import org.oso.core.entities.Emergency import org.oso.core.entities.EmergencyPriority import org.oso.core.entities.HelpRequester import org.oso.core.services.EmergencyService +import org.oso.core.services.HelpProviderService import org.oso.core.services.HelpRequesterService import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.restdocs.AutoConfigureRestDocs @@ -36,6 +38,9 @@ class EmergencyControllerTest { @MockBean lateinit var emergencyService: EmergencyService + @MockBean + lateinit var helpProviderService: HelpProviderService + @MockBean lateinit var helpRequesterService: HelpRequesterService @@ -112,4 +117,40 @@ class EmergencyControllerTest { // // TODO test fails if helprequester is not given, as the helprequester-id will currently be defaulted to 0 which leads to HTTP 404 instead of 400 // testFailOnMissingParameters(mockMvc, "/${EmergencyController.PATH_EMERGENCY}/${EmergencyController.PATH_EMIT}", parameters) } + + @Test + fun testAcceptEmergency() { + val dto = EmergencyAcceptedDto( + emergencyId = "25", + helpProviderId = "38", + helpRequesterId = "46" + ) + + Mockito.doNothing().`when`(emergencyService).acceptEmergency(dto.emergencyId, dto.helpProviderId) + + this.mockMvc + .perform( + MockMvcRequestBuilders + .post("/${Paths.Emergency.ROOT}/${Paths.Emergency.ACCEPTED}") + .contentType(MediaType.APPLICATION_JSON) + .characterEncoding(StandardCharsets.UTF_8.name()) + .content(ObjectMapper().writeValueAsString(dto))) + + .andExpect(MockMvcResultMatchers.status().isAccepted) + .andDo(MockMvcRestDocumentation.document("${Paths.Emergency.ROOT}/${Paths.Emergency.ACCEPTED}")) + + Mockito.verify(emergencyService, Mockito.times(1)).acceptEmergency(dto.emergencyId, dto.helpProviderId) + } + + @Test + fun `testAcceptEmergency throws exception on missing parameter`() { +// val parameters = listOf( +// "emergencyId" to "25", +// "helpProviderId" to "38", +// "helpRequesterId" to "46" +// ) +// +// // TODO this test always fails as jackson does not recognize the non-nullable parameters correclty +// testFailOnMissingParameters(mockMvc, "${HelpProviderController.PATH_HELP_PROVIDERS}/${HelpProviderController.PATH_ACCEPT_EMERGENCY}", parameters) + } } \ No newline at end of file diff --git a/src/test/kotlin/org/oso/core/controller/HelpProviderControllerTest.kt b/src/test/kotlin/org/oso/core/controller/HelpProviderControllerTest.kt index b9c1acc..b2ee8ef 100644 --- a/src/test/kotlin/org/oso/core/controller/HelpProviderControllerTest.kt +++ b/src/test/kotlin/org/oso/core/controller/HelpProviderControllerTest.kt @@ -11,7 +11,6 @@ import org.mockito.Mockito import org.oso.any import org.oso.config.Paths import org.oso.core.controllers.HelpProviderController -import org.oso.core.dtos.EmergencyAcceptedDto import org.oso.core.dtos.HelpProviderPushDto import org.oso.core.entities.HelpProvider import org.oso.core.entities.HelpRequester @@ -91,11 +90,6 @@ class HelpProviderControllerTest { val dto = HelpProviderPushDto( name = "HelpProvider" ) - val helpProvider = HelpProvider( - id = "12345", - name = dto.name, - keycloakName = "keycloak12345" - ) Mockito.`when`(helpProviderService.createHelpProvider(any())).thenThrow(IllegalArgumentException()) //Mockito.doReturn(helpProvider).`when`(helpProviderService).createHelpProvider(ArgumentMatchers.any()) @@ -210,41 +204,7 @@ class HelpProviderControllerTest { .andExpect(MockMvcResultMatchers.status().isNotFound) } - @Test - fun testAcceptEmergency() { - val dto = EmergencyAcceptedDto( - emergencyId = "25", - helpProviderId = "38", - helpRequesterId = "46" - ) - - Mockito.doNothing().`when`(helpProviderService).acceptEmergency(dto.emergencyId, dto.helpProviderId) - this.mockMvc - .perform( - MockMvcRequestBuilders - .post("/${Paths.HelpProvider.PROVIDERS}/${Paths.HelpProvider.ACCEPTED_EMERGENCY}") - .contentType(MediaType.APPLICATION_JSON) - .characterEncoding(StandardCharsets.UTF_8.name()) - .content(ObjectMapper().writeValueAsString(dto))) - - .andExpect(MockMvcResultMatchers.status().isAccepted) - .andDo(MockMvcRestDocumentation.document("${Paths.HelpProvider.PROVIDERS}/${Paths.HelpProvider.ACCEPTED_EMERGENCY}")) - - Mockito.verify(helpProviderService, Mockito.times(1)).acceptEmergency(dto.emergencyId, dto.helpProviderId) - } - - @Test - fun `testAcceptEmergency throws exception on missing parameter`() { -// val parameters = listOf( -// "emergencyId" to "25", -// "helpProviderId" to "38", -// "helpRequesterId" to "46" -// ) -// -// // TODO this test always fails as jackson does not recognize the non-nullable parameters correclty -// testFailOnMissingParameters(mockMvc, "${HelpProviderController.PATH_HELP_PROVIDERS}/${HelpProviderController.PATH_ACCEPT_EMERGENCY}", parameters) - } companion object { private const val userName = "User" diff --git a/src/test/kotlin/org/oso/core/controller/InvitationControllerTest.kt b/src/test/kotlin/org/oso/core/controller/InvitationControllerTest.kt index 0f75024..a56230e 100644 --- a/src/test/kotlin/org/oso/core/controller/InvitationControllerTest.kt +++ b/src/test/kotlin/org/oso/core/controller/InvitationControllerTest.kt @@ -70,7 +70,12 @@ class InvitationControllerTest { MockMvcRequestBuilders .get("/${Paths.Invitation.INVITATION}/${Paths.Invitation.ACCEPTED}?token=test123")) .andExpect(MockMvcResultMatchers.status().isOk) - .andExpect(MockMvcResultMatchers.content().string(Matchers.containsString("successful"))) + .andExpect(MockMvcResultMatchers.content().string( + Matchers.anyOf( + Matchers.containsString("successfull"), + Matchers.containsString("erfolgreich angenommen")) + ) + ) Assert.assertThat(hr.helpProviders, Matchers.iterableWithSize(1)) Assert.assertThat(hr.helpProviders, Matchers.hasItem(hp)) @@ -90,7 +95,12 @@ class InvitationControllerTest { MockMvcRequestBuilders .get("/${Paths.Invitation.INVITATION}/${Paths.Invitation.ACCEPTED}?token=test123")) .andExpect(MockMvcResultMatchers.status().isOk) - .andExpect(MockMvcResultMatchers.content().string(Matchers.containsString("expired"))) + .andExpect(MockMvcResultMatchers.content().string( + Matchers.anyOf( + Matchers.containsString("expired"), + Matchers.containsString("nicht mehr gültig")) + ) + ) Assert.assertThat(hr.helpProviders, Matchers.iterableWithSize(0)) Assert.assertThat(hp.helpRequesters, Matchers.iterableWithSize(0)) diff --git a/src/test/kotlin/org/oso/core/services/impl/DefaultEmergencyServiceTest.kt b/src/test/kotlin/org/oso/core/services/impl/DefaultEmergencyServiceTest.kt index bcebc6e..989c748 100644 --- a/src/test/kotlin/org/oso/core/services/impl/DefaultEmergencyServiceTest.kt +++ b/src/test/kotlin/org/oso/core/services/impl/DefaultEmergencyServiceTest.kt @@ -1,19 +1,24 @@ package org.oso.core.services.impl +import org.junit.Before import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentMatchers import org.mockito.InjectMocks -import org.mockito.Mock -import org.mockito.Mockito +import org.mockito.* import org.oso.any import org.oso.core.dtos.PushNotification import org.oso.core.entities.Emergency +import org.oso.core.entities.EmergencyStatusType +import org.oso.core.services.EmergencyStatusService +import org.oso.core.services.EmergencyService import org.oso.core.entities.HelpProvider import org.oso.core.entities.HelpRequester import org.oso.core.repositories.EmergencyRepository +import org.oso.core.repositories.HelpProviderRepository import org.oso.core.services.external.NotificationService import org.springframework.test.context.junit.jupiter.SpringExtension +import java.util.* @ExtendWith(SpringExtension::class) class DefaultEmergencyServiceTest { @@ -24,6 +29,18 @@ class DefaultEmergencyServiceTest { @Mock lateinit var emergencyRepository: EmergencyRepository + @Mock + lateinit var emergencyService: EmergencyService + + @Mock + lateinit var emergencyStatusService: EmergencyStatusService + + @Mock + lateinit var helpProviderRepository: HelpProviderRepository + + @InjectMocks + lateinit var helpProviderService: DefaultHelpProviderService + @Mock lateinit var notificationService: NotificationService @@ -89,4 +106,96 @@ class DefaultEmergencyServiceTest { Mockito.verify(emergencyRepository, Mockito.times(1)).save(emergency) Mockito.verify(notificationService, Mockito.times(0)).sendPushNotification(listOf(any())) } + + @Test + fun testAcceptEmergency() { + val helpRequester = HelpRequester( + id = "456", + name = "Requester", + keycloakName = "Requester" + ) + val helpProvider = HelpProvider( + id = "123", + name = "HelpProvider", + keycloakName = "HelpProvider" + ) + val helpProvider2 = HelpProvider( + id = "321", + name = "HelpProvider2", + keycloakName = "HelpProvider2" + ) + val emergency = Emergency( + id = "789", + helpRequester = helpRequester + ) + val notification = PushNotification( + to = "To", + body = "body", + data = "data", + title = "title" + ) + + helpProvider.helpRequesters.add(helpRequester) + helpProvider2.expoPushToken = "ExpoPushToken" + helpProvider2.helpRequesters.add(helpRequester) + helpRequester.helpProviders.add(helpProvider) + helpRequester.helpProviders.add(helpProvider2) + + Mockito.`when`(helpProviderRepository.findById(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) + Mockito.doReturn(Optional.of(helpProvider)).`when`(helpProviderRepository).findById(helpProvider.id!!) + Mockito.`when`(emergencyService.findEmergency(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) + Mockito.doReturn(emergency).`when`(emergencyService).findEmergency(emergency.id!!) + Mockito.`when`(emergencyStatusService.addStatus(any(), any(), any())).thenThrow(IllegalArgumentException()) + Mockito.doNothing().`when`(emergencyStatusService).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) + Mockito.`when`(notificationService.createEmergencyAcceptedPushNotification(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) + Mockito.doReturn(notification).`when`(notificationService).createEmergencyAcceptedPushNotification(helpProvider2.expoPushToken!!, emergency.id!!, helpRequester.id!!, helpProvider.id!!) + Mockito.`when`(notificationService.sendPushNotification(any())).thenThrow(IllegalArgumentException()) + Mockito.doNothing().`when`(notificationService).sendPushNotification(listOf(notification)) + + emergencyService.acceptEmergency( + emergencyId = emergency.id!!, + helpProviderId = helpProvider.id!! + ) + + Mockito.verify(emergencyStatusService, Mockito.times(1)).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) + Mockito.verify(notificationService, Mockito.times(1)).sendPushNotification(listOf(notification)) + } + + @Test + fun `testAcceptEmergency without notification`() { + val helpRequester = HelpRequester( + id = "123", + name = "Requester", + keycloakName = "Requester" + ) + val helpProvider = HelpProvider( + id = "456", + name = "HelpProvider", + keycloakName = "HelpProvider" + ) + val emergency = Emergency( + id = "789", + helpRequester = helpRequester + ) + + helpProvider.helpRequesters.add(helpRequester) + helpRequester.helpProviders.add(helpProvider) + + Mockito.`when`(helpProviderRepository.findById(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) + Mockito.doReturn(Optional.of(helpProvider)).`when`(helpProviderRepository).findById(helpProvider.id!!) + Mockito.`when`(emergencyService.findEmergency(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) + Mockito.doReturn(emergency).`when`(emergencyService).findEmergency(emergency.id!!) + Mockito.`when`(emergencyStatusService.addStatus(any(), any(), any())).thenThrow(IllegalArgumentException()) + Mockito.doNothing().`when`(emergencyStatusService).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) + Mockito.`when`(notificationService.sendPushNotification(any())).thenThrow(IllegalArgumentException()) + + emergencyService.acceptEmergency( + emergencyId = emergency.id!!, + helpProviderId = helpProvider.id!! + ) + + Mockito.verify(emergencyStatusService, Mockito.times(1)).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) + } + + } \ No newline at end of file diff --git a/src/test/kotlin/org/oso/core/services/impl/DefaultHelpProviderServiceTest.kt b/src/test/kotlin/org/oso/core/services/impl/DefaultHelpProviderServiceTest.kt index 729573e..6cf61df 100644 --- a/src/test/kotlin/org/oso/core/services/impl/DefaultHelpProviderServiceTest.kt +++ b/src/test/kotlin/org/oso/core/services/impl/DefaultHelpProviderServiceTest.kt @@ -20,113 +20,14 @@ import java.util.* @ExtendWith(SpringExtension::class) class DefaultHelpProviderServiceTest { - @InjectMocks - lateinit var helpProviderService: DefaultHelpProviderService - - @Mock - lateinit var helpProviderRepository: HelpProviderRepository - - @Mock - lateinit var emergencyStatusService: EmergencyStatusService - @Mock lateinit var notificationService: NotificationService - @Mock - lateinit var emergencyService: EmergencyService @Before fun setup() { MockitoAnnotations.initMocks(this) } - @Test - fun testAcceptEmergency() { - val helpRequester = HelpRequester( - id = "456", - name = "Requester", - keycloakName = "Requester" - ) - val helpProvider = HelpProvider( - id = "123", - name = "HelpProvider", - keycloakName = "HelpProvider" - ) - val helpProvider2 = HelpProvider( - id = "321", - name = "HelpProvider2", - keycloakName = "HelpProvider2" - ) - val emergency = Emergency( - id = "789", - helpRequester = helpRequester - ) - val notification = PushNotification( - to = "To", - body = "body", - data = "data", - title = "title" - ) - - helpProvider.helpRequesters.add(helpRequester) - helpProvider2.expoPushToken = "ExpoPushToken" - helpProvider2.helpRequesters.add(helpRequester) - helpRequester.helpProviders.add(helpProvider) - helpRequester.helpProviders.add(helpProvider2) - - Mockito.`when`(helpProviderRepository.findById(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) - Mockito.doReturn(Optional.of(helpProvider)).`when`(helpProviderRepository).findById(helpProvider.id!!) - Mockito.`when`(emergencyService.findEmergency(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) - Mockito.doReturn(emergency).`when`(emergencyService).findEmergency(emergency.id!!) - Mockito.`when`(emergencyStatusService.addStatus(any(), any(), any())).thenThrow(IllegalArgumentException()) - Mockito.doNothing().`when`(emergencyStatusService).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) - Mockito.`when`(notificationService.createEmergencyAcceptedPushNotification(ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString(), ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) - Mockito.doReturn(notification).`when`(notificationService).createEmergencyAcceptedPushNotification(helpProvider2.expoPushToken!!, emergency.id!!, helpRequester.id!!, helpProvider.id!!) - Mockito.`when`(notificationService.sendPushNotification(any())).thenThrow(IllegalArgumentException()) - Mockito.doNothing().`when`(notificationService).sendPushNotification(listOf(notification)) - - helpProviderService.acceptEmergency( - emergencyId = emergency.id!!, - helpProviderId = helpProvider.id!! - ) - - Mockito.verify(emergencyStatusService, Mockito.times(1)).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) - Mockito.verify(notificationService, Mockito.times(1)).sendPushNotification(listOf(notification)) - } - - @Test - fun `testAcceptEmergency without notification`() { - val helpRequester = HelpRequester( - id = "123", - name = "Requester", - keycloakName = "Requester" - ) - val helpProvider = HelpProvider( - id = "456", - name = "HelpProvider", - keycloakName = "HelpProvider" - ) - val emergency = Emergency( - id = "789", - helpRequester = helpRequester - ) - helpProvider.helpRequesters.add(helpRequester) - helpRequester.helpProviders.add(helpProvider) - - Mockito.`when`(helpProviderRepository.findById(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) - Mockito.doReturn(Optional.of(helpProvider)).`when`(helpProviderRepository).findById(helpProvider.id!!) - Mockito.`when`(emergencyService.findEmergency(ArgumentMatchers.anyString())).thenThrow(IllegalArgumentException()) - Mockito.doReturn(emergency).`when`(emergencyService).findEmergency(emergency.id!!) - Mockito.`when`(emergencyStatusService.addStatus(any(), any(), any())).thenThrow(IllegalArgumentException()) - Mockito.doNothing().`when`(emergencyStatusService).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) - Mockito.`when`(notificationService.sendPushNotification(any())).thenThrow(IllegalArgumentException()) - - helpProviderService.acceptEmergency( - emergencyId = emergency.id!!, - helpProviderId = helpProvider.id!! - ) - - Mockito.verify(emergencyStatusService, Mockito.times(1)).addStatus(emergency, helpProvider, EmergencyStatusType.TYPE_ACCEPTED) - } } \ No newline at end of file diff --git a/target/snippets/emergency/accepted/curl-request.adoc b/target/snippets/emergency/accepted/curl-request.adoc new file mode 100644 index 0000000..3bcca6a --- /dev/null +++ b/target/snippets/emergency/accepted/curl-request.adoc @@ -0,0 +1,6 @@ +[source,bash] +---- +$ curl 'http://localhost:8080/emergency/accepted' -i -X POST \ + -H 'Content-Type: application/json;charset=UTF-8' \ + -d '{"emergencyId":"25","helpRequesterId":"46","helpProviderId":"38"}' +---- \ No newline at end of file diff --git a/target/snippets/emergency/accepted/http-request.adoc b/target/snippets/emergency/accepted/http-request.adoc new file mode 100644 index 0000000..e504f37 --- /dev/null +++ b/target/snippets/emergency/accepted/http-request.adoc @@ -0,0 +1,9 @@ +[source,http,options="nowrap"] +---- +POST /emergency/accepted HTTP/1.1 +Content-Length: 65 +Content-Type: application/json;charset=UTF-8 +Host: localhost:8080 + +{"emergencyId":"25","helpRequesterId":"46","helpProviderId":"38"} +---- \ No newline at end of file diff --git a/target/snippets/emergency/accepted/http-response.adoc b/target/snippets/emergency/accepted/http-response.adoc new file mode 100644 index 0000000..4fc5fd7 --- /dev/null +++ b/target/snippets/emergency/accepted/http-response.adoc @@ -0,0 +1,5 @@ +[source,http,options="nowrap"] +---- +HTTP/1.1 202 Accepted + +---- \ No newline at end of file diff --git a/target/snippets/emergency/accepted/httpie-request.adoc b/target/snippets/emergency/accepted/httpie-request.adoc new file mode 100644 index 0000000..7158693 --- /dev/null +++ b/target/snippets/emergency/accepted/httpie-request.adoc @@ -0,0 +1,5 @@ +[source,bash] +---- +$ echo '{"emergencyId":"25","helpRequesterId":"46","helpProviderId":"38"}' | http POST 'http://localhost:8080/emergency/accepted' \ + 'Content-Type:application/json;charset=UTF-8' +---- \ No newline at end of file diff --git a/target/snippets/emergency/accepted/request-body.adoc b/target/snippets/emergency/accepted/request-body.adoc new file mode 100644 index 0000000..d6a78e4 --- /dev/null +++ b/target/snippets/emergency/accepted/request-body.adoc @@ -0,0 +1,4 @@ +[source,options="nowrap"] +---- +{"emergencyId":"25","helpRequesterId":"46","helpProviderId":"38"} +---- \ No newline at end of file diff --git a/target/snippets/emergency/accepted/response-body.adoc b/target/snippets/emergency/accepted/response-body.adoc new file mode 100644 index 0000000..dab5f81 --- /dev/null +++ b/target/snippets/emergency/accepted/response-body.adoc @@ -0,0 +1,4 @@ +[source,options="nowrap"] +---- + +---- \ No newline at end of file