Skip to content

Commit

Permalink
TB-90 Legg til eget endepunkt for å hente kun egenregistrerte data på…
Browse files Browse the repository at this point in the history
… bygning (#125)

* TB-90 Legg til eget endepunkt for å hente kun egenregistrerte data på bygning

* add integration test and extract some common functionality for route tests

* update utils for with packages and add value asserts for props

* update naming and descriptions

* better and more consistent wording for route docs
  • Loading branch information
anderssonw authored Oct 29, 2024
1 parent 962471e commit 5f1f18f
Show file tree
Hide file tree
Showing 5 changed files with 273 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,35 @@ package no.kartverket.matrikkel.bygning.v1.bygning
import assertk.all
import assertk.assertThat
import assertk.assertions.hasSize
import assertk.assertions.index
import assertk.assertions.isEqualTo
import assertk.assertions.isNotNull
import assertk.assertions.isNull
import assertk.assertions.prop
import assertk.assertions.single
import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
import io.ktor.server.testing.*
import no.kartverket.matrikkel.bygning.TestApplicationWithDb
import no.kartverket.matrikkel.bygning.application.models.kodelister.AvlopKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.EnergikildeKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.OppvarmingKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.VannforsyningKode
import no.kartverket.matrikkel.bygning.routes.v1.bygning.AvlopKodeResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.BruksarealResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.BruksenhetSimpleResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.ByggeaarResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.BygningResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.BygningSimpleResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.EnergikildeResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.OppvarmingResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.VannforsyningKodeResponse
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EgenregistreringRequest
import no.kartverket.matrikkel.bygning.v1.common.hasRegistreringstidspunktWithinThreshold
import no.kartverket.matrikkel.bygning.v1.common.validEgenregistrering
import org.junit.jupiter.api.Test
import java.time.Instant

class BygningRouteTest : TestApplicationWithDb() {

Expand All @@ -36,4 +56,74 @@ class BygningRouteTest : TestApplicationWithDb() {

assertThat(response.status).isEqualTo(HttpStatusCode.NotFound)
}

@Test
fun `gitt at en bygning eksisterer uten egenregistrert data skal alle feltene vaere null`() = testApplication {
val client = mainModuleWithDatabaseEnvironmentAndClient()

val response = client.get("/v1/bygninger/1/egenregistrert")

assertThat(response.status).isEqualTo(HttpStatusCode.OK)
assertThat(response.body<BygningSimpleResponse>()).all {
prop(BygningSimpleResponse::bruksenheter).hasSize(2)
prop(BygningSimpleResponse::bruksenheter).index(0).all {
prop(BruksenhetSimpleResponse::bruksareal).isNull()
prop(BruksenhetSimpleResponse::avlop).isNull()
prop(BruksenhetSimpleResponse::byggeaar).isNull()
prop(BruksenhetSimpleResponse::oppvarminger).isNull()
prop(BruksenhetSimpleResponse::energikilder).isNull()
prop(BruksenhetSimpleResponse::vannforsyning).isNull()
}
}
}

@Test
fun `gitt at en bygning eksisterer med noe egenregistrert data feltene vaere satt`() = testApplication {
val client = mainModuleWithDatabaseEnvironmentAndClient()

client.post("/v1/egenregistreringer") {
contentType(ContentType.Application.Json)
setBody(
EgenregistreringRequest.validEgenregistrering(),
)
}

val response = client.get("/v1/bygninger/1/egenregistrert")

val now = Instant.now()

assertThat(response.status).isEqualTo(HttpStatusCode.OK)
assertThat(response.body<BygningSimpleResponse>()).all {
prop(BygningSimpleResponse::bruksenheter).hasSize(2)
prop(BygningSimpleResponse::bruksenheter).index(0).all {
prop(BruksenhetSimpleResponse::bruksareal).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(125.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
prop(BruksenhetSimpleResponse::byggeaar).isNotNull().all {
prop(ByggeaarResponse::data).isEqualTo(2010)
prop(ByggeaarResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
prop(BruksenhetSimpleResponse::vannforsyning).isNotNull().all {
prop(VannforsyningKodeResponse::data).isEqualTo(VannforsyningKode.OffentligVannverk)
prop(VannforsyningKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
prop(BruksenhetSimpleResponse::avlop).isNotNull().all {
prop(AvlopKodeResponse::data).isEqualTo(AvlopKode.OffentligKloakk)
prop(AvlopKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
prop(BruksenhetSimpleResponse::oppvarminger).isNotNull().single().all {
prop(OppvarmingResponse::data).isEqualTo(OppvarmingKode.Elektrisk)
prop(OppvarmingResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
prop(BruksenhetSimpleResponse::energikilder).isNotNull().single().all {
prop(EnergikildeResponse::data).isEqualTo(EnergikildeKode.Elektrisitet)
prop(EnergikildeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}
}
}



Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package no.kartverket.matrikkel.bygning.v1.common

import assertk.Assert
import assertk.assertions.isBetween
import assertk.assertions.prop
import no.kartverket.matrikkel.bygning.application.models.kodelister.AvlopKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.EnergikildeKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.OppvarmingKode
import no.kartverket.matrikkel.bygning.application.models.kodelister.VannforsyningKode
import no.kartverket.matrikkel.bygning.routes.v1.bygning.RegisterMetadataResponse
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.AvlopRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksarealRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksenhetRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.ByggeaarRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EgenregistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EnergikildeRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.OppvarmingRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.VannforsyningRegistreringRequest
import java.time.Instant

internal fun EgenregistreringRequest.Companion.validEgenregistrering() = EgenregistreringRequest(
bygningId = 1L,
eier = "31129956715",
bruksenhetRegistreringer = listOf(
BruksenhetRegistreringRequest(
bruksenhetId = 1L,
bruksarealRegistrering = BruksarealRegistreringRequest(125.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(2010),
vannforsyningRegistrering = VannforsyningRegistreringRequest(
VannforsyningKode.OffentligVannverk,
),
avlopRegistrering = AvlopRegistreringRequest(
avlop = AvlopKode.OffentligKloakk,
),
energikildeRegistrering = EnergikildeRegistreringRequest(
listOf(EnergikildeKode.Elektrisitet),
),
oppvarmingRegistrering = OppvarmingRegistreringRequest(
listOf(OppvarmingKode.Elektrisk),
),
),
),
)

internal fun Assert<RegisterMetadataResponse>.hasRegistreringstidspunktWithinThreshold(now: Instant): () -> Unit {
return {
prop(RegisterMetadataResponse::registreringstidspunkt).isBetween(now, now.plusSeconds(1))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import assertk.Assert
import assertk.all
import assertk.assertThat
import assertk.assertions.index
import assertk.assertions.isBetween
import assertk.assertions.isEqualTo
import assertk.assertions.isNotNull
import assertk.assertions.isNull
Expand All @@ -30,14 +29,12 @@ import no.kartverket.matrikkel.bygning.routes.v1.bygning.MultikildeResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.OppvarmingResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.RegisterMetadataResponse
import no.kartverket.matrikkel.bygning.routes.v1.bygning.VannforsyningKodeResponse
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.AvlopRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksarealRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.BruksenhetRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.ByggeaarRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EgenregistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.EnergikildeRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.OppvarmingRegistreringRequest
import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.VannforsyningRegistreringRequest
import no.kartverket.matrikkel.bygning.v1.common.hasRegistreringstidspunktWithinThreshold
import no.kartverket.matrikkel.bygning.v1.common.validEgenregistrering
import org.junit.jupiter.api.Test
import java.time.Instant

Expand Down Expand Up @@ -275,34 +272,4 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {

private fun Assert<List<BruksenhetResponse>>.withBruksenhetId(bruksenhetId: Long) =
transform(appendName("[bruksenhetId=$bruksenhetId]")) { it.find { br -> br.bruksenhetId == bruksenhetId }!! }

private fun EgenregistreringRequest.Companion.validEgenregistrering() = EgenregistreringRequest(
bygningId = 1L,
eier = "31129956715",
bruksenhetRegistreringer = listOf(
BruksenhetRegistreringRequest(
bruksenhetId = 1L,
bruksarealRegistrering = BruksarealRegistreringRequest(125.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(2010),
vannforsyningRegistrering = VannforsyningRegistreringRequest(
VannforsyningKode.OffentligVannverk,
),
avlopRegistrering = AvlopRegistreringRequest(
avlop = AvlopKode.OffentligKloakk,
),
energikildeRegistrering = EnergikildeRegistreringRequest(
listOf(EnergikildeKode.Elektrisitet),
),
oppvarmingRegistrering = OppvarmingRegistreringRequest(
listOf(OppvarmingKode.Elektrisk),
),
),
),
)

private fun Assert<RegisterMetadataResponse>.hasRegistreringstidspunktWithinThreshold(now: Instant): () -> Unit {
return {
prop(RegisterMetadataResponse::registreringstidspunkt).isBetween(now, now.plusSeconds(1))
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ data class BygningResponse(
val bruksenheter: List<BruksenhetResponse>,
)

@Serializable
data class BygningSimpleResponse(
val bygningId: Long,
val bygningsnummer: Long,
val bruksenheter: List<BruksenhetSimpleResponse>,
)

@Serializable
data class BruksenhetResponse(
val bruksenhetId: Long,
Expand All @@ -48,6 +55,17 @@ data class BruksenhetResponse(
val oppvarminger: MultikildeResponse<List<OppvarmingResponse>>?,
)

@Serializable
data class BruksenhetSimpleResponse(
val bruksenhetId: Long,
val byggeaar: ByggeaarResponse?,
val bruksareal: BruksarealResponse?,
val vannforsyning: VannforsyningKodeResponse?,
val avlop: AvlopKodeResponse?,
val energikilder: List<EnergikildeResponse>?,
val oppvarminger: List<OppvarmingResponse>?,
)

@Serializable
data class RegisterMetadataResponse(
@Serializable(with = InstantSerializer::class)
Expand Down Expand Up @@ -99,6 +117,12 @@ fun Bygning.toBygningResponse(): BygningResponse = BygningResponse(
oppvarming = this.oppvarminger.toMultikildeResponse { map(Oppvarming::toOppvarmingResponse) },
)

fun Bygning.toBygningSimpleResponseFromEgenregistrertData(): BygningSimpleResponse = BygningSimpleResponse(
bygningId = this.bygningId,
bygningsnummer = this.bygningsnummer,
bruksenheter = this.bruksenheter.map { it.toBruksenhetSimpleResponseFromEgenregistrertData() },
)

fun Bruksenhet.toBruksenhetResponse(): BruksenhetResponse = BruksenhetResponse(
bruksenhetId = this.bruksenhetId,
byggeaar = this.byggeaar.toMultikildeResponse(Byggeaar::toByggeaarResponse),
Expand All @@ -109,6 +133,17 @@ fun Bruksenhet.toBruksenhetResponse(): BruksenhetResponse = BruksenhetResponse(
avlop = this.avlop.toMultikildeResponse(Avlop::toAvlopKodeResponse),
)

fun Bruksenhet.toBruksenhetSimpleResponseFromEgenregistrertData(): BruksenhetSimpleResponse = BruksenhetSimpleResponse(
bruksenhetId = this.bruksenhetId,
byggeaar = this.byggeaar.egenregistrert?.toByggeaarResponse(),
bruksareal = this.bruksareal.egenregistrert?.toBruksarealResponse(),
vannforsyning = this.vannforsyning.egenregistrert?.toVannforsyningResponse(),
avlop = this.avlop.egenregistrert?.toAvlopKodeResponse(),
energikilder = this.energikilder.egenregistrert?.map { it.toEnergikildeResponse() },
oppvarminger = this.oppvarminger.egenregistrert?.map { it.toOppvarmingResponse() },
)


private fun Byggeaar.toByggeaarResponse(): ByggeaarResponse = ByggeaarResponse(
data = this.data,
metadata = metadata.toRegisterMetadataResponse(),
Expand Down
Loading

0 comments on commit 5f1f18f

Please sign in to comment.