diff --git a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/db/OppgaveQuerySqlBuilder.kt b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/db/OppgaveQuerySqlBuilder.kt index a369aa20d..3e43fdae3 100644 --- a/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/db/OppgaveQuerySqlBuilder.kt +++ b/src/main/kotlin/no/nav/k9/los/nyoppgavestyring/query/db/OppgaveQuerySqlBuilder.kt @@ -12,9 +12,6 @@ import no.nav.k9.los.spi.felter.OrderByInput import no.nav.k9.los.spi.felter.SqlMedParams import no.nav.k9.los.spi.felter.TransientFeltutleder import no.nav.k9.los.spi.felter.WhereInput -import org.postgresql.util.PGInterval -import java.math.BigInteger -import java.time.LocalDate import java.time.LocalDateTime class OppgaveQuerySqlBuilder( diff --git a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/query/mapping/OppgaveQueryToSqlMapperTest.kt b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/query/mapping/OppgaveQueryToSqlMapperTest.kt index 87ac785c1..72de7ed70 100644 --- a/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/query/mapping/OppgaveQueryToSqlMapperTest.kt +++ b/src/test/kotlin/no/nav/k9/los/nyoppgavestyring/query/mapping/OppgaveQueryToSqlMapperTest.kt @@ -1,13 +1,15 @@ package no.nav.k9.los.nyoppgavestyring.query.mapping import assertk.assertThat +import assertk.assertions.contains +import assertk.assertions.hasSize import assertk.assertions.isEqualTo -import io.mockk.mockk import no.nav.k9.los.nyoppgavestyring.FeltType import no.nav.k9.los.nyoppgavestyring.felter import no.nav.k9.los.nyoppgavestyring.mottak.oppgave.Oppgavestatus import no.nav.k9.los.nyoppgavestyring.query.QueryRequest import no.nav.k9.los.nyoppgavestyring.query.db.OmrådeOgKode +import no.nav.k9.los.nyoppgavestyring.query.db.OppgaveQuerySqlBuilder import no.nav.k9.los.nyoppgavestyring.query.db.OppgavefeltMedMer import no.nav.k9.los.nyoppgavestyring.query.dto.felter.Oppgavefelt import no.nav.k9.los.nyoppgavestyring.query.dto.query.CombineOppgavefilter @@ -21,16 +23,27 @@ class OppgaveQueryToSqlMapperTest { @Test fun `ytelse - oppgaveQueryMapper må sette parameter oppgavestatus for bruk av indeks på oppgavefelt_verdi`() { - val oppgaveQuery = OppgaveQuery(listOf( - FeltverdiOppgavefilter("K9", "oppgavestatus", "EQUALS", listOf(Oppgavestatus.AAPEN.kode)), - FeltverdiOppgavefilter("K9", "fagsystem", "NOT_EQUALS", listOf("Tullball")), - CombineOppgavefilter("OR", listOf( - FeltverdiOppgavefilter("K9", "mottattDato", "LESS_THAN", listOf(LocalDate.of(2022, 1, 1))), - CombineOppgavefilter("AND", listOf( - FeltverdiOppgavefilter("K9", "oppgavestatus", "EQUALS", listOf(Oppgavestatus.LUKKET.kode)), - )) - )) - )) + val oppgaveQuery = OppgaveQuery( + listOf( + FeltverdiOppgavefilter("K9", "oppgavestatus", "EQUALS", listOf(Oppgavestatus.AAPEN.kode)), + FeltverdiOppgavefilter("K9", "fagsystem", "NOT_EQUALS", listOf("Tullball")), + CombineOppgavefilter( + "OR", listOf( + FeltverdiOppgavefilter("K9", "mottattDato", "LESS_THAN", listOf(LocalDate.of(2022, 1, 1))), + CombineOppgavefilter( + "AND", listOf( + FeltverdiOppgavefilter( + "K9", + "oppgavestatus", + "EQUALS", + listOf(Oppgavestatus.LUKKET.kode) + ), + ) + ) + ) + ) + ) + ) val sqlOppgaveQuery = OppgaveQueryToSqlMapper.toSqlOppgaveQuery( QueryRequest(oppgaveQuery), @@ -45,7 +58,13 @@ class OppgaveQueryToSqlMapperTest { fun `ytelse - oppgaveQueryMapper må sette parameter oppgavestatus for bruk av indeks på oppgavefelt_verdi123`() { val oppgaveQuery = OppgaveQuery( listOf( - byggFilterK9(FeltType.OPPGAVE_STATUS, FeltverdiOperator.IN, Oppgavestatus.AAPEN.kode, Oppgavestatus.VENTER.kode)) + byggFilterK9( + FeltType.OPPGAVE_STATUS, + FeltverdiOperator.IN, + Oppgavestatus.AAPEN.kode, + Oppgavestatus.VENTER.kode + ) + ) ) val oppgavefelt = Oppgavefelt( @@ -66,7 +85,52 @@ class OppgaveQueryToSqlMapperTest { assertThat(sqlOppgaveQuery.oppgavestatusFilter).isEqualTo(listOf(Oppgavestatus.AAPEN, Oppgavestatus.VENTER)) } - private fun byggFilterK9(feltType: FeltType, feltverdiOperator: FeltverdiOperator, vararg verdier: String?): FeltverdiOppgavefilter { + @Test + fun `skal traversere hele treet med filtre og sette alle som betingelser`() { + val oppgaveQuery = OppgaveQuery( + listOf( + // 2 betingelser + byggFilterK9( + FeltType.OPPGAVE_STATUS, + FeltverdiOperator.IN, + Oppgavestatus.AAPEN.kode, + Oppgavestatus.VENTER.kode + ), + // 2 betingelser (starten og slutten på dagen) + byggFilterK9(FeltType.MOTTATT_DATO, FeltverdiOperator.EQUALS, "2024-12-24"), + // 4 betingelser + byggFilterK9(FeltType.YTELSE_TYPE, FeltverdiOperator.IN, "PSB", "OMP", "FOO", "BAR"), + ) + ) + val sqlBuilder = OppgaveQueryToSqlMapper.toSqlOppgaveQuery( + QueryRequest(oppgaveQuery), + felter, + LocalDateTime.now() + ) + + val sql = byggSql(sqlBuilder) + assertThat(sqlBuilder.getQuery()).contains(sqlBuilder.getParams().keys) + assertThat(sqlBuilder.getParams()).hasSize(8 * 3) // totalt 8 betingelser, hver av de har parameter for feltkode, område og verdi + } + + private fun byggSql(sqlBuilder: OppgaveQuerySqlBuilder): String { + var query = sqlBuilder.getQuery() + sqlBuilder.getParams().asIterable().reversed().forEach { (param, verdi) -> + query = query.replaceFirst( + ":$param", when (verdi) { + is String, is LocalDateTime -> "'$verdi'" + else -> verdi.toString() + } + ) + } + return query + } + + private fun byggFilterK9( + feltType: FeltType, + feltverdiOperator: FeltverdiOperator, + vararg verdier: String? + ): FeltverdiOppgavefilter { return FeltverdiOppgavefilter( "K9", feltType.eksternId,