Skip to content

Commit 972a55b

Browse files
committed
Tester for å verifisere at ugyldig dato gir http 400
1 parent 6cd0bfe commit 972a55b

File tree

3 files changed

+100
-30
lines changed

3 files changed

+100
-30
lines changed

app/main/api/Routes.kt

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,26 +17,26 @@ import api.util.Consumers.getConsumerTag
1717
import api.util.httpCallCounter
1818
import api.util.httpFailedCallCounter
1919
import api.util.sporingsloggFailCounter
20-
import io.ktor.http.*
21-
import io.ktor.server.application.*
22-
import io.ktor.server.auth.*
23-
import io.ktor.server.plugins.callid.*
24-
import io.ktor.server.request.*
25-
import io.ktor.server.response.*
26-
import io.ktor.server.routing.*
20+
import io.ktor.http.HttpStatusCode
21+
import io.ktor.server.application.ApplicationCall
22+
import io.ktor.server.auth.authenticate
23+
import io.ktor.server.plugins.callid.callId
24+
import io.ktor.server.request.header
25+
import io.ktor.server.request.path
26+
import io.ktor.server.request.receive
27+
import io.ktor.server.response.respond
28+
import io.ktor.server.routing.Route
29+
import io.ktor.server.routing.post
30+
import io.ktor.server.routing.route
2731
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
28-
import no.nav.aap.arenaoppslag.kontrakt.ekstern.EksternVedtakRequest
29-
import org.slf4j.LoggerFactory
30-
import java.text.DateFormat
3132
import java.time.LocalDate
32-
import java.time.LocalDateTime
33-
import java.time.ZoneId
3433
import java.time.format.DateTimeFormatter
3534
import java.time.format.DateTimeFormatterBuilder
3635
import java.time.format.DateTimeParseException
37-
import java.util.*
36+
import java.util.UUID
37+
import no.nav.aap.arenaoppslag.kontrakt.ekstern.EksternVedtakRequest
38+
import org.slf4j.LoggerFactory
3839

39-
private val secureLog = LoggerFactory.getLogger("secureLog")
4040
private val logger = LoggerFactory.getLogger("App")
4141

4242
fun Route.api(

app/main/api/util/ErrorHandling.kt

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ package api.util
22

33
import api.auth.SamtykkeIkkeGittException
44
import api.sporingslogg.SporingsloggException
5-
import io.ktor.http.*
6-
import io.ktor.server.plugins.*
7-
import io.ktor.server.plugins.statuspages.*
8-
import io.ktor.server.request.*
5+
import io.ktor.http.HttpStatusCode
6+
import io.ktor.server.plugins.BadRequestException
7+
import io.ktor.server.plugins.statuspages.StatusPagesConfig
98
import io.ktor.server.request.ContentTransformationException
10-
import io.ktor.server.response.*
11-
import io.ktor.util.*
9+
import io.ktor.server.request.path
10+
import io.ktor.server.response.respond
1211
import io.micrometer.prometheusmetrics.PrometheusMeterRegistry
1312
import no.nav.aap.komponenter.httpklient.httpclient.error.ManglerTilgangException
1413
import org.slf4j.Logger
@@ -17,13 +16,10 @@ data class FeilRespons(
1716
val melding: String,
1817
)
1918

20-
fun Throwable.findRootCause(): Throwable {
21-
var current: Throwable = this
22-
while (current.cause != null && current.cause != current) {
23-
current = current.cause!!
24-
}
25-
return current
26-
}
19+
private fun Throwable.findRootCause(): Throwable =
20+
generateSequence(this) { it.cause }
21+
.takeWhile { it.cause != it }
22+
.last()
2723

2824
fun StatusPagesConfig.feilhåndtering(
2925
logger: Logger,
@@ -57,7 +53,6 @@ fun StatusPagesConfig.feilhåndtering(
5753
call.respond(HttpStatusCode.BadRequest, "${rootCause.message}")
5854
}
5955

60-
6156
is IllegalArgumentException -> {
6257
logger.warn("Feil i mottatte data", cause)
6358
call.respond(HttpStatusCode.BadRequest, "Feil i mottatte data")

app/test/AfpOffentligServerTest.kt

Lines changed: 77 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import io.ktor.client.call.*
1515
import io.ktor.client.plugins.contentnegotiation.*
1616
import io.ktor.client.request.*
1717
import io.ktor.client.statement.*
18+
import io.ktor.client.utils.EmptyContent.contentType
1819
import io.ktor.http.*
1920
import io.ktor.serialization.jackson.*
2021
import io.ktor.server.testing.*
@@ -30,8 +31,10 @@ import org.junit.jupiter.api.BeforeAll
3031
import org.junit.jupiter.api.Test
3132
import java.time.LocalDate
3233
import java.util.*
34+
import org.junit.jupiter.params.ParameterizedTest
35+
import org.junit.jupiter.params.provider.CsvSource
3336

34-
class AfpOffentligServerTest {
37+
internal class AfpOffentligServerTest {
3538
companion object {
3639
private val server = MockOAuth2Server()
3740

@@ -62,7 +65,6 @@ class AfpOffentligServerTest {
6265
val wellnowurl = server.wellKnownUrl("default").toString()
6366
val jwksuri = server.jwksUrl("default").toString()
6467

65-
6668
System.setProperty("MASKINPORTEN_JWKS_URI", jwksuri)
6769
System.setProperty("MASKINPORTEN_ISSUER", server.issuerUrl("default").toString())
6870
System.setProperty("MASKINPORTEN_WELL_KNOWN_URL", wellnowurl)
@@ -165,6 +167,79 @@ class AfpOffentligServerTest {
165167
)
166168
}
167169

170+
@Test
171+
fun `AFP felles - Ugyldig request gir 400 Bad request`() = testApplication {
172+
application {
173+
api(
174+
Config(),
175+
MockProducer(),
176+
ApiInternKlient(),
177+
tpRegisterKlient(),
178+
)
179+
}
180+
181+
val jwt = issueToken("nav:aap:afpprivat.read")
182+
183+
val response = client.post("/afp/fellesordningen") {
184+
header("Authorization", "Bearer ${jwt.serialize()}")
185+
header("X-callid", UUID.randomUUID().toString())
186+
contentType(ContentType.Application.Json)
187+
setBody("""{"personidentifikator":"1234","fraOgMedDato":"2025-01-01","tilOgMedDato":"2024-01-01","saksId":"123"}""")
188+
}
189+
190+
assertEquals(HttpStatusCode.BadRequest, response.status)
191+
}
192+
193+
@Test
194+
fun `AFP offentlig - Ugyldig request gir 400 Bad request`() = testApplication {
195+
application {
196+
api(
197+
Config(),
198+
MockProducer(),
199+
ApiInternKlient(),
200+
tpRegisterKlient(),
201+
)
202+
}
203+
204+
val jwt = issueToken("nav:aap:afpoffentlig.read")
205+
206+
val response = client.post("/afp/offentlig") {
207+
header("Authorization", "Bearer ${jwt.serialize()}")
208+
header("X-callid", UUID.randomUUID().toString())
209+
contentType(ContentType.Application.Json)
210+
setBody("""{"personidentifikator":"1234","fraOgMedDato":"2025-01-01","tilOgMedDato":"2024-01-01","saksId":"123"}""")
211+
}
212+
213+
assertEquals(HttpStatusCode.BadRequest, response.status)
214+
}
215+
216+
@ParameterizedTest
217+
@CsvSource(
218+
"/tp-samhandling",
219+
"/tp-samhandling-med-utbetalinger",
220+
)
221+
fun `TP Samhandling - Ugyldig request gir 400 Bad request`(endepunkt: String) = testApplication {
222+
application {
223+
api(
224+
Config(),
225+
MockProducer(),
226+
ApiInternKlient(),
227+
tpRegisterKlient(),
228+
)
229+
}
230+
231+
val jwt = issueToken("nav:aap:tpordningen.read")
232+
233+
val response = client.post(endepunkt) {
234+
header("Authorization", "Bearer ${jwt.serialize()}")
235+
header("X-callid", UUID.randomUUID().toString())
236+
contentType(ContentType.Application.Json)
237+
setBody("""{"personidentifikator":"1234","fraOgMedDato":"2025-01-01","tilOgMedDato":"2024-01-01"}""")
238+
}
239+
240+
assertEquals(HttpStatusCode.BadRequest, response.status)
241+
}
242+
168243
private fun tpRegisterKlientnsketSvar: Boolean? = true) = object : ITpRegisterClient {
169244
override fun brukerHarTpForholdOgYtelse(
170245
fnr: String,

0 commit comments

Comments
 (0)