Skip to content

Commit

Permalink
TB-89: All egenregistrering på bruksenhetnivå
Browse files Browse the repository at this point in the history
  • Loading branch information
kvstrant committed Oct 23, 2024
1 parent f168d30 commit 5b02025
Show file tree
Hide file tree
Showing 10 changed files with 151 additions and 185 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,9 @@ import assertk.assertions.isEmpty
import assertk.assertions.isEqualTo
import assertk.assertions.prop
import assertk.assertions.single
import no.kartverket.matrikkel.bygning.models.BruksarealRegistrering
import no.kartverket.matrikkel.bygning.models.BygningRegistrering
import no.kartverket.matrikkel.bygning.models.Egenregistrering
import no.kartverket.matrikkel.bygning.models.RegistreringAktoer
import no.kartverket.matrikkel.bygning.models.RegistreringAktoer.*
import no.kartverket.matrikkel.bygning.models.RegistreringAktoer.Foedselsnummer
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import java.time.Instant
Expand All @@ -23,12 +21,6 @@ class EgenregistreringRepositoryTest : TestWithDb() {

private val defaultBygningRegistrering = BygningRegistrering(
bygningId = 1L,
bruksarealRegistrering = BruksarealRegistrering(
bruksareal = 125.0,
),
byggeaarRegistrering = null,
vannforsyningRegistrering = null,
avlopRegistrering = null,
bruksenhetRegistreringer = emptyList()
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,14 @@ package no.kartverket.matrikkel.bygning.v1.egenregistrering
import assertk.Assert
import assertk.all
import assertk.assertThat
import assertk.assertions.containsExactly
import assertk.assertions.extracting
import assertk.assertions.index
import assertk.assertions.isBetween
import assertk.assertions.isEqualTo
import assertk.assertions.isNotNull
import assertk.assertions.isNull
import assertk.assertions.prop
import assertk.assertions.single
import assertk.assertions.support.appendName
import io.ktor.client.call.*
import io.ktor.client.request.*
import io.ktor.http.*
Expand All @@ -35,7 +34,6 @@ import no.kartverket.matrikkel.bygning.routes.v1.egenregistrering.AvlopRegistrer
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.BygningRegistreringRequest
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
Expand Down Expand Up @@ -81,40 +79,33 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {
val now = Instant.now()

assertThat(bygning).all {
prop(BygningResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(125.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
prop(BygningResponse::bruksenheter).index(0).all {
prop(BruksenhetResponse::bruksenhetId).isEqualTo(1L)
prop(BruksenhetResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(125.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}

prop(BygningResponse::byggeaar).isNotNull().all {
prop(MultikildeResponse<ByggeaarResponse>::egenregistrert).isNotNull().all {
prop(ByggeaarResponse::data).isEqualTo(2010)
prop(ByggeaarResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
prop(BruksenhetResponse::byggeaar).isNotNull().all {
prop(MultikildeResponse<ByggeaarResponse>::egenregistrert).isNotNull().all {
prop(ByggeaarResponse::data).isEqualTo(2010)
prop(ByggeaarResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}

prop(BygningResponse::vannforsyning).isNotNull().all {
prop(MultikildeResponse<VannforsyningKodeResponse>::egenregistrert).isNotNull().all {
prop(VannforsyningKodeResponse::data).isEqualTo(VannforsyningKode.OffentligVannverk)
prop(VannforsyningKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}

prop(BygningResponse::avlop).isNotNull().all {
prop(MultikildeResponse<AvlopKodeResponse>::egenregistrert).isNotNull().all {
prop(AvlopKodeResponse::data).isEqualTo(AvlopKode.OffentligKloakk)
prop(AvlopKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
prop(BruksenhetResponse::vannforsyning).isNotNull().all {
prop(MultikildeResponse<VannforsyningKodeResponse>::egenregistrert).isNotNull().all {
prop(VannforsyningKodeResponse::data).isEqualTo(VannforsyningKode.OffentligVannverk)
prop(VannforsyningKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}

prop(BygningResponse::bruksenheter).index(0).all {
prop(BruksenhetResponse::bruksenhetId).isEqualTo(1L)
prop(BruksenhetResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(100.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
prop(BruksenhetResponse::avlop).isNotNull().all {
prop(MultikildeResponse<AvlopKodeResponse>::egenregistrert).isNotNull().all {
prop(AvlopKodeResponse::data).isEqualTo(AvlopKode.OffentligKloakk)
prop(AvlopKodeResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}

Expand Down Expand Up @@ -149,9 +140,7 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {
val response = client.post("/v1/egenregistreringer") {
contentType(ContentType.Application.Json)
setBody(
EgenregistreringRequest.validEgenregistrering().copy(
bygningRegistrering = null,
),
EgenregistreringRequest.validEgenregistrering(),
)
}

Expand All @@ -168,7 +157,7 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {

prop(BruksenhetResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(100.0)
prop(BruksarealResponse::data).isEqualTo(125.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
Expand Down Expand Up @@ -206,16 +195,13 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {
contentType(ContentType.Application.Json)
setBody(
EgenregistreringRequest.validEgenregistrering().copy(
bygningRegistrering = BygningRegistreringRequest(
bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 120.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(byggeaar = 2008),
vannforsyningRegistrering = null,
avlopRegistrering = null,
),
bruksenhetRegistreringer = listOf(
BruksenhetRegistreringRequest(
bruksenhetId = 1L,
bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 40.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(byggeaar = 2008),
vannforsyningRegistrering = null,
avlopRegistrering = null,
energikildeRegistrering = null,
oppvarmingRegistrering = null,
),
Expand All @@ -231,24 +217,25 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {
val bygning = bygningResponse.body<BygningResponse>()

val now = Instant.now()
assertThat(bygning).all {
prop(BygningResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(120.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
assertThat(bygning).prop(BygningResponse::bruksenheter).all {
withBruksenhetId(1L).all {
prop(BruksenhetResponse::byggeaar).isNotNull().all {
prop(MultikildeResponse<ByggeaarResponse>::egenregistrert).isNotNull().all {
prop(ByggeaarResponse::data).isEqualTo(2008)
prop(ByggeaarResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}

prop(BygningResponse::byggeaar).isNotNull().all {
prop(MultikildeResponse<ByggeaarResponse>::egenregistrert).isNotNull().all {
prop(ByggeaarResponse::data).isEqualTo(2008)
prop(ByggeaarResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
prop(BruksenhetResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::data).isEqualTo(40.0)
prop(BruksarealResponse::metadata).hasRegistreringstidspunktWithinThreshold(now)
}
}
}
prop(BygningResponse::bruksenheter)
.extracting(BruksenhetResponse::bruksenhetId) { it.bruksareal?.egenregistrert?.data }
.containsExactly(1L to 40.0, 2L to null)

withBruksenhetId(2L).all {
prop(BruksenhetResponse::byggeaar).isNull()
prop(BruksenhetResponse::bruksareal).isNull()
}
}
}

Expand All @@ -274,33 +261,35 @@ class EgenregistreringRouteTest : TestApplicationWithDb() {
val bygning = bygningResponse.body<BygningResponse>()

assertThat(bygning).all {
prop(BygningResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::metadata).all {
prop(RegisterMetadataResponse::registrertAv).isEqualTo("31129956715")
prop(BygningResponse::bruksareal).isNotNull().prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNull()
prop(BygningResponse::bruksenheter).withBruksenhetId(1L)
.prop(BruksenhetResponse::bruksareal).isNotNull().all {
prop(MultikildeResponse<BruksarealResponse>::egenregistrert).isNotNull().all {
prop(BruksarealResponse::metadata).all {
prop(RegisterMetadataResponse::registrertAv).isEqualTo("31129956715")
}
}
}
}
}
}

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",
bygningRegistrering = BygningRegistreringRequest(
bruksarealRegistrering = BruksarealRegistreringRequest(125.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(2010),
vannforsyningRegistrering = VannforsyningRegistreringRequest(
VannforsyningKode.OffentligVannverk,
),
avlopRegistrering = AvlopRegistreringRequest(
avlop = AvlopKode.OffentligKloakk,
),
),
bruksenhetRegistreringer = listOf(
BruksenhetRegistreringRequest(
bruksenhetId = 1L,
bruksarealRegistrering = BruksarealRegistreringRequest(bruksareal = 100.0),
bruksarealRegistrering = BruksarealRegistreringRequest(125.0),
byggeaarRegistrering = ByggeaarRegistreringRequest(2010),
vannforsyningRegistrering = VannforsyningRegistreringRequest(
VannforsyningKode.OffentligVannverk,
),
avlopRegistrering = AvlopRegistreringRequest(
avlop = AvlopKode.OffentligKloakk,
),
energikildeRegistrering = EnergikildeRegistreringRequest(
listOf(EnergikildeKode.Elektrisitet),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,10 @@ data class Oppvarming(val data: OppvarmingKode, val metadata: RegisterMetadata)
data class Bruksenhet(
val bruksenhetId: Long,
val bygningId: Long,
val byggeaar: Multikilde<Byggeaar> = Multikilde(),
val bruksareal: Multikilde<Bruksareal> = Multikilde(),
val energikilder: Multikilde<List<Energikilde>> = Multikilde(),
val oppvarminger: Multikilde<List<Oppvarming>> = Multikilde(),
val vannforsyning: Multikilde<Vannforsyning> = Multikilde(),
val avlop: Multikilde<Avlop> = Multikilde(),
)
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,7 @@ package no.kartverket.matrikkel.bygning.models

fun Bygning.withEgenregistrertData(egenregistreringer: List<Egenregistrering>): Bygning {
return egenregistreringer.fold(this) { bygningAggregate, egenregistrering ->
val metadata = RegisterMetadata(
registreringstidspunkt = egenregistrering.registreringstidspunkt,
registrertAv = egenregistrering.eier,
)

bygningAggregate.copy(
byggeaar = bygningAggregate.byggeaar.aggregate {
egenregistrering.bygningRegistrering.byggeaarRegistrering?.let {
Byggeaar(
data = it.byggeaar,
metadata = metadata,
)
}
},
bruksareal = bygningAggregate.bruksareal.aggregate {
egenregistrering.bygningRegistrering.bruksarealRegistrering?.let {
Bruksareal(
data = it.bruksareal,
metadata = metadata,
)
}
},
vannforsyning = bygningAggregate.vannforsyning.aggregate {
egenregistrering.bygningRegistrering.vannforsyningRegistrering?.let {
Vannforsyning(
data = it.vannforsyning,
metadata = metadata,
)
}
},
avlop = bygningAggregate.avlop.aggregate {
egenregistrering.bygningRegistrering.avlopRegistrering?.let {
Avlop(
data = it.avlop,
metadata = metadata,
)
}
},
bruksenheter = bygningAggregate.bruksenheter.map {
it.applyEgenregistrering(egenregistrering)
},
Expand All @@ -65,6 +28,14 @@ private fun Bruksenhet.applyEgenregistrering(egenregistrering: Egenregistrering)
)

return this.copy(
byggeaar = this.byggeaar.aggregate {
bruksenhetRegistrering.byggeaarRegistrering?.let {
Byggeaar(
data = it.byggeaar,
metadata = metadata,
)
}
},
bruksareal = this.bruksareal.aggregate {
bruksenhetRegistrering.bruksarealRegistrering?.let {
Bruksareal(
Expand All @@ -73,6 +44,22 @@ private fun Bruksenhet.applyEgenregistrering(egenregistrering: Egenregistrering)
)
}
},
vannforsyning = this.vannforsyning.aggregate {
bruksenhetRegistrering.vannforsyningRegistrering?.let {
Vannforsyning(
data = it.vannforsyning,
metadata = metadata,
)
}
},
avlop = this.avlop.aggregate {
bruksenhetRegistrering.avlopRegistrering?.let {
Avlop(
data = it.avlop,
metadata = metadata,
)
}
},
energikilder = this.energikilder.aggregate {
bruksenhetRegistrering.energikildeRegistrering?.let {
it.energikilder?.map { registrertKilde ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,16 @@ data class OppvarmingRegistrering(
@Serializable
data class BygningRegistrering(
val bygningId: Long,
val bruksarealRegistrering: BruksarealRegistrering?,
val byggeaarRegistrering: ByggeaarRegistrering?,
val vannforsyningRegistrering: VannforsyningRegistrering?,
val avlopRegistrering: AvlopRegistrering?,
val bruksenhetRegistreringer: List<BruksenhetRegistrering>
)

@Serializable
data class BruksenhetRegistrering(
val bruksenhetId: Long,
val bruksarealRegistrering: BruksarealRegistrering?,
val byggeaarRegistrering: ByggeaarRegistrering?,
val vannforsyningRegistrering: VannforsyningRegistrering?,
val avlopRegistrering: AvlopRegistrering?,
val energikildeRegistrering: EnergikildeRegistrering?,
val oppvarmingRegistrering: OppvarmingRegistrering?,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@ data class BygningResponse(
@Serializable
data class BruksenhetResponse(
val bruksenhetId: Long,
val byggeaar: MultikildeResponse<ByggeaarResponse>?,
val bruksareal: MultikildeResponse<BruksarealResponse>?,
val vannforsyning: MultikildeResponse<VannforsyningKodeResponse>?,
val avlop: MultikildeResponse<AvlopKodeResponse>?,
val energikilder: MultikildeResponse<List<EnergikildeResponse>>?,
val oppvarminger: MultikildeResponse<List<OppvarmingResponse>>?,
)
Expand Down Expand Up @@ -98,9 +101,12 @@ fun Bygning.toBygningResponse(): BygningResponse = BygningResponse(

fun Bruksenhet.toBruksenhetResponse(): BruksenhetResponse = BruksenhetResponse(
bruksenhetId = this.bruksenhetId,
byggeaar = this.byggeaar.toMultikildeResponse(Byggeaar::toByggeaarResponse),
bruksareal = this.bruksareal.toMultikildeResponse(Bruksareal::toBruksarealResponse),
energikilder = this.energikilder.toMultikildeResponse { map(Energikilde::toEnergikildeResponse) },
oppvarminger = this.oppvarminger.toMultikildeResponse { map(Oppvarming::toOppvarmingResponse) },
vannforsyning = this.vannforsyning.toMultikildeResponse(Vannforsyning::toVannforsyningResponse),
avlop = this.avlop.toMultikildeResponse(Avlop::toAvlopKodeResponse),
)

private fun Byggeaar.toByggeaarResponse(): ByggeaarResponse = ByggeaarResponse(
Expand Down
Loading

0 comments on commit 5b02025

Please sign in to comment.