Skip to content

Commit b27e6b7

Browse files
committed
endepunkt for kvittering for rekvisisjon
1 parent ff288c2 commit b27e6b7

File tree

6 files changed

+129
-0
lines changed

6 files changed

+129
-0
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ dependencies {
3838
// Testing
3939
testImplementation(kotlin("test"))
4040
testImplementation("io.ktor:ktor-server-test-host:$ktorVersion")
41+
testImplementation("io.mockk:mockk:1.12.4")
4142
}
4243

4344
tasks.withType<KotlinCompile> {

src/main/kotlin/no/nav/hjelpemidler/Application.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import no.nav.helse.rapids_rivers.KafkaConfig
1212
import no.nav.helse.rapids_rivers.RapidApplication
1313
import no.nav.helse.rapids_rivers.RapidsConnection
1414
import no.nav.hjelpemidler.api.ordrelinjeAPI
15+
import no.nav.hjelpemidler.api.rekvisisjonAPI
1516
import no.nav.hjelpemidler.api.serviceforespørselAPI
1617
import no.nav.hjelpemidler.configuration.Configuration
1718
import java.net.InetAddress
@@ -65,6 +66,7 @@ fun main() {
6566
authenticate("oebsToken") {
6667
ordrelinjeAPI(context)
6768
serviceforespørselAPI(context)
69+
rekvisisjonAPI(context)
6870
}
6971
}
7072
}.build()
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
package no.nav.hjelpemidler
22

3+
import com.fasterxml.jackson.databind.SerializationFeature
4+
import com.fasterxml.jackson.databind.json.JsonMapper
5+
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
6+
import com.fasterxml.jackson.module.kotlin.jacksonMapperBuilder
37
import no.nav.helse.rapids_rivers.MessageContext
48
import no.nav.hjelpemidler.metrics.SensuMetrics
59

610
class Context(
711
private val messageContext: MessageContext,
812
) : MessageContext by messageContext {
13+
val jsonMapper: JsonMapper = jacksonMapperBuilder()
14+
.addModule(JavaTimeModule())
15+
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
16+
.build()
917
val metrics: SensuMetrics = SensuMetrics(messageContext)
18+
19+
fun <T> publish(key: String, message: T) = publish(key, jsonMapper.writeValueAsString(message))
1020
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package no.nav.hjelpemidler.api
2+
3+
import io.ktor.http.HttpStatusCode
4+
import io.ktor.server.application.call
5+
import io.ktor.server.request.receive
6+
import io.ktor.server.routing.Route
7+
import io.ktor.server.routing.post
8+
import mu.KotlinLogging
9+
import no.nav.hjelpemidler.Context
10+
import java.time.LocalDateTime
11+
import java.util.UUID
12+
13+
private val logg = KotlinLogging.logger { }
14+
15+
fun Route.rekvisisjonAPI(context: Context) {
16+
post("/rekvisisjon-kvittering") {
17+
val kvittering = call.receive<RekvisisjonKvittering>()
18+
logg.info { "Mottok kvittering for rekvisisjon, id=${kvittering.id}" }
19+
context.publish(
20+
kvittering.saksnummer,
21+
RekvisisjonKvitteringMottatt(kvittering = kvittering)
22+
)
23+
call.response.status(HttpStatusCode.OK)
24+
}
25+
}
26+
27+
data class RekvisisjonKvittering(
28+
val id: String,
29+
val saksnummer: String,
30+
val ordrenummer: String,
31+
val system: String,
32+
val status: String,
33+
)
34+
35+
data class RekvisisjonKvitteringMottatt(
36+
val eventId: UUID = UUID.randomUUID(),
37+
val eventName: String = "hm-rekvisisjon-kvittering-mottatt",
38+
val opprettet: LocalDateTime = LocalDateTime.now(),
39+
val kvittering: RekvisisjonKvittering,
40+
)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
package no.nav.hjelpemidler.api
2+
3+
import io.ktor.client.request.bearerAuth
4+
import io.ktor.client.request.post
5+
import io.ktor.client.request.setBody
6+
import io.ktor.http.ContentType
7+
import io.ktor.http.HttpStatusCode
8+
import io.ktor.http.contentType
9+
import io.ktor.serialization.jackson.jackson
10+
import io.ktor.server.auth.Authentication
11+
import io.ktor.server.auth.authenticate
12+
import io.ktor.server.plugins.contentnegotiation.ContentNegotiation
13+
import io.ktor.server.testing.ApplicationTestBuilder
14+
import io.ktor.server.testing.testApplication
15+
import io.mockk.mockk
16+
import io.mockk.verify
17+
import no.nav.hjelpemidler.Context
18+
import no.nav.hjelpemidler.shouldBe
19+
import no.nav.hjelpemidler.token
20+
import kotlin.test.Test
21+
22+
internal class RekvisisjonAPITest {
23+
24+
private val context = Context(mockk(relaxed = true))
25+
26+
@Test
27+
internal fun `sender ut rekvisisjon på rapid`() = testApplication {
28+
configure()
29+
val body = context.jsonMapper.writeValueAsString(
30+
RekvisisjonKvittering(
31+
id = "1",
32+
saksnummer = "2",
33+
ordrenummer = "3",
34+
system = "HOTSAK",
35+
status = "ENTERED"
36+
)
37+
)
38+
client.post("/rekvisisjon-kvittering") {
39+
bearerAuth("qwer1234")
40+
contentType(ContentType.Application.Json)
41+
setBody(body)
42+
}.apply {
43+
status shouldBe HttpStatusCode.OK
44+
verify {
45+
context.publish("2", match { it.contains(body) })
46+
}
47+
}
48+
}
49+
50+
private fun ApplicationTestBuilder.configure() {
51+
install(ContentNegotiation) {
52+
jackson()
53+
}
54+
install(Authentication) {
55+
token("oebsToken") {
56+
validate("qwer1234")
57+
}
58+
}
59+
routing {
60+
authenticate("oebsToken") {
61+
rekvisisjonAPI(context)
62+
}
63+
}
64+
}
65+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<configuration>
3+
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
4+
<encoder>
5+
<pattern>%d{YYYY-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
6+
</encoder>
7+
</appender>
8+
<root level="WARN">
9+
<appender-ref ref="STDOUT" />
10+
</root>
11+
</configuration>

0 commit comments

Comments
 (0)