Skip to content

Commit

Permalink
Retter opp feilen der vi ikke kunne oppdatere opplysninger (#27)
Browse files Browse the repository at this point in the history
* Retter opp feilen der vi ikke kunne oppdatere opplysninger

* Retter opp feilen der vi ikke kunne oppdatere opplysninger
  • Loading branch information
unorsk authored Sep 14, 2023
1 parent cb92f0c commit ff919d0
Show file tree
Hide file tree
Showing 8 changed files with 84 additions and 30 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package no.nav.bidrag.behandling.database.datamodell

import jakarta.persistence.Column
import jakarta.persistence.Entity
import jakarta.persistence.EnumType
import jakarta.persistence.Enumerated
Expand All @@ -18,15 +19,16 @@ class Opplysninger(
@JoinColumn(name = "behandling_id", nullable = false)
val behandling: Behandling,

var aktiv: Boolean,

@Enumerated(EnumType.STRING)
val opplysningerType: OpplysningerType,

val data: String,

val hentetDato: Date,

@Column(insertable = false, updatable = false)
val ts: Date? = null,

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,9 @@ package no.nav.bidrag.behandling.database.repository

import no.nav.bidrag.behandling.database.datamodell.Opplysninger
import no.nav.bidrag.behandling.database.datamodell.OpplysningerType
import org.springframework.data.jpa.repository.Query
import org.springframework.data.repository.CrudRepository
import java.util.Optional

interface OpplysningerRepository : CrudRepository<Opplysninger, Long> {
@Query("select o from opplysninger o where o.behandling.id = :behandlingId and o.opplysningerType = :opplysningerType and o.aktiv = true")
fun findActiveByBehandlingIdAndType(behandlingId: Long, opplysningerType: OpplysningerType): Optional<Opplysninger>
fun findTopByBehandlingIdAndOpplysningerTypeOrderByTsDescIdDesc(behandlingId: Long, opplysningerType: OpplysningerType): Optional<Opplysninger>
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import java.time.LocalDate
data class OpplysningerDto(
val id: Long,
val behandlingId: Long,
val aktiv: Boolean,
val opplysningerType: OpplysningerType,
val data: String,

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import no.nav.bidrag.behandling.database.datamodell.OpplysningerType
import no.nav.bidrag.behandling.database.repository.BehandlingRepository
import no.nav.bidrag.behandling.database.repository.OpplysningerRepository
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import java.util.Date
import java.util.Optional

Expand All @@ -15,27 +16,15 @@ class OpplysningerService(
private val behandlingRepository: BehandlingRepository,
) {

@Transactional
fun opprett(behandlingId: Long, opplysningerType: OpplysningerType, data: String, hentetDato: Date): Opplysninger {
// oppdater eksisterende opplysninger
opplysningerRepository.findActiveByBehandlingIdAndType(behandlingId, opplysningerType).ifPresent {
// update aktiv to false
updateAktivOpplysninger(it, false)
}

val behandling = behandlingRepository.findBehandlingById(behandlingId).orElseThrow { `404`(behandlingId) }
return opplysningerRepository.save<Opplysninger>(Opplysninger(behandling, true, opplysningerType, data, hentetDato))
behandlingRepository
.findBehandlingById(behandlingId).orElseThrow { `404`(behandlingId) }
.let {
return opplysningerRepository.save<Opplysninger>(Opplysninger(it, opplysningerType, data, hentetDato))
}
}

fun updateAktivOpplysninger(opplysninger: Opplysninger, aktiv: Boolean) =
opplysningerRepository.save(
opplysningerRepository.findById(opplysninger.id!!)
.orElseThrow { `404`(opplysninger.id) }
.let {
it.aktiv = aktiv
it
},
)

fun hentSistAktiv(behandlingId: Long, opplysningerType: OpplysningerType): Optional<Opplysninger> =
opplysningerRepository.findActiveByBehandlingIdAndType(behandlingId, opplysningerType)
opplysningerRepository.findTopByBehandlingIdAndOpplysningerTypeOrderByTsDescIdDesc(behandlingId, opplysningerType)
}
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ fun Set<Inntekt>.toInntektDto() = this.map {
}.toSet()

fun Opplysninger.toDto(): OpplysningerDto {
return OpplysningerDto(this.id!!, this.behandling.id!!, this.aktiv, this.opplysningerType, this.data, this.hentetDato.toLocalDate())
return OpplysningerDto(this.id!!, this.behandling.id!!, this.opplysningerType, this.data, this.hentetDato.toLocalDate())
}

fun Behandling.tilForsendelseRolleDto() = roller.map {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
ALTER TABLE OPPLYSNINGER
ADD COLUMN IF NOT EXISTS ts timestamp DEFAULT now() NOT NULL;

ALTER TABLE OPPLYSNINGER
DROP COLUMN AKTIV;
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,31 @@ class OpplysningerControllerTest : KontrollerTestRunner() {
Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode)
Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId)
Assertions.assertEquals("opp1", oppAktivResult1.body!!.data)
Assertions.assertTrue(oppAktivResult1.body!!.aktiv)
}

@Test
fun `skal ikke være mulig å opprette flere aktive opplysninger`() {
val roller = setOf(
CreateRolleDtoTest(CreateRolleRolleType.BARN, "123", Date(1)),
CreateRolleDtoTest(CreateRolleRolleType.BIDRAGS_MOTTAKER, "123", Date(1)),
)
val testBehandlingMedNull = BehandlingControllerTest.createBehandlingRequestTest("sak123", "en12", roller)

// 1. Create new behandling
val behandling = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling", HttpMethod.POST, HttpEntity(testBehandlingMedNull), CreateBehandlingResponse::class.java)
Assertions.assertEquals(HttpStatus.OK, behandling.statusCode)

val behandlingId = behandling.body!!.id

// 2. Create new opplysninger opp and opp1
skalOppretteOpplysninger(behandlingId, "opp", true, OpplysningerType.BOFORHOLD)
skalOppretteOpplysninger(behandlingId, "opp1", true, OpplysningerType.BOFORHOLD)

// 3. Assert that opp1 is active
val oppAktivResult1 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/BOFORHOLD/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java)
Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode)
Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId)
Assertions.assertEquals("opp1", oppAktivResult1.body!!.data)
}

@Test
Expand Down Expand Up @@ -103,14 +127,12 @@ class OpplysningerControllerTest : KontrollerTestRunner() {
Assertions.assertEquals(HttpStatus.OK, oppAktivResult1.statusCode)
Assertions.assertEquals(behandlingId, oppAktivResult1.body!!.behandlingId)
Assertions.assertEquals("opp1", oppAktivResult1.body!!.data)
Assertions.assertTrue(oppAktivResult1.body!!.aktiv)

// 4. Assert that inn1 is active
val oppAktivResult2 = httpHeaderTestRestTemplate.exchange("${rootUri()}/behandling/$behandlingId/opplysninger/${OpplysningerType.INNTEKTSOPPLYSNINGER.name}/aktiv", HttpMethod.GET, HttpEntity.EMPTY, OpplysningerDto::class.java)
Assertions.assertEquals(HttpStatus.OK, oppAktivResult2.statusCode)
Assertions.assertEquals(behandlingId, oppAktivResult2.body!!.behandlingId)
Assertions.assertEquals("inn1", oppAktivResult2.body!!.data)
Assertions.assertTrue(oppAktivResult2.body!!.aktiv)
}

private fun skalOppretteOpplysninger(
Expand All @@ -131,7 +153,6 @@ class OpplysningerControllerTest : KontrollerTestRunner() {
Assertions.assertEquals(HttpStatus.OK, opp.statusCode)
val body = opp.body!!
Assertions.assertEquals(behandlingId, body.behandlingId)
Assertions.assertEquals(true, body.aktiv)

return body
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,58 @@
package no.nav.bidrag.behandling.service

import no.nav.bidrag.behandling.TestContainerRunner
import no.nav.bidrag.behandling.database.datamodell.Behandling
import no.nav.bidrag.behandling.database.datamodell.BehandlingType
import no.nav.bidrag.behandling.database.datamodell.OpplysningerType
import no.nav.bidrag.behandling.database.datamodell.SoknadFraType
import no.nav.bidrag.behandling.database.datamodell.SoknadType
import no.nav.bidrag.domain.enums.EngangsbelopType
import org.junit.jupiter.api.Assertions.assertFalse
import org.junit.jupiter.api.Test
import org.springframework.beans.factory.annotation.Autowired
import java.util.Date
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class OpplysningerServiceTest : TestContainerRunner() {
@Autowired
lateinit var opplysningerService: OpplysningerService

@Autowired
lateinit var behandlingService: BehandlingService

@Test
fun `hente opplysninger`() {
val res = opplysningerService.hentSistAktiv(1, OpplysningerType.BOFORHOLD)
assertFalse(res.isPresent)
}

@Test
fun `skal være bare en rad med aktive opplysninger`() {
val b = behandlingService.createBehandling(
Behandling(
BehandlingType.FORSKUDD,
SoknadType.FASTSETTELSE,
Date(1),
Date(2),
Date(2),
"123",
123L,
null,
"ENH1",
SoknadFraType.VERGE,
engangsbelopType = EngangsbelopType.ETTERGIVELSE,
stonadType = null,
),
)
val opp1 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1))
val opp2 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1))
val opp4 = opplysningerService.opprett(b.id!!, OpplysningerType.BOFORHOLD, "data", Date(1))
val opp3 = opplysningerService.opprett(b.id!!, OpplysningerType.INNTEKTSOPPLYSNINGER, "data", Date(1))

val option = opplysningerService.hentSistAktiv(b.id!!, OpplysningerType.BOFORHOLD)

assertTrue(option.isPresent)
assertEquals(opp4.id, option.get().id)
}
}

0 comments on commit ff919d0

Please sign in to comment.