Skip to content

Commit

Permalink
Test av den genererte sql-en
Browse files Browse the repository at this point in the history
  • Loading branch information
mbolstad committed Nov 18, 2024
1 parent d9f555c commit c683e61
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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),
Expand All @@ -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(
Expand All @@ -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,
Expand Down

0 comments on commit c683e61

Please sign in to comment.