Skip to content

Commit 103a429

Browse files
committed
refactor components
1 parent 8e98dd1 commit 103a429

File tree

4 files changed

+40
-18
lines changed

4 files changed

+40
-18
lines changed

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/ExpressionInterestController.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,15 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionO
1717
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.NomisNumber
1818
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
1919
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.UpstreamApiError
20-
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.ExpressionInterestService
2120
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.GetPersonService
21+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.PutExpressionInterestService
2222

2323
@RestController
2424
@RequestMapping("/v1/persons")
2525
@Tag(name = "persons")
2626
class ExpressionInterestController(
2727
@Autowired val getPersonService: GetPersonService,
28-
@Autowired val expressionInterestService: ExpressionInterestService,
28+
@Autowired val putExpressionInterestService: PutExpressionInterestService,
2929
) {
3030
val logger: Logger = LoggerFactory.getLogger(this::class.java)
3131

@@ -56,7 +56,7 @@ class ExpressionInterestController(
5656
}
5757

5858
val verifiedNomisNumber = getVerifiedNomisNumber(hmppsIdCheck) ?: return ResponseEntity.badRequest().build()
59-
expressionInterestService.sendExpressionOfInterest(ExpressionOfInterest(jobid, verifiedNomisNumber))
59+
putExpressionInterestService.sendExpressionOfInterest(ExpressionOfInterest(jobid, verifiedNomisNumber))
6060

6161
return ResponseEntity.ok().build()
6262
} catch (e: Exception) {

src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/ExpressionInterestService.kt src/main/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/PutExpressionInterestService.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@ package uk.gov.justice.digital.hmpps.hmppsintegrationapi.services
22

33
import com.fasterxml.jackson.databind.ObjectMapper
44
import org.springframework.stereotype.Component
5-
import org.springframework.stereotype.Service
65
import software.amazon.awssdk.services.sqs.model.SendMessageRequest
76
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.exception.MessageFailedException
87
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionOfInterest
98
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionOfInterestMessage
109
import uk.gov.justice.hmpps.sqs.HmppsQueue
1110
import uk.gov.justice.hmpps.sqs.HmppsQueueService
1211

13-
@Service
1412
@Component
15-
class ExpressionInterestService(
13+
class PutExpressionInterestService(
1614
private val hmppsQueueService: HmppsQueueService,
1715
private val objectMapper: ObjectMapper,
1816
) {

src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/controllers/v1/person/ExpressionInterestControllerTest.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@ import uk.gov.justice.digital.hmpps.hmppsintegrationapi.helpers.IntegrationAPIMo
1414
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionOfInterest
1515
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.NomisNumber
1616
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.Response
17-
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.ExpressionInterestService
1817
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.GetPersonService
18+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.services.PutExpressionInterestService
1919

2020
@WebMvcTest(controllers = [ExpressionInterestController::class])
2121
@ActiveProfiles("test")
2222
class ExpressionInterestControllerTest(
2323
@Autowired var springMockMvc: MockMvc,
2424
@MockitoBean val getPersonService: GetPersonService,
25-
@MockitoBean val expressionOfInterestService: ExpressionInterestService,
25+
@MockitoBean val expressionOfInterestService: PutExpressionInterestService,
2626
) : DescribeSpec({
2727
val mockMvc = IntegrationAPIMockMvc(springMockMvc)
2828
val basePath = "/v1/persons"

src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/ExpressionInterestServiceTest.kt src/test/kotlin/uk/gov/justice/digital/hmpps/hmppsintegrationapi/services/PutExpressionInterestServiceTest.kt

+34-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package uk.gov.justice.digital.hmpps.hmppsintegrationapi.services
22

33
import com.fasterxml.jackson.databind.ObjectMapper
4+
import com.fasterxml.jackson.module.kotlin.readValue
45
import io.kotest.assertions.throwables.shouldThrow
56
import io.kotest.core.spec.style.DescribeSpec
67
import io.kotest.matchers.shouldBe
@@ -14,12 +15,14 @@ import org.mockito.kotlin.whenever
1415
import software.amazon.awssdk.services.sqs.SqsAsyncClient
1516
import software.amazon.awssdk.services.sqs.model.SendMessageRequest
1617
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.exception.MessageFailedException
17-
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.expressionOfInterest.ExpressionInterest
18+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.extensions.MockMvcExtensions.objectMapper
19+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionOfInterest
1820
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.ExpressionOfInterestMessage
21+
import uk.gov.justice.digital.hmpps.hmppsintegrationapi.models.hmpps.MessageType
1922
import uk.gov.justice.hmpps.sqs.HmppsQueue
2023
import uk.gov.justice.hmpps.sqs.HmppsQueueService
2124

22-
class ExpressionInterestServiceTest :
25+
class PutExpressionInterestServiceTest :
2326
DescribeSpec({
2427
val mockQueueService = mock<HmppsQueueService>()
2528
val mockSqsClient = mock<SqsAsyncClient>()
@@ -31,7 +34,7 @@ class ExpressionInterestServiceTest :
3134
on { queueUrl } doReturn "https://test-queue-url"
3235
}
3336

34-
val service = ExpressionInterestService(mockQueueService, mockObjectMapper)
37+
val service = PutExpressionInterestService(mockQueueService, mockObjectMapper)
3538

3639
beforeTest {
3740
reset(mockQueueService, mockSqsClient, mockObjectMapper)
@@ -40,13 +43,19 @@ class ExpressionInterestServiceTest :
4043

4144
describe("sendExpressionOfInterest") {
4245
it("should send a valid message successfully to SQS") {
43-
val expressionInterest = ExpressionInterest(jobId = "12345", hmppsId = "H1234")
44-
val messageBody = """{"jobId":"12345","verifiedHmppsId":"H1234"}"""
46+
val expressionOfInterest = ExpressionOfInterest(jobId = "12345", prisonNumber = "H1234")
47+
val expectedMessage =
48+
ExpressionOfInterestMessage(
49+
jobId = "12345",
50+
prisonNumber = "H1234",
51+
eventType = MessageType.EXPRESSION_OF_INTEREST_CREATED,
52+
)
53+
val messageBody = objectMapper.writeValueAsString(expectedMessage)
4554

4655
whenever(mockObjectMapper.writeValueAsString(any<ExpressionOfInterestMessage>()))
4756
.thenReturn(messageBody)
4857

49-
service.sendExpressionOfInterest(expressionInterest)
58+
service.sendExpressionOfInterest(expressionOfInterest)
5059

5160
verify(mockSqsClient).sendMessage(
5261
argThat<SendMessageRequest> { request: SendMessageRequest? ->
@@ -59,10 +68,7 @@ class ExpressionInterestServiceTest :
5968
}
6069

6170
it("should throw MessageFailedException when SQS fails") {
62-
val expressionInterest = ExpressionInterest(jobId = "12345", hmppsId = "H1234")
63-
64-
whenever(mockObjectMapper.writeValueAsString(any<ExpressionOfInterestMessage>()))
65-
.thenReturn("""{"jobId":"12345","verifiedHmppsId":"H1234"}""")
71+
val expressionInterest = ExpressionOfInterest(jobId = "12345", prisonNumber = "H1234")
6672

6773
whenever(mockSqsClient.sendMessage(any<SendMessageRequest>()))
6874
.thenThrow(RuntimeException("Failed to send message to SQS"))
@@ -74,5 +80,23 @@ class ExpressionInterestServiceTest :
7480

7581
exception.message shouldBe "Failed to send message to SQS"
7682
}
83+
84+
it("should serialize ExpressionOfInterestMessage with correct keys") {
85+
val expectedMessage =
86+
ExpressionOfInterestMessage(
87+
messageId = "1",
88+
jobId = "12345",
89+
prisonNumber = "H1234",
90+
eventType = MessageType.EXPRESSION_OF_INTEREST_CREATED,
91+
)
92+
93+
val serializedJson = objectMapper.writeValueAsString(expectedMessage)
94+
val deserializedMap: Map<String, Any?> = objectMapper.readValue(serializedJson)
95+
96+
assert(deserializedMap.containsKey("messageId"))
97+
assert(deserializedMap.containsKey("jobId"))
98+
assert(deserializedMap.containsKey("prisonNumber"))
99+
assert(deserializedMap.containsKey("eventType"))
100+
}
77101
}
78102
})

0 commit comments

Comments
 (0)