Skip to content

Commit d71325e

Browse files
committedSep 24, 2024··
La til test-data-lib for enkel generering av test data til applikasjoner
1 parent 2aed815 commit d71325e

File tree

11 files changed

+231
-1
lines changed

11 files changed

+231
-1
lines changed
 

‎apps/bekreftelse-min-side-oppgaver/build.gradle.kts

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ dependencies {
2727
testImplementation(orgApacheKafka.streamsTest)
2828
testImplementation(testLibs.runnerJunit5)
2929
testImplementation(testLibs.assertionsCore)
30+
testImplementation(project(":lib:kafka-key-generator-client"))
31+
testImplementation(project(":test:test-data-lib"))
3032
}
3133

3234
//enable context receiver

‎apps/bekreftelse-min-side-oppgaver/src/main/kotlin/no/nav/paw/arbeidssoekerregisteret/bekreftelse/minsideoppgaver/applogic/varselbygger/VarselMeldingBygger.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class VarselMeldingBygger(private val runtimeEnvironment: RuntimeEnvironment) {
1919
type = Varseltype.Oppgave
2020
link = "https://bakreftelse-arbreg.nav.no/?bekreftelse=${hendelse.bekreftelseId}"
2121
produsent = runtimeEnvironment.produsent()
22-
tekster + Tekst(
22+
tekst = Tekst(
2323
spraakkode = "nb",
2424
tekst = "Du har en ny arbeidssøkerbekreftelse som venter",
2525
default = true
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package no.nav.paw.arbeidssoekerregisteret.bekreftelse.minsideoppgaver.applogic
2+
3+
import io.kotest.core.spec.style.FreeSpec
4+
import io.kotest.matchers.should
5+
import io.kotest.matchers.shouldBe
6+
import no.nav.paw.arbeidssoekerregisteret.bekreftelse.minsideoppgaver.applogic.varselbygger.VarselMeldingBygger
7+
import no.nav.paw.arbeidssoekerregisteret.bekreftelse.minsideoppgaver.vo.InternTilstand
8+
import no.nav.paw.arbeidssoekerregisteret.testdata.bekreftelse.bekreftelseTilgjengelig
9+
import no.nav.paw.config.env.Local
10+
import org.slf4j.LoggerFactory
11+
import java.util.*
12+
13+
private val oppgaveGeneratorLogger = LoggerFactory.getLogger("oppgaveGeneratorLogger")
14+
class GenererOppgaveMeldingKtTest : FreeSpec({
15+
val varselMeldingBygger = VarselMeldingBygger(runtimeEnvironment = Local)
16+
17+
"Når en ny bekreftelse blir tilgjengelig skal det genereres en oppgave " {
18+
val gjeldeneTilstand = InternTilstand(
19+
periodeId = UUID.randomUUID(), ident = "12345678909", bekreftelser = emptyList()
20+
)
21+
val bekreftgelseTilgjengelig = bekreftelseTilgjengelig(
22+
periodeId = gjeldeneTilstand.periodeId,
23+
)
24+
genererOppgaveMeldinger(
25+
varselMeldingBygger = varselMeldingBygger,
26+
tilstand = gjeldeneTilstand,
27+
hendelse = bekreftgelseTilgjengelig
28+
) should { (nyTilstand, oppgaveMeldinger) ->
29+
runCatching {
30+
nyTilstand shouldBe InternTilstand(
31+
periodeId = gjeldeneTilstand.periodeId,
32+
ident = gjeldeneTilstand.ident,
33+
bekreftelser = listOf(bekreftgelseTilgjengelig.bekreftelseId)
34+
)
35+
oppgaveMeldinger.size shouldBe 1
36+
oppgaveMeldinger.first().varselId shouldBe bekreftgelseTilgjengelig.bekreftelseId
37+
}.onFailure { _ ->
38+
oppgaveGeneratorLogger.info("Ny tilstand: {}", nyTilstand)
39+
oppgaveGeneratorLogger.info("Oppgave meldinger: {}", oppgaveMeldinger)
40+
}.getOrThrow()
41+
}
42+
}
43+
})
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package no.nav.paw.arbeidssoekerregisteret.bekreftelse.minsideoppgaver.applogic
2+
3+
import io.kotest.core.spec.style.FreeSpec
4+
import io.kotest.matchers.shouldBe
5+
import no.nav.paw.arbeidssoekerregisteret.bekreftelse.minsideoppgaver.vo.InternTilstand
6+
import no.nav.paw.arbeidssoekerregisteret.testdata.kafkaKeyContext
7+
import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.metadata
8+
import no.nav.paw.arbeidssoekerregisteret.testdata.mainavro.periode
9+
import java.util.*
10+
11+
class GenererTilstandTest : FreeSpec({
12+
13+
"Når en ny periode kommer inn opprettes tilsvarende tilstand" {
14+
with(kafkaKeyContext()) {
15+
val periode = periode().value
16+
genererTilstand(
17+
gjeldeneTilstand = null,
18+
periode = periode
19+
) shouldBe InternTilstand(
20+
periodeId = periode.id,
21+
ident = periode.identitetsnummer,
22+
bekreftelser = emptyList()
23+
)
24+
}
25+
}
26+
27+
"Når en periode avsluttes endres ikke tilstanden" {
28+
with(kafkaKeyContext()) {
29+
val periode = periode(avsluttetMetadata = metadata()).value
30+
val gjeldeneTilstand = InternTilstand(
31+
periodeId = periode.id,
32+
ident = periode.identitetsnummer,
33+
bekreftelser = listOf(UUID.randomUUID())
34+
)
35+
genererTilstand(
36+
gjeldeneTilstand = gjeldeneTilstand,
37+
periode = periode
38+
) shouldBe gjeldeneTilstand
39+
}
40+
}
41+
42+
"Når identitetsnummer på en periode endres blir intern tilstand oppdatert" {
43+
with(kafkaKeyContext()) {
44+
val periode = periode(identitetsnummer = "00998877654").value
45+
val gjeldeneTilstand = InternTilstand(
46+
periodeId = periode.id,
47+
ident = "12345678909",
48+
bekreftelser = listOf(UUID.randomUUID(), UUID.randomUUID())
49+
)
50+
genererTilstand(
51+
gjeldeneTilstand = gjeldeneTilstand,
52+
periode = periode
53+
) shouldBe gjeldeneTilstand.copy(
54+
ident = periode.identitetsnummer
55+
)
56+
}
57+
}
58+
})

‎settings.gradle.kts

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ include(
1414
"lib:kafka",
1515
"lib:kafka-streams",
1616
"lib:kafka-key-generator-client",
17+
"test:test-data-lib",
1718
"domain:bekreftelse-interne-hendelser",
1819
"domain:bekreftelsesansvar-avro-schema",
1920
"domain:bekreftelsesmelding-avro-schema",

‎test/test-data-lib/build.gradle.kts

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2+
3+
plugins {
4+
kotlin("jvm")
5+
}
6+
7+
dependencies {
8+
implementation(project(":domain:bekreftelse-interne-hendelser"))
9+
implementation(project(":domain:main-avro-schema"))
10+
implementation(project(":lib:kafka-key-generator-client"))
11+
12+
implementation(kotlinx.coroutinesCore)
13+
implementation(apacheAvro.avro)
14+
}
15+
16+
//enable context receiver
17+
tasks.withType<KotlinCompile>().configureEach {
18+
compilerOptions {
19+
freeCompilerArgs.add("-Xcontext-receivers")
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package no.nav.paw.arbeidssoekerregisteret.testdata
2+
3+
import kotlinx.coroutines.runBlocking
4+
import no.nav.paw.kafkakeygenerator.client.KafkaKeysClient
5+
import no.nav.paw.kafkakeygenerator.client.KafkaKeysResponse
6+
import no.nav.paw.kafkakeygenerator.client.inMemoryKafkaKeysMock
7+
8+
class KafkaKeyContext(val client: KafkaKeysClient) {
9+
fun getKafkaKey(id: String): KafkaKeysResponse = runBlocking {
10+
client.getIdAndKey(id)
11+
}
12+
}
13+
14+
fun kafkaKeyContext(): KafkaKeyContext {
15+
val client = inMemoryKafkaKeysMock()
16+
return KafkaKeyContext(client)
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package no.nav.paw.arbeidssoekerregisteret.testdata
2+
3+
data class ValueWithKafkaKeyData<V>(
4+
val id : Long,
5+
val key: Long,
6+
val value: V
7+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package no.nav.paw.arbeidssoekerregisteret.testdata.bekreftelse
2+
3+
import no.nav.paw.bekreftelse.internehendelser.BekreftelseTilgjengelig
4+
import java.time.Duration
5+
import java.time.Instant
6+
import java.util.*
7+
8+
9+
fun bekreftelseTilgjengelig(
10+
bekreftelseId: UUID = UUID.randomUUID(),
11+
periodeId: UUID = UUID.randomUUID(),
12+
hendelseId: UUID = UUID.randomUUID(),
13+
arbeidssoekerId: Long = 1L,
14+
gjelderFra: Instant = Instant.now(),
15+
gjelderTil: Instant = gjelderFra + Duration.ofDays(14)
16+
) = BekreftelseTilgjengelig(
17+
bekreftelseId = bekreftelseId,
18+
periodeId = periodeId,
19+
hendelseId = hendelseId,
20+
arbeidssoekerId = arbeidssoekerId,
21+
gjelderFra = gjelderFra,
22+
gjelderTil = gjelderTil,
23+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package no.nav.paw.arbeidssoekerregisteret.testdata.mainavro
2+
3+
import no.nav.paw.arbeidssokerregisteret.api.v1.*
4+
import java.time.Instant
5+
6+
fun metadata(
7+
kilde: String = "junit-kilde",
8+
aarsak: String = "junit-aarsak",
9+
tidspunkt: Instant = Instant.now(),
10+
tidspunktFraKilde: TidspunktFraKilde = tidsPunktFraKilde(),
11+
utfoertAv: Bruker = bruker()
12+
): Metadata = Metadata.newBuilder()
13+
.setKilde(kilde)
14+
.setAarsak(aarsak)
15+
.setTidspunkt(tidspunkt)
16+
.setTidspunktFraKilde(tidspunktFraKilde)
17+
.setUtfoertAv(utfoertAv)
18+
.build()
19+
20+
fun tidsPunktFraKilde(
21+
tidspunkt: Instant = Instant.now(),
22+
avviksType: AvviksType = AvviksType.FORSINKELSE
23+
): TidspunktFraKilde = TidspunktFraKilde.newBuilder()
24+
.setTidspunkt(tidspunkt)
25+
.setAvviksType(avviksType)
26+
.build()
27+
28+
fun bruker(
29+
id: String = "junit-bruker",
30+
type: BrukerType = BrukerType.SYSTEM
31+
): Bruker = Bruker.newBuilder()
32+
.setId(id)
33+
.setType(type)
34+
.build()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package no.nav.paw.arbeidssoekerregisteret.testdata.mainavro
2+
3+
import no.nav.paw.arbeidssoekerregisteret.testdata.KafkaKeyContext
4+
import no.nav.paw.arbeidssoekerregisteret.testdata.ValueWithKafkaKeyData
5+
import no.nav.paw.arbeidssokerregisteret.api.v1.Metadata
6+
import no.nav.paw.arbeidssokerregisteret.api.v1.Periode
7+
import java.util.*
8+
9+
10+
context(KafkaKeyContext)
11+
fun periode(
12+
periodeId: UUID = UUID.randomUUID(),
13+
identitetsnummer: String = "12345678901",
14+
startetMetadata: Metadata = metadata(),
15+
avsluttetMetadata: Metadata? = null
16+
): ValueWithKafkaKeyData<Periode> = Periode.newBuilder()
17+
.setId(periodeId)
18+
.setIdentitetsnummer(identitetsnummer)
19+
.setStartet(startetMetadata)
20+
.setAvsluttet(avsluttetMetadata)
21+
.build().let { periode ->
22+
val kv = getKafkaKey(periode.identitetsnummer)
23+
ValueWithKafkaKeyData(kv.id, kv.key, periode)
24+
}

0 commit comments

Comments
 (0)
Please sign in to comment.