From 7469360bab35a5c442883ae080e9edfc6c541713 Mon Sep 17 00:00:00 2001 From: Emil Albrektsson <61695840+albrektsson@users.noreply.github.com> Date: Wed, 10 Jan 2024 15:08:57 +0100 Subject: [PATCH] Legger til integrasjonstest baseklasse med med postgresSql testcontainer og embedded kafka. (#1057) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * WIP erstattet embedded postgres med TC. * Fikser applikasjonoppstart. * Fikser automatisk flyway migrering. * Fikser baseclass testoppsett. * Prøver å mocke pepClient * Erstatter KafkaContainer med EmbeddedKafka. * Fikser flere tester * Fikser flere tester * Bruker AbstractContainerBaseTest for BrevServiceImplTest * Bruker AbstractContainerBaseTest for SøknadRepositoryTest. Legger til hjelpefunksjon til å rydde i DB når det er samme data som brukes i tester i samme klasse. * Bruker AbstractContainerBaseTest for fordel testene. * Bruker AbstractContainerBaseTest for ArbeidsgivereRoutesTest. * Bruker setup function for cleanup. * Bruker AbstractContainerBaseTest for MetrikkJobbTest. * Bruker AbstractContainerBaseTest for SjekkOmUtløptJobbTest. * Bruker AbstractContainerBaseTest for JournalpostServiceTest. * Fikser GosysRoutesTest. * Bruker AbstractContainerBaseTest for KopierJournalpostRouteTest. * Bruker AbstractContainerBaseTest for PunsjJournalpostMetrikkRepositoryTest. * Bruker AbstractContainerBaseTest for PunsjJournalpostRepositoryTest. * Bruker AbstractContainerBaseTest for KorrigeringInntektsmeldingDtoRoutesTest. * Refaktorere gjentakende kall for opprettelse av ny søknad. * Refaktorere gjentakende kall for henting, oppdatering og validering. * Bruker AbstractContainerBaseTest for NotatRoutesTest. * Bruker AbstractContainerBaseTest for OmsorgspengerAleneOmsorgRoutesTest. * Bruker AbstractContainerBaseTest for OmsorgspengerKroniskSyktBarnRoutesTest. * Bruker AbstractContainerBaseTest for PersonApiTest. * Bruker AbstractContainerBaseTest for SakServiceTest. * Bruker AbstractContainerBaseTest for OmsorgspengerMidlertidigAleneRoutesTest. * Bruker AbstractContainerBaseTest for OmsorgspengerutbetalingRoutesTest. * Bruker AbstractContainerBaseTest for PleiepengerLivetsSluttfaseRoutesTest. * Bruker AbstractContainerBaseTest for MappeRepositoryTest. * Bruker AbstractContainerBaseTest for PleiepengersyktbarnTests. * Bruker AbstractContainerBaseTest for K9PunsjApplicationTests. * Flytter init ut av companion object. Den førte til at de andre testene etter første test suit, feilet. * Fikser PeriodeDtoTest. * Fjerner utkommenter kode. * Bruker AbstractContainerBaseTest for AksjonspunktRepositoryTest. * Bruker AbstractContainerBaseTest for SoknadIntegrasjonsTest. * Bruker dynamisk port på wiremock server. * Fjerner baselineOnMigrate og clean-on-validation-error. De er default false. * Konfigurerer datasource. --------- Co-authored-by: Ramin Esfandiari --- pom.xml | 32 +- .../no/nav/k9punsj/K9PunsjApplication.kt | 12 +- .../k9punsj/configuration/DbConfiguration.kt | 36 - .../nav/k9punsj/configuration/HikariConfig.kt | 26 - .../no/nav/k9punsj/configuration/Postgres.kt | 49 -- .../k9punsj/kafka/KafkaHendelseProducer.kt | 2 - .../tilgangskontroll/AuthenticationHandler.kt | 2 +- src/main/resources/application.yml | 16 +- .../V1.01__Opprett_persontabell.sql | 0 .../V1.02__Opprette_mappetabell.sql | 0 .../V1.03__Opprett_journalpost_tabell.sql | 0 .../migration}/V1.04__Opprett_bunke.sql | 0 .../V1.05__Opprette_soknadstabell.sql | 0 .../V1.06__Legg_til_felt_soknadstabell.sql | 0 .../V1.07__Endre_felt_soknadstabell.sql | 0 .../V1.08__Legg_til_felt_journalpost.sql | 0 .../V1.09__Opprette_aksjonspunkt_tabell.sql | 0 .../V1.10__Endre_felt_journalpost.sql | 0 .../V1.11__Legger_til_saksnummer.sql | 0 .../migration}/V1.12__Fjern_saksnummer.sql | 0 .../V1.13__Opprette_brev_tabell.sql | 0 ....14__Oeke_bunke_ytelse_type_stoerellse.sql | 0 .../nav/k9punsj/AbstractContainerBaseTest.kt | 148 ++++ .../no/nav/k9punsj/K9PunsjApplicationTests.kt | 214 ++--- .../k9punsj/K9PunsjApplicationWithMocks.kt | 4 +- src/test/kotlin/no/nav/k9punsj/LokalProfil.kt | 44 - .../no/nav/k9punsj/MockConfiguration.kt | 5 +- src/test/kotlin/no/nav/k9punsj/TestProfil.kt | 27 - .../k9punsj/abac/AlltidTilgangPepClient.kt | 4 +- .../AksjonspunktRepositoryTest.kt | 52 +- .../AksjonspunktServiceImplTest.kt | 39 +- ...Test.kt => BrevRoutesConfigurationTest.kt} | 38 +- .../nav/k9punsj/brev/BrevServiceImplTest.kt | 27 +- .../S\303\270knadRepositoryTest.kt" | 41 +- .../domenetjenester/SoknadIntegrasjonsTest.kt | 108 ++- .../no/nav/k9punsj/felles/PeriodeDtoTest.kt | 4 +- .../no/nav/k9punsj/fordel/FordelKafkaTest.kt | 47 +- .../k9punsj/fordel/HendelseMottakerTest.kt | 43 +- .../no/nav/k9punsj/gosys/GosysRoutesTest.kt | 63 +- .../arbeidsgivere/ArbeidsgivereRoutesTest.kt | 95 +-- .../no/nav/k9punsj/jobber/MetrikkJobbTest.kt | 31 +- .../jobber/SjekkOmUtl\303\270ptJobbTest.kt" | 32 +- .../journalpost/JournalpostServiceTest.kt | 6 +- .../journalpost/KopierJournalpostRouteTest.kt | 139 ++-- .../PunsjJournalpostMetrikkRepositoryTest.kt | 24 +- .../PunsjJournalpostRepositoryTest.kt | 144 ++-- ...KorrigeringInntektsmeldingDtoRoutesTest.kt | 336 +++----- .../no/nav/k9punsj/notat/NotatRoutesTest.kt | 39 +- .../OmsorgspengerAleneOmsorgRoutesTest.kt | 238 +++--- .../OmsorgspengerKroniskSyktBarnRoutesTest.kt | 384 ++++----- ...OmsorgspengerMidlertidigAleneRoutesTest.kt | 270 +++--- .../OmsorgspengerutbetalingRoutesTest.kt | 391 ++++----- .../OpplaeringspengerTests.kt | 10 +- .../no/nav/k9punsj/person/BarnApiTest.kt | 28 +- .../no/nav/k9punsj/person/PersonApiTest.kt | 29 +- .../PleiepengerLivetsSluttfaseRoutesTest.kt | 235 +++--- .../MappeRepositoryTest.kt | 23 +- .../PleiepengersyktbarnTests.kt | 770 +++++++++--------- .../rest/eksternt/k9sak/TestK9SakService.kt | 2 - .../rest/eksternt/pdl/TestPdlService.kt | 3 - .../server/PunsjJournalpostInfoRoutesTest.kt | 85 +- .../no/nav/k9punsj/sak/SakServiceTest.kt | 16 +- .../no/nav/k9punsj/util/DatabaseUtil.kt | 68 -- .../k9punsj/util/DbContainerInitializer.kt | 20 + .../no/nav/k9punsj/wiremock/WireMocks.kt | 41 +- src/test/resources/application.yaml | 24 + 66 files changed, 1988 insertions(+), 2578 deletions(-) delete mode 100644 src/main/kotlin/no/nav/k9punsj/configuration/DbConfiguration.kt delete mode 100644 src/main/kotlin/no/nav/k9punsj/configuration/HikariConfig.kt delete mode 100644 src/main/kotlin/no/nav/k9punsj/configuration/Postgres.kt rename src/main/resources/{migreringer => db/migration}/V1.01__Opprett_persontabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.02__Opprette_mappetabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.03__Opprett_journalpost_tabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.04__Opprett_bunke.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.05__Opprette_soknadstabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.06__Legg_til_felt_soknadstabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.07__Endre_felt_soknadstabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.08__Legg_til_felt_journalpost.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.09__Opprette_aksjonspunkt_tabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.10__Endre_felt_journalpost.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.11__Legger_til_saksnummer.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.12__Fjern_saksnummer.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.13__Opprette_brev_tabell.sql (100%) rename src/main/resources/{migreringer => db/migration}/V1.14__Oeke_bunke_ytelse_type_stoerellse.sql (100%) create mode 100644 src/test/kotlin/no/nav/k9punsj/AbstractContainerBaseTest.kt delete mode 100644 src/test/kotlin/no/nav/k9punsj/TestProfil.kt rename src/test/kotlin/no/nav/k9punsj/brev/{BrevRoutesTest.kt => BrevRoutesConfigurationTest.kt} (60%) delete mode 100644 src/test/kotlin/no/nav/k9punsj/util/DatabaseUtil.kt create mode 100644 src/test/kotlin/no/nav/k9punsj/util/DbContainerInitializer.kt create mode 100644 src/test/resources/application.yaml diff --git a/pom.xml b/pom.xml index b17b53cfb..f838360c4 100644 --- a/pom.xml +++ b/pom.xml @@ -48,6 +48,8 @@ 13.4.0 1.13.8 1.5.1 + 1.19.3 + 4.0.2 1.0.10 @@ -69,9 +71,9 @@ - io.zonky.test.postgres - embedded-postgres-binaries-bom - ${zonky-postgresql.version} + org.testcontainers + testcontainers-bom + ${testcontainers.version} pom import @@ -99,6 +101,10 @@ org.springframework.boot spring-boot-starter-validation + + org.springframework.boot + spring-boot-starter-jdbc + org.springframework.kafka spring-kafka @@ -218,9 +224,9 @@ - io.mockk - mockk-jvm - ${mockk.version} + com.ninja-squad + springmockk + ${springmockk.version} test @@ -235,9 +241,17 @@ test - io.zonky.test - embedded-postgres - ${embedded-postgres.version} + no.nav.security + token-validation-spring-test + ${token-support.version} + + + org.testcontainers + postgresql + + + org.springframework.kafka + spring-kafka-test test diff --git a/src/main/kotlin/no/nav/k9punsj/K9PunsjApplication.kt b/src/main/kotlin/no/nav/k9punsj/K9PunsjApplication.kt index ae367ed5c..a6377de90 100644 --- a/src/main/kotlin/no/nav/k9punsj/K9PunsjApplication.kt +++ b/src/main/kotlin/no/nav/k9punsj/K9PunsjApplication.kt @@ -4,12 +4,9 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import de.huxhorn.sulky.ulid.ULID -import no.nav.k9punsj.configuration.DbConfiguration -import no.nav.k9punsj.configuration.hikariConfig import no.nav.k9punsj.utils.UlidDeserializer import org.springframework.boot.Banner import org.springframework.boot.autoconfigure.SpringBootApplication -import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration import org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration import org.springframework.boot.runApplication import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory @@ -17,10 +14,9 @@ import org.springframework.boot.web.reactive.server.ReactiveWebServerFactory import org.springframework.context.annotation.Bean import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder import org.springframework.scheduling.annotation.EnableScheduling -import javax.sql.DataSource @EnableScheduling -@SpringBootApplication(exclude = [ErrorMvcAutoConfiguration::class, FlywayAutoConfiguration::class]) +@SpringBootApplication(exclude = [ErrorMvcAutoConfiguration::class]) class K9PunsjApplication { @Bean @@ -37,12 +33,6 @@ class K9PunsjApplication { fun reactiveWebServerFactory(): ReactiveWebServerFactory { return NettyReactiveWebServerFactory() } - - @Bean - @StandardProfil - fun databaseInitializer(dbConfiguration: DbConfiguration): DataSource { - return hikariConfig(dbConfiguration) - } } fun main(args: Array) { diff --git a/src/main/kotlin/no/nav/k9punsj/configuration/DbConfiguration.kt b/src/main/kotlin/no/nav/k9punsj/configuration/DbConfiguration.kt deleted file mode 100644 index d832c3af2..000000000 --- a/src/main/kotlin/no/nav/k9punsj/configuration/DbConfiguration.kt +++ /dev/null @@ -1,36 +0,0 @@ -package no.nav.k9punsj.configuration - -import org.springframework.beans.factory.annotation.Value -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Configuration - -@Configuration -class DbConfiguration( - @Value("\${no.nav.db.url}") private val url: String, - @Value("\${no.nav.db.username}") private val username: String, - @Value("\${no.nav.db.password}") private val password: String?, - @Value("\${no.nav.db.vault_mountpath}") private val vaultMountpath: String -) { - - @Bean - fun hikariConfig() = createHikariConfig(url, username, password) - - @Bean - fun isVaultEnabled(): Boolean { - return vaultMountpath.isNotBlank() - } - - @Bean - fun getVaultDbPath(): String { - return vaultMountpath - } - - @Bean - fun databaseName(): String { - return getDbNameFromUrl(url) - } -} - -fun getDbNameFromUrl(urlWithDbName: String): String { - return Regex("(?<=/)[a-zA-Z][-_a-zA-Z\\d]*\$").find(urlWithDbName)?.value ?: "" -} diff --git a/src/main/kotlin/no/nav/k9punsj/configuration/HikariConfig.kt b/src/main/kotlin/no/nav/k9punsj/configuration/HikariConfig.kt deleted file mode 100644 index e1585aff4..000000000 --- a/src/main/kotlin/no/nav/k9punsj/configuration/HikariConfig.kt +++ /dev/null @@ -1,26 +0,0 @@ -package no.nav.k9punsj.configuration - -import com.zaxxer.hikari.HikariConfig -import com.zaxxer.hikari.HikariDataSource - -fun createHikariConfig( - jdbcUrl: String, - username: String? = null, - password: String? = null -) = HikariConfig().apply { - this.jdbcUrl = jdbcUrl - maximumPoolSize = 10 - minimumIdle = 1 - idleTimeout = 10001 - connectionTimeout = 1000 - maxLifetime = 30001 - driverClassName = "org.postgresql.Driver" - username?.let { this.username = it } - password?.let { this.password = it } - isAutoCommit = true -} - -fun hikariConfig(hikariConfig: DbConfiguration): HikariDataSource { - migrate(hikariConfig) - return getDataSource(hikariConfig) -} diff --git a/src/main/kotlin/no/nav/k9punsj/configuration/Postgres.kt b/src/main/kotlin/no/nav/k9punsj/configuration/Postgres.kt deleted file mode 100644 index 4b4739807..000000000 --- a/src/main/kotlin/no/nav/k9punsj/configuration/Postgres.kt +++ /dev/null @@ -1,49 +0,0 @@ -package no.nav.k9punsj.configuration - -import com.zaxxer.hikari.HikariDataSource -import no.nav.vault.jdbc.hikaricp.HikariCPVaultUtil -import org.flywaydb.core.Flyway -import org.flywaydb.core.api.output.MigrateResult -import java.util.Locale -import javax.sql.DataSource - -enum class Role { - Admin; - - override fun toString() = name.lowercase(Locale.getDefault()) -} - -fun getDataSource(configuration: DbConfiguration): HikariDataSource = - if (configuration.isVaultEnabled()) { - dataSourceFromVault(configuration, Role.Admin) - } else { - HikariDataSource(configuration.hikariConfig()) - } - -fun dataSourceFromVault(hikariConfig: DbConfiguration, role: Role): HikariDataSource = - HikariCPVaultUtil.createHikariDataSourceWithVaultIntegration( - hikariConfig.hikariConfig(), - hikariConfig.getVaultDbPath(), - "${hikariConfig.databaseName()}-$role" - ) - -fun migrate(configuration: DbConfiguration) = - if (configuration.isVaultEnabled()) { - runMigration( - dataSourceFromVault(configuration, Role.Admin), - "SET ROLE \'${configuration.databaseName()}-${Role.Admin}\'" - ) - } else { - runMigration(HikariDataSource(configuration.hikariConfig())) - } - -fun loadFlyway(dataSource: DataSource, initSql: String? = null) = - Flyway.configure() - .locations("migreringer/") - .dataSource(dataSource) - .initSql(initSql) - .load()!! - -fun runMigration(dataSource: DataSource, initSql: String? = null): MigrateResult? { - return loadFlyway(dataSource, initSql).migrate() -} diff --git a/src/main/kotlin/no/nav/k9punsj/kafka/KafkaHendelseProducer.kt b/src/main/kotlin/no/nav/k9punsj/kafka/KafkaHendelseProducer.kt index 86529d255..e622ce59b 100644 --- a/src/main/kotlin/no/nav/k9punsj/kafka/KafkaHendelseProducer.kt +++ b/src/main/kotlin/no/nav/k9punsj/kafka/KafkaHendelseProducer.kt @@ -1,13 +1,11 @@ package no.nav.k9punsj.kafka -import no.nav.k9punsj.IkkeTestProfil import org.slf4j.Logger import org.slf4j.LoggerFactory import org.springframework.kafka.core.KafkaTemplate import org.springframework.stereotype.Component @Component -@IkkeTestProfil class KafkaHendelseProducer( private val kafkaTemplate: KafkaTemplate ) : HendelseProducer { diff --git a/src/main/kotlin/no/nav/k9punsj/tilgangskontroll/AuthenticationHandler.kt b/src/main/kotlin/no/nav/k9punsj/tilgangskontroll/AuthenticationHandler.kt index a8c28d6ab..9e2a775e6 100644 --- a/src/main/kotlin/no/nav/k9punsj/tilgangskontroll/AuthenticationHandler.kt +++ b/src/main/kotlin/no/nav/k9punsj/tilgangskontroll/AuthenticationHandler.kt @@ -19,7 +19,7 @@ import org.springframework.web.reactive.function.server.ServerResponse import org.springframework.web.reactive.function.server.buildAndAwait @Service -internal class AuthenticationHandler( +class AuthenticationHandler( multiIssuerProperties: MultiIssuerProperties ) { diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 93793f6c6..27fdcd2af 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,3 +1,14 @@ +spring: + datasource: + hikari: + connection-test-query: SELECT 1 + url: ${DEFAULTDS_URL} + username: ${DEFAULTDS_USERNAME} + password: ${DEFAULTDS_PASSWORD} + driver-class-name: org.postgresql.Driver + flyway: + enabled: true + management: health: diskspace: @@ -74,11 +85,6 @@ no.nav: accepted_audience: ${APP_NAISSTS_aud} proxyUrl: - db: - url: ${DEFAULTDS_URL} - username: ${DEFAULTDS_USERNAME} - password: ${DEFAULTDS_PASSWORD} - vault_mountpath: ${DEFAULTDS_VAULT_MOUNTPATH} abac: system_user: ${SYSTEMBRUKER_USERNAME} system_user_password: ${SYSTEMBRUKER_PASSWORD} diff --git a/src/main/resources/migreringer/V1.01__Opprett_persontabell.sql b/src/main/resources/db/migration/V1.01__Opprett_persontabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.01__Opprett_persontabell.sql rename to src/main/resources/db/migration/V1.01__Opprett_persontabell.sql diff --git a/src/main/resources/migreringer/V1.02__Opprette_mappetabell.sql b/src/main/resources/db/migration/V1.02__Opprette_mappetabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.02__Opprette_mappetabell.sql rename to src/main/resources/db/migration/V1.02__Opprette_mappetabell.sql diff --git a/src/main/resources/migreringer/V1.03__Opprett_journalpost_tabell.sql b/src/main/resources/db/migration/V1.03__Opprett_journalpost_tabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.03__Opprett_journalpost_tabell.sql rename to src/main/resources/db/migration/V1.03__Opprett_journalpost_tabell.sql diff --git a/src/main/resources/migreringer/V1.04__Opprett_bunke.sql b/src/main/resources/db/migration/V1.04__Opprett_bunke.sql similarity index 100% rename from src/main/resources/migreringer/V1.04__Opprett_bunke.sql rename to src/main/resources/db/migration/V1.04__Opprett_bunke.sql diff --git a/src/main/resources/migreringer/V1.05__Opprette_soknadstabell.sql b/src/main/resources/db/migration/V1.05__Opprette_soknadstabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.05__Opprette_soknadstabell.sql rename to src/main/resources/db/migration/V1.05__Opprette_soknadstabell.sql diff --git a/src/main/resources/migreringer/V1.06__Legg_til_felt_soknadstabell.sql b/src/main/resources/db/migration/V1.06__Legg_til_felt_soknadstabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.06__Legg_til_felt_soknadstabell.sql rename to src/main/resources/db/migration/V1.06__Legg_til_felt_soknadstabell.sql diff --git a/src/main/resources/migreringer/V1.07__Endre_felt_soknadstabell.sql b/src/main/resources/db/migration/V1.07__Endre_felt_soknadstabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.07__Endre_felt_soknadstabell.sql rename to src/main/resources/db/migration/V1.07__Endre_felt_soknadstabell.sql diff --git a/src/main/resources/migreringer/V1.08__Legg_til_felt_journalpost.sql b/src/main/resources/db/migration/V1.08__Legg_til_felt_journalpost.sql similarity index 100% rename from src/main/resources/migreringer/V1.08__Legg_til_felt_journalpost.sql rename to src/main/resources/db/migration/V1.08__Legg_til_felt_journalpost.sql diff --git a/src/main/resources/migreringer/V1.09__Opprette_aksjonspunkt_tabell.sql b/src/main/resources/db/migration/V1.09__Opprette_aksjonspunkt_tabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.09__Opprette_aksjonspunkt_tabell.sql rename to src/main/resources/db/migration/V1.09__Opprette_aksjonspunkt_tabell.sql diff --git a/src/main/resources/migreringer/V1.10__Endre_felt_journalpost.sql b/src/main/resources/db/migration/V1.10__Endre_felt_journalpost.sql similarity index 100% rename from src/main/resources/migreringer/V1.10__Endre_felt_journalpost.sql rename to src/main/resources/db/migration/V1.10__Endre_felt_journalpost.sql diff --git a/src/main/resources/migreringer/V1.11__Legger_til_saksnummer.sql b/src/main/resources/db/migration/V1.11__Legger_til_saksnummer.sql similarity index 100% rename from src/main/resources/migreringer/V1.11__Legger_til_saksnummer.sql rename to src/main/resources/db/migration/V1.11__Legger_til_saksnummer.sql diff --git a/src/main/resources/migreringer/V1.12__Fjern_saksnummer.sql b/src/main/resources/db/migration/V1.12__Fjern_saksnummer.sql similarity index 100% rename from src/main/resources/migreringer/V1.12__Fjern_saksnummer.sql rename to src/main/resources/db/migration/V1.12__Fjern_saksnummer.sql diff --git a/src/main/resources/migreringer/V1.13__Opprette_brev_tabell.sql b/src/main/resources/db/migration/V1.13__Opprette_brev_tabell.sql similarity index 100% rename from src/main/resources/migreringer/V1.13__Opprette_brev_tabell.sql rename to src/main/resources/db/migration/V1.13__Opprette_brev_tabell.sql diff --git a/src/main/resources/migreringer/V1.14__Oeke_bunke_ytelse_type_stoerellse.sql b/src/main/resources/db/migration/V1.14__Oeke_bunke_ytelse_type_stoerellse.sql similarity index 100% rename from src/main/resources/migreringer/V1.14__Oeke_bunke_ytelse_type_stoerellse.sql rename to src/main/resources/db/migration/V1.14__Oeke_bunke_ytelse_type_stoerellse.sql diff --git a/src/test/kotlin/no/nav/k9punsj/AbstractContainerBaseTest.kt b/src/test/kotlin/no/nav/k9punsj/AbstractContainerBaseTest.kt new file mode 100644 index 000000000..bd7f64b82 --- /dev/null +++ b/src/test/kotlin/no/nav/k9punsj/AbstractContainerBaseTest.kt @@ -0,0 +1,148 @@ +package no.nav.k9punsj + +import com.github.kittinunf.fuel.coroutines.awaitStringResponseResult +import com.github.kittinunf.fuel.httpGet +import com.github.tomakehurst.wiremock.WireMockServer +import jakarta.annotation.PostConstruct +import kotlinx.coroutines.runBlocking +import no.nav.helse.dusseldorf.testsupport.jws.Azure +import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository +import no.nav.k9punsj.domenetjenester.repository.BunkeRepository +import no.nav.k9punsj.domenetjenester.repository.MappeRepository +import no.nav.k9punsj.domenetjenester.repository.PersonRepository +import no.nav.k9punsj.domenetjenester.repository.SøknadRepository +import no.nav.k9punsj.journalpost.JournalpostRepository +import no.nav.k9punsj.wiremock.initWireMock +import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import org.assertj.core.api.Assertions.assertThat +import org.junit.jupiter.api.AfterAll +import org.junit.jupiter.api.BeforeAll +import org.junit.jupiter.api.Test +import org.junit.jupiter.api.TestInstance +import org.junit.jupiter.api.extension.ExtendWith +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient +import org.springframework.boot.test.context.SpringBootTest +import org.springframework.jdbc.core.JdbcTemplate +import org.springframework.kafka.test.context.EmbeddedKafka +import org.springframework.test.annotation.DirtiesContext +import org.springframework.test.context.ActiveProfiles +import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.test.jdbc.JdbcTestUtils +import org.springframework.test.web.reactive.server.WebTestClient +import org.testcontainers.containers.PostgreSQLContainer +import java.net.URI +import kotlin.concurrent.thread + + +private class PostgreSQLContainer12 : PostgreSQLContainer("postgres:12.2-alpine") + +@TestInstance(TestInstance.Lifecycle.PER_CLASS) +@DirtiesContext +@SpringBootTest( + classes = [K9PunsjApplication::class], + webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT +) +@ExtendWith(SpringExtension::class) +@AutoConfigureWebTestClient +@ActiveProfiles("test") +@EmbeddedKafka +abstract class AbstractContainerBaseTest { + + private lateinit var postgreSQLContainer12: PostgreSQLContainer12 + + lateinit var wireMockServer: WireMockServer + + @Autowired + protected lateinit var webTestClient: WebTestClient + + @Autowired + lateinit var jdbcTemplate: JdbcTemplate + + init { + val threads = mutableListOf() + thread { + PostgreSQLContainer12().apply { + // Cloud SQL har wal_level = 'logical' på grunn av flagget cloudsql.logical_decoding i + // naiserator.yaml. Vi må sette det samme lokalt for at flyway migrering skal fungere. + withCommand("postgres", "-c", "wal_level=logical") + start() + System.setProperty("spring.datasource.url", jdbcUrl) + System.setProperty("spring.datasource.username", username) + System.setProperty("spring.datasource.password", password) + } + }.also { threads.add(it) } + + threads.forEach { it.join() } + + wireMockServer = initWireMock(rootDirectory = "src/test/resources") + + MockConfiguration.config( + wireMockServer = wireMockServer, + port = 8085, + azureV2Url = lokaltKjørendeAzureV2OrNull() + ).forEach { t, u -> + System.setProperty(t, u) + } + } + + @PostConstruct + fun setupRestServiceServers() { + } + + @BeforeAll + fun setup() { + cleanUpDB() + } + + @AfterAll + fun opprydning() { + wireMockServer.stop() + cleanUpDB() + } + + @Test + fun contextLoads(): Unit = runBlocking { + assertThat(webTestClient).isNotNull + healthCheck() + } + + companion object { + private val logger = LoggerFactory.getLogger(AbstractContainerBaseTest::class.java) + val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" + + fun lokaltKjørendeAzureV2OrNull(): URI? { + val potensiellUrl = URI("http://localhost:8100/v2.0") + val kjørerLokalt = runBlocking { + val (_, response, _) = "$potensiellUrl/.well-known/openid-configuration" + .httpGet() + .timeout(200) + .awaitStringResponseResult() + response.statusCode == 200 + } + return when (kjørerLokalt) { + true -> potensiellUrl + false -> null + } + } + } + + protected fun cleanUpDB() { + JdbcTestUtils.deleteFromTables(jdbcTemplate, SøknadRepository.SØKNAD_TABLE) + JdbcTestUtils.deleteFromTables(jdbcTemplate, BunkeRepository.BUNKE_TABLE) + JdbcTestUtils.deleteFromTables(jdbcTemplate, MappeRepository.MAPPE_TABLE) + JdbcTestUtils.deleteFromTables(jdbcTemplate, PersonRepository.PERSON_TABLE) + JdbcTestUtils.deleteFromTables(jdbcTemplate, AksjonspunktRepository.AKSJONSPUNKT_TABLE) + JdbcTestUtils.deleteFromTables(jdbcTemplate, JournalpostRepository.JOURNALPOST_TABLE) + } + + fun healthCheck() { + webTestClient + .get() + .uri { it.path("/internal/actuator/info").build() } + .exchange() + .expectStatus().isOk + .expectBody(String::class.java).isEqualTo("{}") + } +} diff --git a/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationTests.kt b/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationTests.kt index 4aabd1bee..e0d57d9b2 100644 --- a/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationTests.kt @@ -1,162 +1,162 @@ package no.nav.k9punsj import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.util.WebClientUtils.awaitBodyWithType -import no.nav.k9punsj.util.WebClientUtils.awaitStatusWithBody -import no.nav.k9punsj.util.WebClientUtils.awaitStatuscode import no.nav.k9punsj.wiremock.JournalpostIds -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.junit.jupiter.api.Assertions.assertArrayEquals -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import org.skyscreamer.jsonassert.JSONAssert import org.springframework.core.io.ClassPathResource import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus -class K9PunsjApplicationTests { +class K9PunsjApplicationTests : AbstractContainerBaseTest() { - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" private val dummyPdf = ClassPathResource("__files/dummy_soknad.pdf").inputStream.readBytes() - val client = TestSetup.client - @Test fun `Endepunkt brukt for isReady og isAlive fungerer`(): Unit = runBlocking { - val httpStatus = - client.get().uri { - it.pathSegment("internal", "actuator", "info").build() - }.awaitStatuscode() - - assertEquals(HttpStatus.OK, httpStatus) + webTestClient.get() + .uri { it.path("/internal/actuator/health").build() } + .exchange() + .expectStatus().isOk + .expectBody() + .json( + """ + { + "status": "UP" + } + """.trimIndent() + ) } @Test fun `Hente et dokument fra Journalpost uten credentials feiler`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", "1", "dokument", "1").build() - }.awaitStatuscode() - - assertEquals(HttpStatus.UNAUTHORIZED, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/1/dokument/1").build() } + .exchange() + .expectStatus().isUnauthorized } @Test fun `Hente et dokument fra Journalpost fungerer`(): Unit = runBlocking { - val (httpStatus, body) = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.Ok, "dokument", "1").build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatusWithBody() - - assertEquals(HttpStatus.OK, httpStatus) - assertArrayEquals(body, dummyPdf) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.Ok}/dokument/1").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isOk + .expectBody() + .consumeWith { + assertArrayEquals(it.responseBody, dummyPdf) + } } @Test fun `Hente et dokument fra Journalpost som ikke finnes håndteres`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.FinnesIkke, "dokument", "1").build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatuscode() - - assertEquals(HttpStatus.NOT_FOUND, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.FinnesIkke}/dokument/1").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isNotFound } @Test fun `Hente et dokument fra Journalpost uten tilgang håndteres`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.AbacError, "dokument", "1").build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatuscode() - - assertEquals(HttpStatus.FORBIDDEN, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.AbacError}/dokument/1").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isForbidden } @Test fun `Hente journalpostinfo fungerer`(): Unit = runBlocking { - val body: String = client.get().uri { - it.pathSegment("api", "journalpost", "1").build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitBodyWithType() - JSONAssert.assertEquals( - """{ - "journalpostId": "1", - "norskIdent": "29099000129", - "dokumenter": [ - { - "dokumentId": "470164680" - }, + webTestClient.get() + .uri { it.path("/api/journalpost/1").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isOk + .expectBody() + .json( + """ { - "dokumentId": "470164681" + "journalpostId": "1", + "norskIdent": "29099000129", + "dokumenter": [ + { + "dokumentId": "470164680" + }, + { + "dokumentId": "470164681" + } + ], + "venter": null, + "punsjInnsendingType": null, + "kanSendeInn": true, + "erSaksbehandler": true, + "journalpostStatus": "MOTTATT", + "kanOpprettesJournalføringsoppgave": true, + "kanKopieres": true, + "gosysoppgaveId": null, + "erFerdigstilt": false } - ], - "venter": null, - "punsjInnsendingType": null, - "kanSendeInn": true, - "erSaksbehandler": true, - "journalpostStatus": "MOTTATT", - "kanOpprettesJournalføringsoppgave": true, - "kanKopieres": true, - "gosysoppgaveId": null, - "erFerdigstilt": false - } - """.trimIndent(), - body, - true - ) + """.trimIndent() + ) } @Test fun `Hente journalpostinfo for ikke eksisterende journalpost håndteres`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.FinnesIkke).build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatuscode() - - assertEquals(HttpStatus.NOT_FOUND, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.FinnesIkke}").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isNotFound } @Test fun `Hente journalpostinfo på journalpost uten tilgang på journalpostnivå håndteres`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.AbacError).build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatuscode() - - assertEquals(HttpStatus.FORBIDDEN, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.AbacError}").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isForbidden } @Test fun `Hente journalpostinfo på journalpost uten tilgang på alle dokumenter håndteres`(): Unit = runBlocking { - val httpStatus = client.get().uri { - it.pathSegment("api", "journalpost", JournalpostIds.IkkeKomplettTilgang).build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitStatuscode() - - assertEquals(HttpStatus.FORBIDDEN, httpStatus) + webTestClient.get() + .uri { it.path("/api/journalpost/${JournalpostIds.IkkeKomplettTilgang}").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isForbidden } @Test fun `journalposter med status ferdigstilt eller journalfort for erFerdigstilt true`(): Unit = runBlocking { - val body: String = client.get().uri { - it.pathSegment("api", "journalpost", "7523521").build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitBodyWithType() - - JSONAssert.assertEquals( - """{ - "journalpostId": "7523521", - "norskIdent": "02020050123", - "dokumenter": [ + webTestClient.get() + .uri { it.path("/api/journalpost/7523521").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isOk + .expectBody() + .json( + """ { - "dokumentId": "470164680" - }, - ], - "venter": null, - "punsjInnsendingType": null, - "kanSendeInn": true, - "erSaksbehandler": true, - "journalpostStatus": "FERDIGSTILT", - "kanOpprettesJournalføringsoppgave": false, - "kanKopieres": false, - "gosysoppgaveId": null, - "erFerdigstilt": true - } - """.trimIndent(), - body, - true - ) + "journalpostId": "7523521", + "norskIdent": "02020050123", + "dokumenter": [ + { + "dokumentId": "470164680" + }, + ], + "venter": null, + "punsjInnsendingType": null, + "kanSendeInn": true, + "erSaksbehandler": true, + "journalpostStatus": "FERDIGSTILT", + "kanOpprettesJournalføringsoppgave": false, + "kanKopieres": false, + "gosysoppgaveId": null, + "erFerdigstilt": true + } + """.trimIndent() + ) } } diff --git a/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationWithMocks.kt b/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationWithMocks.kt index 0ad6af518..00f4342c1 100644 --- a/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationWithMocks.kt +++ b/src/test/kotlin/no/nav/k9punsj/K9PunsjApplicationWithMocks.kt @@ -6,7 +6,7 @@ import com.github.tomakehurst.wiremock.WireMockServer import kotlinx.coroutines.runBlocking import no.nav.k9punsj.journalpost.JournalpostService import no.nav.k9punsj.journalpost.dto.PunsjJournalpost -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.util.DbContainerInitializer import no.nav.k9punsj.wiremock.initWireMock import org.springframework.boot.Banner import org.springframework.boot.builder.SpringApplicationBuilder @@ -65,7 +65,7 @@ internal class K9PunsjApplicationWithMocks { Runtime.getRuntime().addShutdownHook( Thread { - DatabaseUtil.embeddedPostgres.close() + DbContainerInitializer.postgresContainer.close() wireMockServer.stop() } ) diff --git a/src/test/kotlin/no/nav/k9punsj/LokalProfil.kt b/src/test/kotlin/no/nav/k9punsj/LokalProfil.kt index 8176f8dd4..701aaed73 100644 --- a/src/test/kotlin/no/nav/k9punsj/LokalProfil.kt +++ b/src/test/kotlin/no/nav/k9punsj/LokalProfil.kt @@ -1,50 +1,6 @@ package no.nav.k9punsj -import com.zaxxer.hikari.HikariDataSource -import no.nav.k9punsj.configuration.DbConfiguration -import no.nav.k9punsj.configuration.getDataSource -import org.flywaydb.core.Flyway -import org.flywaydb.core.api.FlywayException -import org.flywaydb.core.api.output.MigrateResult -import org.springframework.boot.test.context.TestConfiguration -import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Profile -import javax.sql.DataSource @Profile("local") annotation class LokalProfil - -@TestConfiguration -@LokalProfil -class LokalBeans { - - @Bean - fun lokalDataSource(dbConfiguration: DbConfiguration): DataSource { - return hikariConfigLocal(dbConfiguration) - } - - private fun hikariConfigLocal(hikariConfig: DbConfiguration): HikariDataSource { - runMigrationLocal(hikariConfig) - return getDataSource(hikariConfig) - } - - private fun runMigrationLocal(configuration: DbConfiguration): MigrateResult? { - val hikariDataSource = HikariDataSource(configuration.hikariConfig()) - val load = Flyway.configure() - .cleanDisabled(false) - .locations("migreringer/") - .dataSource(hikariDataSource) - .load() - return try { - load.migrate() - } catch (fwe: FlywayException) { - // prøver igjen siden kjører lokalt - load.clean() - try { - load.migrate() - } catch (fwe: FlywayException) { - throw IllegalStateException("Migrering feiler", fwe) - } - } - } -} diff --git a/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt b/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt index a48407a61..ffd91f1f7 100644 --- a/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt +++ b/src/test/kotlin/no/nav/k9punsj/MockConfiguration.kt @@ -6,7 +6,7 @@ import no.nav.helse.dusseldorf.testsupport.wiremock.getAzureV2TokenUrl import no.nav.helse.dusseldorf.testsupport.wiremock.getAzureV2WellKnownUrl import no.nav.helse.dusseldorf.testsupport.wiremock.getNaisStsTokenUrl import no.nav.helse.dusseldorf.testsupport.wiremock.getNaisStsWellKnownUrl -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.util.DbContainerInitializer import no.nav.k9punsj.wiremock.getAaregBaseUrl import no.nav.k9punsj.wiremock.getDokarkivBaseUrl import no.nav.k9punsj.wiremock.getEregBaseUrl @@ -49,9 +49,6 @@ internal object MockConfiguration { "SAF_HENTE_DOKUMENT_SCOPES" to "saf-client-id/.default", "SWAGGER_SERVER_BASE_URL" to "http://localhost:$port", "KAFKA_BOOTSTRAP_SERVERS" to "localhost:9093", - "DEFAULTDS_USERNAME" to "postgres", - "DEFAULTDS_PASSWORD" to "postgres", - "DEFAULTDS_URL" to "jdbc:postgresql://localhost:${DatabaseUtil.embeddedPostgres.port}/postgres", "DEFAULTDS_VAULT_MOUNTPATH" to "", "NAIS_STS_TOKEN_ENDPOINT" to wireMockServer.getNaisStsTokenUrl(), "AUDITLOGGER_ENABLED" to "false", diff --git a/src/test/kotlin/no/nav/k9punsj/TestProfil.kt b/src/test/kotlin/no/nav/k9punsj/TestProfil.kt deleted file mode 100644 index e977f15a0..000000000 --- a/src/test/kotlin/no/nav/k9punsj/TestProfil.kt +++ /dev/null @@ -1,27 +0,0 @@ -package no.nav.k9punsj - -import no.nav.k9punsj.kafka.HendelseProducer -import no.nav.k9punsj.util.DatabaseUtil -import org.springframework.boot.test.context.TestConfiguration -import org.springframework.context.annotation.Bean -import org.springframework.context.annotation.Profile -import javax.sql.DataSource - -@Profile("test") -annotation class TestProfil - -@TestConfiguration -@TestProfil -class TestBeans { - @Bean - fun testDataSource(): DataSource = DatabaseUtil.dataSource - - @Bean - fun testHendelseProducer() = object : HendelseProducer { - override fun send(topicName: String, data: String, key: String) { - } - override fun sendMedOnSuccess(topicName: String, data: String, key: String, onSuccess: () -> Unit) { - onSuccess.invoke() - } - } -} diff --git a/src/test/kotlin/no/nav/k9punsj/abac/AlltidTilgangPepClient.kt b/src/test/kotlin/no/nav/k9punsj/abac/AlltidTilgangPepClient.kt index 5fb1e33a0..c68066d40 100644 --- a/src/test/kotlin/no/nav/k9punsj/abac/AlltidTilgangPepClient.kt +++ b/src/test/kotlin/no/nav/k9punsj/abac/AlltidTilgangPepClient.kt @@ -1,13 +1,13 @@ package no.nav.k9punsj.abac import no.nav.k9punsj.LokalProfil -import no.nav.k9punsj.TestProfil import no.nav.k9punsj.tilgangskontroll.abac.IPepClient +import org.springframework.context.annotation.Profile import org.springframework.stereotype.Component @Component -@TestProfil @LokalProfil +@Profile("test") // TODO Fjern denne når vi har fått ordnet opp i MockkBean for IPepClient. internal class AlltidTilgangPepClient : IPepClient { override suspend fun harBasisTilgang(fnr: List, urlKallet: String) = true override suspend fun harBasisTilgang(fnr: String, urlKallet: String) = true diff --git a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktRepositoryTest.kt b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktRepositoryTest.kt index 6e71ef3c8..77db7cf85 100644 --- a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktRepositoryTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktRepositoryTest.kt @@ -1,28 +1,37 @@ package no.nav.k9punsj.akjonspunkter import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.fordel.FordelPunsjEventDto +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.dto.PunsjJournalpost -import no.nav.k9punsj.util.DatabaseUtil import org.assertj.core.api.Assertions +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.test.context.junit.jupiter.SpringExtension -import java.util.UUID +import org.springframework.beans.factory.annotation.Autowired +import java.util.* -@ExtendWith(SpringExtension::class) -internal class AksjonspunktRepositoryTest { +internal class AksjonspunktRepositoryTest: AbstractContainerBaseTest() { + + @Autowired + lateinit var journalpostRepository : JournalpostRepository + + @Autowired + lateinit var aksjonspunktRepository : AksjonspunktRepository + + @BeforeEach + fun setUp() { + cleanUpDB() + } @Test fun `skal overskrive aksjonspunkt hvis det matcher på journalpostId + kode og status`(): Unit = runBlocking { - val journalpostRepo = DatabaseUtil.getJournalpostRepo() - val melding = FordelPunsjEventDto(aktørId = "1234567890", journalpostId = "666", type = "test", ytelse = "test") - journalpostRepo.opprettJournalpost(PunsjJournalpost(UUID.randomUUID(), journalpostId = melding.journalpostId, aktørId = melding.aktørId)) + val melding = FordelPunsjEventDto(aktørId = "1234567890", journalpostId = "666", type = "test", ytelse = "test") - val aksjonspunktRepo = DatabaseUtil.getAksjonspunktRepo() + journalpostRepository.opprettJournalpost(PunsjJournalpost(UUID.randomUUID(), journalpostId = melding.journalpostId, aktørId = melding.aktørId)) - aksjonspunktRepo.opprettAksjonspunkt( + aksjonspunktRepository.opprettAksjonspunkt( AksjonspunktEntitet( aksjonspunktId = UUID.randomUUID().toString(), aksjonspunktKode = AksjonspunktKode.PUNSJ, @@ -31,10 +40,10 @@ internal class AksjonspunktRepositoryTest { ) ) - val hentAlleAksjonspunkter = aksjonspunktRepo.hentAlleAksjonspunkter(melding.journalpostId) + val hentAlleAksjonspunkter = aksjonspunktRepository.hentAlleAksjonspunkter(melding.journalpostId) Assertions.assertThat(hentAlleAksjonspunkter).hasSize(1) - aksjonspunktRepo.opprettAksjonspunkt( + aksjonspunktRepository.opprettAksjonspunkt( AksjonspunktEntitet( aksjonspunktId = UUID.randomUUID().toString(), aksjonspunktKode = AksjonspunktKode.PUNSJ, @@ -43,21 +52,18 @@ internal class AksjonspunktRepositoryTest { ) ) - val hentAlleAksjonspunkter2 = aksjonspunktRepo.hentAlleAksjonspunkter(melding.journalpostId) + val hentAlleAksjonspunkter2 = aksjonspunktRepository.hentAlleAksjonspunkter(melding.journalpostId) Assertions.assertThat(hentAlleAksjonspunkter2).hasSize(1) } @Test fun `skal kunne opprette ny aksjonspunkt med samme kode hvis det ligger et der fra før med annen status`(): Unit = runBlocking { - val journalpostRepo = DatabaseUtil.getJournalpostRepo() val melding = FordelPunsjEventDto(aktørId = "1234567891", journalpostId = "667", type = "test", ytelse = "test") - journalpostRepo.opprettJournalpost(PunsjJournalpost(UUID.randomUUID(), journalpostId = melding.journalpostId, aktørId = melding.aktørId)) - - val aksjonspunktRepo = DatabaseUtil.getAksjonspunktRepo() + journalpostRepository.opprettJournalpost(PunsjJournalpost(UUID.randomUUID(), journalpostId = melding.journalpostId, aktørId = melding.aktørId)) val aksjonspunktId = UUID.randomUUID().toString() - aksjonspunktRepo.opprettAksjonspunkt( + aksjonspunktRepository.opprettAksjonspunkt( AksjonspunktEntitet( aksjonspunktId = aksjonspunktId, aksjonspunktKode = AksjonspunktKode.PUNSJ, @@ -66,12 +72,12 @@ internal class AksjonspunktRepositoryTest { ) ) - aksjonspunktRepo.settStatus(aksjonspunktId, AksjonspunktStatus.UTFØRT) + aksjonspunktRepository.settStatus(aksjonspunktId, AksjonspunktStatus.UTFØRT) - val hentAlleAksjonspunkter = aksjonspunktRepo.hentAlleAksjonspunkter(melding.journalpostId) + val hentAlleAksjonspunkter = aksjonspunktRepository.hentAlleAksjonspunkter(melding.journalpostId) Assertions.assertThat(hentAlleAksjonspunkter).hasSize(1) - aksjonspunktRepo.opprettAksjonspunkt( + aksjonspunktRepository.opprettAksjonspunkt( AksjonspunktEntitet( aksjonspunktId = UUID.randomUUID().toString(), aksjonspunktKode = AksjonspunktKode.PUNSJ, @@ -80,7 +86,7 @@ internal class AksjonspunktRepositoryTest { ) ) - val hentAlleAksjonspunkter2 = aksjonspunktRepo.hentAlleAksjonspunkter(melding.journalpostId) + val hentAlleAksjonspunkter2 = aksjonspunktRepository.hentAlleAksjonspunkter(melding.journalpostId) Assertions.assertThat(hentAlleAksjonspunkter2).hasSize(2) } } diff --git a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt index b7c83e64d..f955283b5 100644 --- a/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/akjonspunkter/AksjonspunktServiceImplTest.kt @@ -1,10 +1,8 @@ package no.nav.k9punsj.akjonspunkter -import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import kotlinx.coroutines.runBlocking -import no.nav.k9punsj.TestBeans -import no.nav.k9punsj.domenetjenester.PersonService +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.domenetjenester.SoknadService import no.nav.k9punsj.domenetjenester.repository.BunkeRepository import no.nav.k9punsj.domenetjenester.repository.MappeRepository @@ -18,49 +16,20 @@ import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.integrasjoner.k9sak.K9SakService -import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.JournalpostService import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.kafka.HendelseProducer import no.nav.k9punsj.metrikker.SøknadMetrikkService import no.nav.k9punsj.utils.objectMapper -import no.nav.k9punsj.rest.eksternt.pdl.TestPdlService import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentCaptor import org.mockito.Mockito import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.junit.jupiter.SpringExtension -import java.util.UUID - -@ExtendWith(SpringExtension::class) -@ActiveProfiles("test") -@ContextConfiguration( - classes = [ - AksjonspunktServiceImpl::class, - JournalpostRepository::class, - JournalpostService::class, - SafGateway::class, - DokarkivGateway::class, - ObjectMapper::class, - AksjonspunktRepository::class, - MappeRepository::class, - BunkeRepository::class, - SøknadRepository::class, - SoknadService::class, - InnsendingClient::class, - K9SakService::class, - PersonService::class, - PersonRepository::class, - TestPdlService::class, - TestBeans::class - ] -) -internal class AksjonspunktServiceImplTest { +import java.util.* + +internal class AksjonspunktServiceImplTest: AbstractContainerBaseTest() { @MockBean private lateinit var hendelseProducer: HendelseProducer diff --git a/src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesConfigurationTest.kt similarity index 60% rename from src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesTest.kt rename to src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesConfigurationTest.kt index acff869fc..9a857752c 100644 --- a/src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/brev/BrevRoutesConfigurationTest.kt @@ -1,34 +1,27 @@ package no.nav.k9punsj.brev -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure import no.nav.k9.formidling.kontrakt.kodeverk.FagsakYtelseType -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest +import no.nav.k9punsj.brev.BrevRoutes.Urls.BestillBrev import no.nav.k9punsj.brev.dto.DokumentbestillingDto import no.nav.k9punsj.brev.dto.MottakerDto import no.nav.k9punsj.fordel.PunsjInnsendingType +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.dto.PunsjJournalpost -import no.nav.k9punsj.utils.objectMapper -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken -import org.assertj.core.api.Assertions.assertThat +import no.nav.k9punsj.utils.objectMapper import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.http.HttpStatus +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.MediaType -import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.web.reactive.function.BodyInserters -import org.springframework.web.reactive.function.client.awaitBodyOrNull -import org.springframework.web.reactive.function.client.awaitExchange import java.util.* -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class BrevRoutesTest { - private val client = TestSetup.client - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" +internal class BrevRoutesConfigurationTest : AbstractContainerBaseTest() { + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @Test fun `Bestill brev og send til k9-formidling på kafka`(): Unit = runBlocking { @@ -43,15 +36,14 @@ internal class BrevRoutesTest { val dokumentBestillingDtoJson = objectMapper().writeValueAsString(dokumentbestillingDto) - val (httpStatus, body) = client.post() - .uri { it.path("api/brev/bestill").build() } + webTestClient.post() + .uri { it.path("/api${BestillBrev}").build() } .header("Authorization", saksbehandlerAuthorizationHeader) .contentType(MediaType.APPLICATION_JSON) .body(BodyInserters.fromValue(dokumentBestillingDtoJson)) - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } - - assertThat(body).isNotNull - assertThat(httpStatus).isEqualTo(HttpStatus.OK) + .exchange() + .expectStatus().isOk + .expectBody().consumeWith { it !== null } } private suspend fun lagJournalpost(): String { @@ -65,7 +57,7 @@ internal class BrevRoutesTest { type = PunsjInnsendingType.INNTEKTSMELDING_UTGÅTT.kode ) - DatabaseUtil.getJournalpostRepo().lagre(jp) { + journalpostRepository.lagre(jp) { jp } return journalpostId diff --git a/src/test/kotlin/no/nav/k9punsj/brev/BrevServiceImplTest.kt b/src/test/kotlin/no/nav/k9punsj/brev/BrevServiceImplTest.kt index 8f6cd19c6..82ba62a8a 100644 --- a/src/test/kotlin/no/nav/k9punsj/brev/BrevServiceImplTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/brev/BrevServiceImplTest.kt @@ -6,41 +6,24 @@ import no.nav.k9.formidling.kontrakt.hendelse.Dokumentbestilling import no.nav.k9.formidling.kontrakt.kodeverk.DokumentMalType import no.nav.k9.formidling.kontrakt.kodeverk.FagsakYtelseType import no.nav.k9.formidling.kontrakt.kodeverk.IdType -import no.nav.k9punsj.TestBeans +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.brev.dto.DokumentbestillingDto import no.nav.k9punsj.brev.dto.MottakerDto import no.nav.k9punsj.domenetjenester.PersonService import no.nav.k9punsj.felles.dto.Person -import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.JournalpostService import no.nav.k9punsj.kafka.HendelseProducer -import no.nav.k9punsj.utils.objectMapper import no.nav.k9punsj.util.IdGenerator +import no.nav.k9punsj.utils.objectMapper import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentCaptor import org.mockito.Mockito import org.springframework.beans.factory.annotation.Autowired -import org.springframework.boot.test.context.SpringBootTest import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.TestPropertySource -import org.springframework.test.context.junit.jupiter.SpringExtension - -@ExtendWith(SpringExtension::class) -@ActiveProfiles("test") -@SpringBootTest -@TestPropertySource(properties = ["spring.config.location = classpath:application.yml"]) -@ContextConfiguration( - classes = [ - JournalpostRepository::class, - BrevServiceImpl::class, - TestBeans::class - ] -) -internal class BrevServiceImplTest { + + +internal class BrevServiceImplTest: AbstractContainerBaseTest() { @MockBean private lateinit var hendelseProducer: HendelseProducer diff --git "a/src/test/kotlin/no/nav/k9punsj/db/repository/S\303\270knadRepositoryTest.kt" "b/src/test/kotlin/no/nav/k9punsj/db/repository/S\303\270knadRepositoryTest.kt" index 9cf6211fd..2047eea00 100644 --- "a/src/test/kotlin/no/nav/k9punsj/db/repository/S\303\270knadRepositoryTest.kt" +++ "b/src/test/kotlin/no/nav/k9punsj/db/repository/S\303\270knadRepositoryTest.kt" @@ -1,20 +1,23 @@ package no.nav.k9punsj.db.repository import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest +import no.nav.k9punsj.domenetjenester.repository.BunkeRepository +import no.nav.k9punsj.domenetjenester.repository.MappeRepository +import no.nav.k9punsj.domenetjenester.repository.PersonRepository +import no.nav.k9punsj.domenetjenester.repository.SøknadRepository import no.nav.k9punsj.felles.FagsakYtelseType import no.nav.k9punsj.felles.dto.SøknadEntitet -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.LesFraFilUtil import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired import java.time.LocalDate import java.util.* -@ExtendWith(SpringExtension::class) -internal class SøknadRepositoryTest { + +internal class SøknadRepositoryTest: AbstractContainerBaseTest() { private val standardIdent = "01122334410" private val standardAktørId = "1000000000000" @@ -25,17 +28,21 @@ internal class SøknadRepositoryTest { private val journalpostid1 = "29486889" private val journalpostid2 = "29486887" - val søknadRepository = DatabaseUtil.getSøknadRepo() - val personRepository = DatabaseUtil.getPersonRepo() - val bunkeRepository = DatabaseUtil.getBunkeRepo() - val mappeRepo = DatabaseUtil.getMappeRepo() - - @AfterEach - internal fun tearDown() { - DatabaseUtil.cleanSøknadRepo() - DatabaseUtil.cleanBunkeRepo() - DatabaseUtil.cleanMappeRepo() - DatabaseUtil.cleanPersonRepo() + @Autowired + lateinit var personRepository: PersonRepository + + @Autowired + lateinit var mappeRepo: MappeRepository + + @Autowired + lateinit var søknadRepository: SøknadRepository + + @Autowired + lateinit var bunkeRepository: BunkeRepository + + @BeforeEach + fun setUp() { + cleanUpDB() } @Test diff --git a/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadIntegrasjonsTest.kt b/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadIntegrasjonsTest.kt index 5f2c469e7..ab5027952 100644 --- a/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadIntegrasjonsTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/domenetjenester/SoknadIntegrasjonsTest.kt @@ -1,38 +1,27 @@ package no.nav.k9punsj.domenetjenester -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.IdentOgJournalpost import no.nav.k9punsj.felles.dto.SendSøknad +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.omsorgspengerutbetaling.OmsorgspengerutbetalingSøknadDto -import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension -import org.springframework.web.reactive.function.BodyInserters import java.net.URI import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class SoknadIntegrasjonsTest { +internal class SoknadIntegrasjonsTest : AbstractContainerBaseTest() { - private val client = TestSetup.client - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + @Autowired + lateinit var journalpostRepository: JournalpostRepository private val api = "api" private val søknadTypeUri = "omsorgspengerutbetaling-soknad" @@ -45,15 +34,7 @@ internal class SoknadIntegrasjonsTest { tilpasserSøknadsMalTilTesten(soeknadJson, norskIdent, journalpostid) val soeknad = opprettOgLagreSoeknad(soeknadJson = soeknadJson, ident = norskIdent, journalpostid) - client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "valider" - ) + validerSøknad(soeknadJson) val søknadId = soeknad.soeknadId val sendSøknad = SendSøknad(norskIdent = norskIdent, soeknadId = søknadId) @@ -64,23 +45,13 @@ internal class SoknadIntegrasjonsTest { assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - Assertions.assertTrue(body.feil.isNullOrEmpty()) + sendInnSøknad(sendSøknad) } private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -89,39 +60,60 @@ internal class SoknadIntegrasjonsTest { private suspend fun opprettOgLagreSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() + journalpostid: String = IdGenerator.nesteId(), ): OmsorgspengerutbetalingSøknadDto { val innsendingForOpprettelseAvMappe = IdentOgJournalpost(ident, journalpostid) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) + return søknadDtoFyltUt } + private fun opprettNySøknad(innsendingForOpprettelseAvMappe: IdentOgJournalpost): URI = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(innsendingForOpprettelseAvMappe) + .exchange() + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! + + private fun validerSøknad(soeknadJson: SøknadJson) { + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(soeknadJson) + .exchange() + .expectStatus().isEqualTo(HttpStatus.ACCEPTED) + } + + private fun sendInnSøknad(sendSøknad: SendSøknad) { + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(sendSøknad) + .exchange() + .expectStatus().isAccepted + } + + private fun oppdaterSøknad(soeknadJson: SøknadJson) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(soeknadJson) + .exchange() + private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, location: URI?) { val path = location?.path val søknadId = path?.substring(path.lastIndexOf('/')) diff --git a/src/test/kotlin/no/nav/k9punsj/felles/PeriodeDtoTest.kt b/src/test/kotlin/no/nav/k9punsj/felles/PeriodeDtoTest.kt index 6deb8b44b..59d4764a7 100644 --- a/src/test/kotlin/no/nav/k9punsj/felles/PeriodeDtoTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/felles/PeriodeDtoTest.kt @@ -15,7 +15,7 @@ class PeriodeDtoTest { tom = null ).utledDato() - assertThat(periodeEldreEnn2År.fom).isEqualTo(LocalDate.parse("2022-01-01")) + assertThat(periodeEldreEnn2År.fom).isEqualTo(LocalDate.parse("2023-01-01")) } @Test @@ -25,7 +25,7 @@ class PeriodeDtoTest { tom = null ).utledDato() - assertThat(periodeNøyaktig2ÅrSiden.fom).isEqualTo(LocalDate.parse("2022-01-01")) + assertThat(periodeNøyaktig2ÅrSiden.fom).isEqualTo(LocalDate.parse("2023-01-01")) } @Test diff --git a/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt b/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt index be484e4e8..7e16c705c 100644 --- a/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/fordel/FordelKafkaTest.kt @@ -1,65 +1,28 @@ package no.nav.k9punsj.fordel -import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.module.kotlin.readValue -import io.micrometer.core.instrument.MockClock -import io.micrometer.core.instrument.simple.SimpleMeterRegistry import kotlinx.coroutines.runBlocking -import no.nav.k9punsj.TestBeans +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.akjonspunkter.AksjonspunktKode -import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository import no.nav.k9punsj.akjonspunkter.AksjonspunktServiceImpl import no.nav.k9punsj.akjonspunkter.AksjonspunktStatus -import no.nav.k9punsj.domenetjenester.PersonService import no.nav.k9punsj.domenetjenester.SoknadService -import no.nav.k9punsj.domenetjenester.repository.PersonRepository -import no.nav.k9punsj.domenetjenester.repository.SøknadRepository import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway -import no.nav.k9punsj.journalpost.JournalpostRepository -import no.nav.k9punsj.journalpost.JournalpostService import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.kafka.HendelseProducer import no.nav.k9punsj.utils.objectMapper -import no.nav.k9punsj.rest.eksternt.pdl.TestPdlService import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import org.mockito.ArgumentCaptor import org.mockito.Mockito.doNothing import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.junit.jupiter.SpringExtension -import java.util.UUID - -@ExtendWith(SpringExtension::class) -@ActiveProfiles("test") -@ContextConfiguration( - classes = [ - TestBeans::class, - HendelseMottaker::class, - AksjonspunktServiceImpl::class, - JournalpostRepository::class, - JournalpostService::class, - SafGateway::class, - DokarkivGateway::class, - ObjectMapper::class, - AksjonspunktRepository::class, - PersonService::class, - PersonRepository::class, - TestPdlService::class, - SøknadRepository::class, - AksjonspunktServiceImpl::class, - SoknadService::class, - InnsendingClient::class, - SimpleMeterRegistry::class, - MockClock::class - ] -) -internal class FordelKafkaTest { +import java.util.* + + +internal class FordelKafkaTest: AbstractContainerBaseTest() { @MockBean private lateinit var hendelseProducer: HendelseProducer diff --git a/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt b/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt index ba71c0c0f..568f4151b 100644 --- a/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/fordel/HendelseMottakerTest.kt @@ -1,62 +1,29 @@ package no.nav.k9punsj.fordel -import com.fasterxml.jackson.databind.ObjectMapper import io.micrometer.core.instrument.simple.SimpleMeterRegistry import kotlinx.coroutines.runBlocking -import no.nav.k9punsj.TestBeans +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository import no.nav.k9punsj.akjonspunkter.AksjonspunktService -import no.nav.k9punsj.akjonspunkter.AksjonspunktServiceImpl import no.nav.k9punsj.akjonspunkter.AksjonspunktStatus -import no.nav.k9punsj.domenetjenester.PersonService import no.nav.k9punsj.domenetjenester.SoknadService -import no.nav.k9punsj.domenetjenester.repository.PersonRepository -import no.nav.k9punsj.domenetjenester.repository.SøknadRepository import no.nav.k9punsj.innsending.InnsendingClient import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway -import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.JournalpostService import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.metrikker.Metrikk -import no.nav.k9punsj.rest.eksternt.pdl.TestPdlService -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.MetricUtils.Companion.assertCounter import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.actuate.metrics.MetricsEndpoint import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.junit.jupiter.SpringExtension import java.util.* -@ExtendWith(SpringExtension::class) -@ActiveProfiles("test") -@ContextConfiguration( - classes = [ - TestBeans::class, - AksjonspunktServiceImpl::class, - JournalpostRepository::class, - JournalpostService::class, - SafGateway::class, - DokarkivGateway::class, - ObjectMapper::class, - AksjonspunktRepository::class, - AksjonspunktServiceImpl::class, - SoknadService::class, - InnsendingClient::class, - PersonService::class, - PersonRepository::class, - TestPdlService::class, - SøknadRepository::class - ] -) -internal class HendelseMottakerTest { +internal class HendelseMottakerTest: AbstractContainerBaseTest() { @MockBean private lateinit var safGateway: SafGateway @@ -76,6 +43,9 @@ internal class HendelseMottakerTest { @Autowired private lateinit var aksjonspunktService: AksjonspunktService + @Autowired + lateinit var aksjonspunktRepository: AksjonspunktRepository + private lateinit var hendelseMottaker: HendelseMottaker private lateinit var metricsEndpoint: MetricsEndpoint @@ -151,8 +121,7 @@ internal class HendelseMottakerTest { val journalpost = journalpostService.hent(meldingSomSkalLukkeOppgave.journalpostId) assertThat(journalpost.type).isEqualTo(PunsjInnsendingType.PUNSJOPPGAVE_IKKE_LENGER_NØDVENDIG.kode) - val alleAksjonspunkter = - DatabaseUtil.getAksjonspunktRepo().hentAlleAksjonspunkter(journalpostId = førsteMelding.journalpostId) + val alleAksjonspunkter = aksjonspunktRepository.hentAlleAksjonspunkter(journalpostId = førsteMelding.journalpostId) assertThat(alleAksjonspunkter).hasSize(1) assertThat(alleAksjonspunkter[0].aksjonspunktStatus).isEqualTo(AksjonspunktStatus.UTFØRT) diff --git a/src/test/kotlin/no/nav/k9punsj/gosys/GosysRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/gosys/GosysRoutesTest.kt index ec253ea24..4f23ef9f8 100644 --- a/src/test/kotlin/no/nav/k9punsj/gosys/GosysRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/gosys/GosysRoutesTest.kt @@ -1,35 +1,25 @@ package no.nav.k9punsj.gosys -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.integrasjoner.gosys.Gjelder import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.intellij.lang.annotations.Language -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.skyscreamer.jsonassert.JSONAssert -import org.springframework.http.HttpStatus -import org.springframework.http.HttpStatusCode +import org.springframework.http.HttpHeaders import org.springframework.http.MediaType -import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.web.reactive.function.BodyInserters -import org.springframework.web.reactive.function.client.awaitBodyOrNull -import org.springframework.web.reactive.function.client.awaitExchange -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class GosysRoutesTest { - - private val client = TestSetup.client +internal class GosysRoutesTest: AbstractContainerBaseTest() { private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" @Test fun `hente gyldige verdier for gjelder`() { - val (statusCode, json) = "api/gosys/gjelder".get() - assertEquals(HttpStatus.OK, statusCode) - JSONAssert.assertEquals(Gjelder.JSON, json, true) + webTestClient.get() + .uri{ it.path("/api/gosys/gjelder").build() } + .exchange() + .expectStatus().isOk + .expectBody().json(Gjelder.JSON) } @Test @@ -42,8 +32,13 @@ internal class GosysRoutesTest { } """.trimIndent() - val (statusCode, _) = "api/gosys/opprettJournalforingsoppgave/".post(body) - assertEquals(HttpStatus.OK, statusCode) + webTestClient.post() + .uri { it.path("/api/gosys/opprettJournalforingsoppgave/").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .body(BodyInserters.fromValue(body)) + .exchange() + .expectStatus().isOk } @Test @@ -57,26 +52,12 @@ internal class GosysRoutesTest { } """.trimIndent() - val (statusCode, _) = "api/gosys/opprettJournalforingsoppgave/".post(body) - assertEquals(HttpStatus.OK, statusCode) - } - - private fun String.get(): Pair = this.let { path -> - runBlocking { - client.get() - .uri { it.path(path).build() } - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } - } - } - - private fun String.post(body: String): Pair = this.let { path -> - runBlocking { - client.post() - .uri { it.path(path).build() } - .header("Authorization", saksbehandlerAuthorizationHeader) - .contentType(MediaType.APPLICATION_JSON) - .body(BodyInserters.fromValue(body)) - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } - } + webTestClient.post() + .uri { it.path("/api/gosys/opprettJournalforingsoppgave/").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .contentType(MediaType.APPLICATION_JSON) + .body(BodyInserters.fromValue(body)) + .exchange() + .expectStatus().isOk } } diff --git a/src/test/kotlin/no/nav/k9punsj/integrasjoner/arbeidsgivere/ArbeidsgivereRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/integrasjoner/arbeidsgivere/ArbeidsgivereRoutesTest.kt index db419fb6b..503306b07 100644 --- a/src/test/kotlin/no/nav/k9punsj/integrasjoner/arbeidsgivere/ArbeidsgivereRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/integrasjoner/arbeidsgivere/ArbeidsgivereRoutesTest.kt @@ -1,29 +1,12 @@ package no.nav.k9punsj.integrasjoner.arbeidsgivere -import io.mockk.junit5.MockKExtension -import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import no.nav.k9punsj.AbstractContainerBaseTest import org.intellij.lang.annotations.Language -import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.skyscreamer.jsonassert.JSONAssert import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus -import org.springframework.http.HttpStatusCode import org.springframework.http.MediaType -import org.springframework.test.context.junit.jupiter.SpringExtension -import org.springframework.web.reactive.function.client.awaitBodyOrNull -import org.springframework.web.reactive.function.client.awaitExchange -import java.time.LocalDate -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class ArbeidsgivereRoutesTest { - - private val client = TestSetup.client - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" +internal class ArbeidsgivereRoutesTest : AbstractContainerBaseTest() { @Test fun `hente arbeidsgivere for person som har arbeidsgivere`() { @@ -36,9 +19,15 @@ internal class ArbeidsgivereRoutesTest { }] } """.trimIndent() - val (httpStatus, response) = getArbeidsgivere("11111111111") - assertEquals(HttpStatus.OK, httpStatus) - JSONAssert.assertEquals(forventetResponse, response, true) + + webTestClient.get() + .uri { it.path("/api/arbeidsgivere").build() } + .accept(MediaType.APPLICATION_JSON) + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", "11111111111") + .exchange() + .expectStatus().isOk + .expectBody().json(forventetResponse) } @Test @@ -49,28 +38,35 @@ internal class ArbeidsgivereRoutesTest { "organisasjoner": [] } """.trimIndent() - val (httpStatus, response) = getArbeidsgivere("22222222222") - assertEquals(HttpStatus.OK, httpStatus) - JSONAssert.assertEquals(forventetResponse, response, true) + webTestClient.get() + .uri { it.path("/api/arbeidsgivere").build() } + .accept(MediaType.APPLICATION_JSON) + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", "22222222222") + .exchange() + .expectStatus().isOk + .expectBody().json(forventetResponse) } @Test fun `hente navn på arbeidsgiver som finnes`() { - val (httpStatus, response) = getArbeidsgiverNavn("979312059") - assertEquals(HttpStatus.OK, httpStatus) - JSONAssert.assertEquals("""{"navn":"NAV AS"}""", response, true) + webTestClient.get() + .uri { it.path("/api/arbeidsgiver").queryParam("organisasjonsnummer", "979312059").build() } + .exchange() + .expectStatus().isOk + .expectBody().json("""{"navn":"NAV AS"}""") } @Test fun `hente navn på arbeidsgiver som ikke finnes`() { - val (httpStatus, _) = getArbeidsgiverNavn("993110469") - assertEquals(HttpStatus.NOT_FOUND, httpStatus) + webTestClient.get() + .uri { it.path("/api/arbeidsgiver").queryParam("organisasjonsnummer", "993110469").build() } + .exchange() + .expectStatus().isNotFound } @Test fun `henter historiske arbeidsgivere fra siste 6 mån, tar kun med de som har orgnr`() { - val (status, body) = getArbeidsgiverListeMedHistoriske("22053826656") - assertEquals(HttpStatus.OK, status) val forventetResponse = """ { "organisasjoner": [ @@ -89,37 +85,16 @@ internal class ArbeidsgivereRoutesTest { ] } """.trimIndent() - JSONAssert.assertEquals(forventetResponse, body, true) - } - - private fun getArbeidsgivere( - identitetsnummer: String - ): Pair = runBlocking { - client.get() - .uri { it.path("/api/arbeidsgivere").build() } - .accept(MediaType.APPLICATION_JSON) - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", identitetsnummer) - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } - } - - private fun getArbeidsgiverNavn(organisasjonsnummer: String): Pair = runBlocking { - client.get() - .uri { it.path("/api/arbeidsgiver").queryParam("organisasjonsnummer", organisasjonsnummer).build() } - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } - } - private fun getArbeidsgiverListeMedHistoriske( - identitetsnummer: String - ): Pair = runBlocking { - client.get() - .uri { it.path("/api/arbeidsgivere-historikk") - .queryParam("historikk", "true") - .build() + webTestClient.get() + .uri { + it.path("/api/arbeidsgivere-historikk").queryParam("historikk", "true").build() } .accept(MediaType.APPLICATION_JSON) .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", identitetsnummer) - .awaitExchange { it.statusCode() to it.awaitBodyOrNull() } + .header("X-Nav-NorskIdent", "22053826656") + .exchange() + .expectStatus().isOk + .expectBody().json(forventetResponse) } } diff --git a/src/test/kotlin/no/nav/k9punsj/jobber/MetrikkJobbTest.kt b/src/test/kotlin/no/nav/k9punsj/jobber/MetrikkJobbTest.kt index d6fcb7d78..092050efc 100644 --- a/src/test/kotlin/no/nav/k9punsj/jobber/MetrikkJobbTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/jobber/MetrikkJobbTest.kt @@ -2,39 +2,46 @@ package no.nav.k9punsj.jobber import io.micrometer.core.instrument.simple.SimpleMeterRegistry import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.fordel.PunsjInnsendingType +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.dto.PunsjJournalpost +import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository import no.nav.k9punsj.metrikker.Metrikk -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.MetricUtils import no.nav.k9punsj.util.MetricUtils.MetrikkTag import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test +import org.slf4j.LoggerFactory +import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.actuate.metrics.MetricsEndpoint import java.util.* import java.util.stream.IntStream -internal class MetrikkJobbTest { +internal class MetrikkJobbTest: AbstractContainerBaseTest() { private lateinit var metrikkJobb: MetrikkJobb - private lateinit var metricsEndpoint: MetricsEndpoint - private val simpleMeterRegistry = SimpleMeterRegistry() - private val journalpostRepo = DatabaseUtil.getJournalpostRepo() + @Autowired + lateinit var journalpostRepository: JournalpostRepository + + @Autowired + lateinit var journalpostMetrikkRepository: JournalpostMetrikkRepository @BeforeEach internal fun setUp() { - DatabaseUtil.cleanDB() - metrikkJobb = MetrikkJobb(DatabaseUtil.journalpostMetrikkRepository(), simpleMeterRegistry) + cleanUpDB() + val simpleMeterRegistry = SimpleMeterRegistry() + metrikkJobb = MetrikkJobb(journalpostMetrikkRepository, simpleMeterRegistry) metricsEndpoint = MetricsEndpoint(simpleMeterRegistry) } @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test @@ -47,8 +54,8 @@ internal class MetrikkJobbTest { type = PunsjInnsendingType.PAPIRSØKNAD.kode ) - journalpostRepo.lagre(punsjJournalpost) { punsjJournalpost } - journalpostRepo.ferdig(punsjJournalpost.journalpostId) + journalpostRepository.lagre(punsjJournalpost) { punsjJournalpost } + journalpostRepository.ferdig(punsjJournalpost.journalpostId) metrikkJobb.oppdaterMetrikkMåling() MetricUtils.assertGuage( @@ -68,7 +75,7 @@ internal class MetrikkJobbTest { type = PunsjInnsendingType.PAPIRSØKNAD.kode ) - journalpostRepo.lagre(punsjJournalpost) { punsjJournalpost } + journalpostRepository.lagre(punsjJournalpost) { punsjJournalpost } metrikkJobb.oppdaterMetrikkMåling() MetricUtils.assertGuage( @@ -119,7 +126,7 @@ internal class MetrikkJobbTest { aktørId = dummyAktørId, type = type.kode ) - journalpostRepo.lagre(punsjJournalpost) { punsjJournalpost } + journalpostRepository.lagre(punsjJournalpost) { punsjJournalpost } return punsjJournalpost } diff --git "a/src/test/kotlin/no/nav/k9punsj/jobber/SjekkOmUtl\303\270ptJobbTest.kt" "b/src/test/kotlin/no/nav/k9punsj/jobber/SjekkOmUtl\303\270ptJobbTest.kt" index 9eb5434ca..669034176 100644 --- "a/src/test/kotlin/no/nav/k9punsj/jobber/SjekkOmUtl\303\270ptJobbTest.kt" +++ "b/src/test/kotlin/no/nav/k9punsj/jobber/SjekkOmUtl\303\270ptJobbTest.kt" @@ -1,39 +1,39 @@ package no.nav.k9punsj.jobber -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.akjonspunkter.AksjonspunktEntitet import no.nav.k9punsj.akjonspunkter.AksjonspunktKode +import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository import no.nav.k9punsj.akjonspunkter.AksjonspunktStatus import no.nav.k9punsj.akjonspunkter.VentÅrsakType +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.kafka.HendelseProducer -import no.nav.k9punsj.util.DatabaseUtil.Companion.getAksjonspunktRepo -import no.nav.k9punsj.util.DatabaseUtil.Companion.getJournalpostRepo import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.junit.jupiter.SpringExtension import java.time.LocalDateTime -import java.util.UUID +import java.util.* -@ActiveProfiles("test") -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class SjekkOmUtløptJobbTest { +internal class SjekkOmUtløptJobbTest : AbstractContainerBaseTest() { @MockBean lateinit var hendelseProducer: HendelseProducer + @Autowired + lateinit var aksonspunktRepository: AksjonspunktRepository + + @Autowired + lateinit var journalpostRepository: JournalpostRepository + + @Test fun `Skal finne alle aksjonspunkter som har utløpt og sende oppgaver på disse`(): Unit = runBlocking { - // Arrange - val aksjonspunktRepository = getAksjonspunktRepo() - val journalpostRepository = getJournalpostRepo() val sjekkOmUtløptJobb = SjekkOmUtløptJobb( - aksjonspunktRepository = aksjonspunktRepository, + aksjonspunktRepository = aksonspunktRepository, hendelseProducer = hendelseProducer, journalpostRepository = journalpostRepository, k9losAksjonspunkthendelseTopic = "test", @@ -52,7 +52,7 @@ internal class SjekkOmUtløptJobbTest { } val aksjonspunktId = UUID.randomUUID().toString() - aksjonspunktRepository.opprettAksjonspunkt( + aksonspunktRepository.opprettAksjonspunkt( AksjonspunktEntitet( aksjonspunktId, AksjonspunktKode.VENTER_PÅ_INFORMASJON, @@ -67,7 +67,7 @@ internal class SjekkOmUtløptJobbTest { sjekkOmUtløptJobb.sjekkeOmAksjonspunktHarLøptUt() // Assert - val hentAlleAksjonspunkter = aksjonspunktRepository.hentAlleAksjonspunkter(punsjJournalpost.journalpostId) + val hentAlleAksjonspunkter = aksonspunktRepository.hentAlleAksjonspunkter(punsjJournalpost.journalpostId) assertThat(hentAlleAksjonspunkter).hasSize(2) val venterPåInformasjon = diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt index 1914faadd..e35e2efe4 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/JournalpostServiceTest.kt @@ -4,8 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper import io.mockk.coVerify import io.mockk.impl.annotations.InjectMockKs import io.mockk.impl.annotations.MockK -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.felles.Sak import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway @@ -13,10 +13,8 @@ import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test import org.junit.jupiter.api.assertThrows -import org.junit.jupiter.api.extension.ExtendWith -@ExtendWith(MockKExtension::class) -internal class JournalpostServiceTest { +internal class JournalpostServiceTest: AbstractContainerBaseTest() { @MockK private lateinit var safGateway: SafGateway diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt index e2c9e3fee..9dbc5f2ee 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/KopierJournalpostRouteTest.kt @@ -1,18 +1,11 @@ package no.nav.k9punsj.journalpost -import com.fasterxml.jackson.databind.ObjectMapper import io.micrometer.core.instrument.simple.SimpleMeterRegistry import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestBeans -import no.nav.k9punsj.TestSetup -import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.akjonspunkter.AksjonspunktService -import no.nav.k9punsj.akjonspunkter.AksjonspunktServiceImpl -import no.nav.k9punsj.domenetjenester.PersonService import no.nav.k9punsj.domenetjenester.SoknadService -import no.nav.k9punsj.domenetjenester.repository.PersonRepository -import no.nav.k9punsj.domenetjenester.repository.SøknadRepository import no.nav.k9punsj.fordel.FordelPunsjEventDto import no.nav.k9punsj.fordel.HendelseMottaker import no.nav.k9punsj.fordel.PunsjInnsendingType @@ -21,52 +14,22 @@ import no.nav.k9punsj.integrasjoner.dokarkiv.DokarkivGateway import no.nav.k9punsj.integrasjoner.dokarkiv.SafGateway import no.nav.k9punsj.journalpost.dto.BehandlingsAarDto import no.nav.k9punsj.journalpost.dto.KopierJournalpostDto -import no.nav.k9punsj.rest.eksternt.pdl.TestPdlService -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith import org.junit.jupiter.params.ParameterizedTest import org.junit.jupiter.params.provider.ValueSource -import org.skyscreamer.jsonassert.JSONAssert import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.actuate.metrics.MetricsEndpoint import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.http.HttpStatus -import org.springframework.test.context.ActiveProfiles -import org.springframework.test.context.ContextConfiguration -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.http.HttpHeaders import org.springframework.web.reactive.function.BodyInserters import java.time.LocalDate -@ExtendWith(SpringExtension::class) -@ActiveProfiles("test") -@ContextConfiguration( - classes = [ - TestBeans::class, - AksjonspunktServiceImpl::class, - JournalpostRepository::class, - JournalpostService::class, - SafGateway::class, - DokarkivGateway::class, - ObjectMapper::class, - AksjonspunktRepository::class, - AksjonspunktServiceImpl::class, - SoknadService::class, - InnsendingClient::class, - PersonService::class, - PersonRepository::class, - TestPdlService::class, - SøknadRepository::class - ] -) -internal class KopierJournalpostRouteTest { +internal class KopierJournalpostRouteTest : AbstractContainerBaseTest() { @MockBean private lateinit var safGateway: SafGateway @@ -85,15 +48,17 @@ internal class KopierJournalpostRouteTest { @Autowired private lateinit var aksjonspunktService: AksjonspunktService + + @Autowired + lateinit var journalpostRepository: JournalpostRepository + private lateinit var hendelseMottaker: HendelseMottaker private lateinit var metricsEndpoint: MetricsEndpoint - private val client = TestSetup.client private val api = "api" private val journalpostUri = "journalpost" private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() @BeforeEach internal fun setUp() { @@ -108,11 +73,11 @@ internal class KopierJournalpostRouteTest { @AfterEach fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test - fun `Mapper kopierjournalpostinfo med barn og sender inn`() = runBlocking { + fun `Mapper kopierjournalpostinfo med barn og sender inn`(): Unit = runBlocking { val journalpostId = IdGenerator.nesteId() val melding = FordelPunsjEventDto( @@ -132,17 +97,13 @@ internal class KopierJournalpostRouteTest { annenPart = null ) - val body = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(kopierJournalpostDto), - api, - journalpostUri, - "kopier", - journalpostId - ) - - Assertions.assertTrue(body.statusCode().is2xxSuccessful) + webTestClient + .post() + .uri { it.path("/api/journalpost/kopier/$journalpostId").build() } + .body(BodyInserters.fromValue(kopierJournalpostDto)) + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isAccepted } @ParameterizedTest @@ -154,7 +115,7 @@ internal class KopierJournalpostRouteTest { """{"behandlingsAar": -1}""", ] ) - fun `Sett behandlingår med ugyldige verdier defaulter til nåværende år`(payload: String) = runBlocking { + fun `Sett behandlingår med ugyldige verdier defaulter til nåværende år`(payload: String): Unit = runBlocking { val journalpostId = IdGenerator.nesteId() val melding = FordelPunsjEventDto( @@ -168,27 +129,25 @@ internal class KopierJournalpostRouteTest { val journalpost = journalpostRepository.hent(journalpostId) Assertions.assertNotNull(journalpost) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = journalpost.aktørId, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(payload), - api, - journalpostUri, - "settBehandlingsAar", - journalpostId - ) - - val forventetRespons = """ - { - "behandlingsAar": ${LocalDate.now().year} - }""".trimIndent() - - JSONAssert.assertEquals(forventetRespons, body, true) + webTestClient + .post() + .uri { it.path("/api/journalpost/settBehandlingsAar/${journalpostId}").build() } + .body(BodyInserters.fromValue(payload)) + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", journalpost.aktørId) + .exchange() + .expectStatus().isOk + .expectBody().json( + """ + { + "behandlingsAar": ${LocalDate.now().year} + } + """.trimIndent() + ) } @Test - fun `Sett behandlingår med gyldig verdi`() = runBlocking { + fun `Sett behandlingår med gyldig verdi`(): Unit = runBlocking { val journalpostId = IdGenerator.nesteId() val melding = FordelPunsjEventDto( aktørId = "1234567890", @@ -204,22 +163,20 @@ internal class KopierJournalpostRouteTest { val gyldigÅr = LocalDate.now().year + 1 val payload = BehandlingsAarDto(behandlingsAar = gyldigÅr) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = journalpost.aktørId, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(payload), - api, - journalpostUri, - "settBehandlingsAar", - journalpostId - ) - - val forventetRespons = """ - { - "behandlingsAar": $gyldigÅr - }""".trimIndent() - - JSONAssert.assertEquals(forventetRespons, body, true) + webTestClient + .post() + .uri { it.path("/api/journalpost/settBehandlingsAar/$journalpostId").build() } + .body(BodyInserters.fromValue(payload)) + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", journalpost.aktørId) + .exchange() + .expectStatus().isOk + .expectBody().json( + """ + { + "behandlingsAar": $gyldigÅr + } + """.trimIndent() + ) } } diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostMetrikkRepositoryTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostMetrikkRepositoryTest.kt index 6b6491420..766ee27f2 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostMetrikkRepositoryTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostMetrikkRepositoryTest.kt @@ -1,36 +1,36 @@ package no.nav.k9punsj.journalpost -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.fordel.PunsjInnsendingType import no.nav.k9punsj.journalpost.dto.PunsjJournalpost -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository +import no.nav.k9punsj.util.DbContainerInitializer import no.nav.k9punsj.util.IdGenerator import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.test.context.TestPropertySource -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired import java.util.* import java.util.stream.IntStream -@ExtendWith(SpringExtension::class, MockKExtension::class) -@TestPropertySource(locations = ["classpath:application.yml"]) -internal class PunsjJournalpostMetrikkRepositoryTest { +internal class PunsjJournalpostMetrikkRepositoryTest: AbstractContainerBaseTest() { - private val journalpostRepo = DatabaseUtil.getJournalpostRepo() - private val journalpostMetrikkRepository = DatabaseUtil.journalpostMetrikkRepository() + @Autowired + lateinit var journalpostRepo: JournalpostRepository + + @Autowired + lateinit var journalpostMetrikkRepository: JournalpostMetrikkRepository @BeforeEach internal fun setUp() { - DatabaseUtil.cleanDB() + cleanUpDB() } @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test diff --git a/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostRepositoryTest.kt b/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostRepositoryTest.kt index 12418304e..c1f41370a 100644 --- a/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostRepositoryTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/journalpost/PunsjJournalpostRepositoryTest.kt @@ -1,46 +1,46 @@ package no.nav.k9punsj.journalpost -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.fordel.PunsjInnsendingType import no.nav.k9punsj.journalpost.dto.PunsjJournalpost import no.nav.k9punsj.journalpost.dto.PunsjJournalpostKildeType -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator -import no.nav.k9punsj.util.WebClientUtils.awaitExchangeBlocking -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus -import org.springframework.test.context.TestPropertySource -import org.springframework.test.context.junit.jupiter.SpringExtension -import java.util.UUID +import java.util.* -@ExtendWith(SpringExtension::class, MockKExtension::class) -@TestPropertySource(locations = ["classpath:application.yml"]) -internal class PunsjJournalpostRepositoryTest { - val client = TestSetup.client - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" +internal class PunsjJournalpostRepositoryTest : AbstractContainerBaseTest() { + + @Autowired + private lateinit var journalpostRepository: JournalpostRepository @Test fun `Skal finne alle journalposter på personen`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, type = PunsjInnsendingType.PAPIRSØKNAD.kode) + PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + type = PunsjInnsendingType.PAPIRSØKNAD.kode + ) journalpostRepository.lagre(punsjJournalpost1) { punsjJournalpost1 } val punsjJournalpost2 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, type = PunsjInnsendingType.PAPIRSØKNAD.kode) + PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + type = PunsjInnsendingType.PAPIRSØKNAD.kode + ) journalpostRepository.lagre(punsjJournalpost2) { punsjJournalpost2 } @@ -59,16 +59,25 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `Skal bare finne de fra fordel`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, type = PunsjInnsendingType.PAPIRSØKNAD.kode) + PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + type = PunsjInnsendingType.PAPIRSØKNAD.kode + ) journalpostRepository.lagre(punsjJournalpost1, PunsjJournalpostKildeType.SAKSBEHANDLER) { punsjJournalpost1 } val punsjJournalpost2 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, type = PunsjInnsendingType.PAPIRSØKNAD.kode) + PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + type = PunsjInnsendingType.PAPIRSØKNAD.kode + ) journalpostRepository.lagre(punsjJournalpost2, PunsjJournalpostKildeType.FORDEL) { punsjJournalpost2 } @@ -87,7 +96,6 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `Skal sette status til ferdig`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) @@ -110,7 +118,12 @@ internal class PunsjJournalpostRepositoryTest { val finnJournalposterPåPerson = journalpostRepository.finnJournalposterPåPerson(dummyAktørId) assertThat(finnJournalposterPåPerson).hasSize(2) - journalpostRepository.settAlleTilFerdigBehandlet(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId)) + journalpostRepository.settAlleTilFerdigBehandlet( + listOf( + punsjJournalpost1.journalpostId, + punsjJournalpost2.journalpostId + ) + ) val finnJournalposterPåPersonSkalGiTom = journalpostRepository.finnJournalposterPåPerson(dummyAktørId) assertThat(finnJournalposterPåPersonSkalGiTom).isEmpty() @@ -119,30 +132,28 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `Endepunkt brukt for resett av journalpost fungerer`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() - val punsjJournalpost1 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, skalTilK9 = false) - journalpostRepository.lagre(punsjJournalpost1) { - punsjJournalpost1 - } - - val res = - client.get().uri { - it.pathSegment("api", "journalpost", "resett", punsjJournalpost1.journalpostId).build() - }.header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader).awaitExchangeBlocking() + val punsjJournalpost = PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + skalTilK9 = false + ) + journalpostRepository.lagre(punsjJournalpost) { punsjJournalpost } - Assertions.assertEquals(HttpStatus.OK, res.statusCode()) + webTestClient.get() + .uri { it.path("/api/journalpost/resett/${punsjJournalpost.journalpostId}").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + .expectStatus().isOk val finnJournalposterPåPerson = journalpostRepository.finnJournalposterPåPerson(dummyAktørId) - Assertions.assertEquals(finnJournalposterPåPerson[0].skalTilK9, null) } @Test fun `Skal sjekke om punsj kan sende inn`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) @@ -169,7 +180,12 @@ internal class PunsjJournalpostRepositoryTest { journalpostRepository.kanSendeInn(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId)) assertThat(kanSendeInn).isTrue - journalpostRepository.settAlleTilFerdigBehandlet(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId)) + journalpostRepository.settAlleTilFerdigBehandlet( + listOf( + punsjJournalpost1.journalpostId, + punsjJournalpost2.journalpostId + ) + ) val kanSendeInn2 = journalpostRepository.kanSendeInn(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId)) @@ -180,7 +196,6 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `skal sette kilde hvis journalposten ikke finnes i databasen fra før`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost2 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) @@ -192,7 +207,12 @@ internal class PunsjJournalpostRepositoryTest { val punsjJournalpost1 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) - journalpostRepository.settKildeHvisIkkeFinnesFraFør(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId), dummyAktørId) + journalpostRepository.settKildeHvisIkkeFinnesFraFør( + listOf( + punsjJournalpost1.journalpostId, + punsjJournalpost2.journalpostId + ), dummyAktørId + ) assertThat(journalpostRepository.finnJournalposterPåPerson(dummyAktørId)).hasSize(2) } @@ -200,10 +220,14 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `skal vise om journalposten må til infotrygd`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost2 = - PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId, skalTilK9 = false) + PunsjJournalpost( + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + skalTilK9 = false + ) journalpostRepository.lagre(punsjJournalpost2) { punsjJournalpost2 } @@ -214,7 +238,6 @@ internal class PunsjJournalpostRepositoryTest { @Test fun `skal kunne sette alle til ferdig`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) @@ -228,14 +251,25 @@ internal class PunsjJournalpostRepositoryTest { punsjJournalpost2 } - journalpostRepository.settAlleTilFerdigBehandlet(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId)) - assertThat(journalpostRepository.kanSendeInn(listOf(punsjJournalpost1.journalpostId, punsjJournalpost2.journalpostId))).isFalse() + journalpostRepository.settAlleTilFerdigBehandlet( + listOf( + punsjJournalpost1.journalpostId, + punsjJournalpost2.journalpostId + ) + ) + assertThat( + journalpostRepository.kanSendeInn( + listOf( + punsjJournalpost1.journalpostId, + punsjJournalpost2.journalpostId + ) + ) + ).isFalse() } @Test fun `skal feil hvis ikke alle kan settes til ferdig`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost1 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) @@ -243,7 +277,8 @@ internal class PunsjJournalpostRepositoryTest { punsjJournalpost1 } - val punsjJournalpost2 = PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) + val punsjJournalpost2 = + PunsjJournalpost(uuid = UUID.randomUUID(), journalpostId = IdGenerator.nesteId(), aktørId = dummyAktørId) var harFåttEx = false try { @@ -264,15 +299,14 @@ internal class PunsjJournalpostRepositoryTest { fun `Forventer at gosysoppgaveId blir persistert på journalpost`(): Unit = runBlocking { val dummyAktørId = IdGenerator.nesteId() val forventetGosysoppgaveId = IdGenerator.nesteId() - val journalpostRepository = DatabaseUtil.getJournalpostRepo() val punsjJournalpost = PunsjJournalpost( - uuid = UUID.randomUUID(), - journalpostId = IdGenerator.nesteId(), - aktørId = dummyAktørId, - type = PunsjInnsendingType.SAMTALEREFERAT.kode, - gosysoppgaveId = forventetGosysoppgaveId - ) + uuid = UUID.randomUUID(), + journalpostId = IdGenerator.nesteId(), + aktørId = dummyAktørId, + type = PunsjInnsendingType.SAMTALEREFERAT.kode, + gosysoppgaveId = forventetGosysoppgaveId + ) journalpostRepository.lagre(punsjJournalpost) { punsjJournalpost } diff --git a/src/test/kotlin/no/nav/k9punsj/korrigeringinntektsmelding/KorrigeringInntektsmeldingDtoRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/korrigeringinntektsmelding/KorrigeringInntektsmeldingDtoRoutesTest.kt index f198fa154..481dea95a 100644 --- a/src/test/kotlin/no/nav/k9punsj/korrigeringinntektsmelding/KorrigeringInntektsmeldingDtoRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/korrigeringinntektsmelding/KorrigeringInntektsmeldingDtoRoutesTest.kt @@ -1,33 +1,28 @@ package no.nav.k9punsj.korrigeringinntektsmelding -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9.søknad.Søknad +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.IdentOgJournalpost import no.nav.k9punsj.felles.dto.ArbeidsgiverMedArbeidsforholdId import no.nav.k9punsj.felles.dto.MatchFagsakMedPeriode import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SendSøknad +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.pleiepengersyktbarn.PleiepengerSyktBarnSøknadDto -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.test.web.reactive.server.WebTestClient +import org.springframework.test.web.reactive.server.returnResult import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.time.LocalDate @@ -35,33 +30,25 @@ import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -class KorrigeringInntektsmeldingDtoRoutesTest { +class KorrigeringInntektsmeldingDtoRoutesTest : AbstractContainerBaseTest() { - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "omsorgspenger-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - - Assertions.assertTrue(body.søknader!!.isEmpty()) + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody().jsonPath("$.søknader").isEmpty } @Test @@ -69,13 +56,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val norskIdent = "01010050053" val opprettNySøknad = opprettSøknad(norskIdent, UUID.randomUUID().toString()) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) + opprettNySøknad(opprettNySøknad) } @Test @@ -84,25 +65,15 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val journalpostId = UUID.randomUUID().toString() val opprettNySøknad = opprettSøknad(norskIdent, journalpostId) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - - val journalposterDto = body.søknader?.first()?.journalposter - Assertions.assertEquals(journalpostId, journalposterDto?.first()) + opprettNySøknad(opprettNySøknad) + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarOmsDto::class.java) + .consumeWith { + val journalposter = it.responseBody?.søknader?.first()?.journalposter + Assertions.assertEquals(journalpostId, journalposter?.first()) + } } @Test @@ -114,29 +85,15 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - hentSøknadId(location)!! - ) - - Assertions.assertNotNull(søknadViaGet) - Assertions.assertEquals(journalpostid, søknadViaGet.journalposter?.first()) + val location = opprettNySøknad(opprettNySøknad) + + hentMappeGittSøknadIdFraLocation(location, norskIdent) + .expectStatus().isOk + .expectBody(KorrigeringInntektsmeldingDto::class.java) + .consumeWith { + val journalposter = it.responseBody?.journalposter + Assertions.assertEquals(journalpostid, journalposter?.first()) + } } @Test @@ -148,31 +105,17 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) leggerPåNySøknadId(søknadFraFrontend, location) - val body = client.putAndAssert, KorrigeringInntektsmeldingDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(søknadFraFrontend), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) + oppdaterEksisterendeSøknad(søknadFraFrontend) + .expectStatus().isOk + .expectBody(KorrigeringInntektsmeldingDto::class.java) + .consumeWith { + Assertions.assertNotNull(it.responseBody) + Assertions.assertEquals(norskIdent, it.responseBody!!.soekerId) + } } @Test @@ -182,8 +125,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -194,8 +136,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val journalpostid = abs(Random(2234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -207,17 +148,12 @@ class KorrigeringInntektsmeldingDtoRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil).isNull() + validerSøknad(soeknad) + .expectStatus().isAccepted + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + Assertions.assertNull(it.responseBody?.feil) + } } @Test @@ -228,17 +164,12 @@ class KorrigeringInntektsmeldingDtoRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.BAD_REQUEST, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil?.get(0)?.feilkode).isEqualTo("mottattDato") + validerSøknad(soeknad) + .expectStatus().isBadRequest + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + Assertions.assertEquals("mottattDato", it.responseBody?.feil?.get(0)?.feilkode) + } } @Test @@ -248,8 +179,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { val journalpostid = abs(Random(2256234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -262,24 +192,21 @@ class KorrigeringInntektsmeldingDtoRoutesTest { PeriodeDto(LocalDate.now(), LocalDate.now().plusDays(1)) ) - val oppdatertSoeknadDto = - client.postAndAssertAwaitWithStatusAndBody>( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(dtoSpørring), - api, - søknadTypeUri, - "k9sak", - "arbeidsforholdIder" - ) - - Assertions.assertEquals("randomArbeidsforholdId", oppdatertSoeknadDto[0].arbeidsforholdId[0]) + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/k9sak/arbeidsforholdIder").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(dtoSpørring)) + .exchange() + .expectStatus().isOk + .expectBodyList(ArbeidsgiverMedArbeidsforholdId::class.java) + .consumeWith> { + Assertions.assertEquals("randomArbeidsforholdId", it.responseBody?.first()?.arbeidsforholdId?.first()) + } } private fun opprettSøknad( personnummer: String, - journalpostId: String + journalpostId: String, ): IdentOgJournalpost { return IdentOgJournalpost(personnummer, journalpostId) } @@ -287,7 +214,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -302,7 +229,7 @@ class KorrigeringInntektsmeldingDtoRoutesTest { private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } @@ -310,37 +237,24 @@ class KorrigeringInntektsmeldingDtoRoutesTest { private suspend fun opprettOgSendInnSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() - ): OasSoknadsfeil { + journalpostid: String = IdGenerator.nesteId(), + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: KorrigeringInntektsmeldingDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) + val søknadDtoFyltUt = oppdaterEksisterendeSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(KorrigeringInntektsmeldingDto::class.java) + .returnResult() + .responseBody + + Assertions.assertNotNull(søknadDtoFyltUt) + Assertions.assertNotNull(søknadDtoFyltUt!!.soekerId) val søknadId = søknadDtoFyltUt.soeknadId val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) @@ -351,52 +265,72 @@ class KorrigeringInntektsmeldingDtoRoutesTest { assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - return body + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(sendSøknad)) + .exchange() + .expectStatus().isAccepted + .expectBody(Søknad::class.java) } private suspend fun opprettOgLagreSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() - ): PleiepengerSyktBarnSøknadDto { + journalpostid: String = IdGenerator.nesteId(), + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) - return søknadDtoFyltUt + val responseBody = oppdaterEksisterendeSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(KorrigeringInntektsmeldingDto::class.java) + .returnResult() + .responseBody + + Assertions.assertNotNull(responseBody) + Assertions.assertNotNull(responseBody!!.soekerId) } + + private fun opprettNySøknad(requestBody: IdentOgJournalpost): URI? = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(requestBody)) + .exchange() + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult() + .responseHeaders.location + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun hentMappeGittSøknadIdFraLocation( + location: URI?, + norskIdent: String, + ) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/${hentSøknadId(location)}").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun oppdaterEksisterendeSøknad(søknadFraFrontend: SøknadJson) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(søknadFraFrontend)) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(soeknad)) + .exchange() } diff --git a/src/test/kotlin/no/nav/k9punsj/notat/NotatRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/notat/NotatRoutesTest.kt index 40857ecf2..9b27c3f7f 100644 --- a/src/test/kotlin/no/nav/k9punsj/notat/NotatRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/notat/NotatRoutesTest.kt @@ -2,41 +2,32 @@ package no.nav.k9punsj.notat import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup -import no.nav.k9punsj.integrasjoner.dokarkiv.JournalPostResponse -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.wiremock.saksbehandlerAccessToken -import org.assertj.core.api.Assertions import org.junit.jupiter.api.Test -import org.springframework.http.HttpStatus import org.springframework.web.reactive.function.BodyInserters -internal class NotatRoutesTest { +internal class NotatRoutesTest: AbstractContainerBaseTest() { private companion object { - private val client = TestSetup.client private val api = "api" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" } @Test fun `Journalføring av notat`(): Unit = runBlocking { val søkerIdent = "66666666666" // no.nav.k9punsj.rest.eksternt.pdl.TestPdlService.harBarn - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue( - NyNotat( - søkerIdentitetsnummer = søkerIdent, - fagsakId = "ABC123", - tittel = "Journalføring av notat", - notat = "lorem ipmsum osv..." - ) - ), - api, - "notat", - "opprett" + val nyNotat = NyNotat( + søkerIdentitetsnummer = søkerIdent, + fagsakId = "ABC123", + tittel = "Journalføring av notat", + notat = "lorem ipmsum osv..." ) - Assertions.assertThat(body.journalpostId).isEqualTo("201") + + webTestClient.post() + .uri { it.path("/$api/notat/opprett").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(nyNotat)) + .exchange() + .expectStatus().isCreated + .expectBody().jsonPath("$.journalpostId").isEqualTo("201") } } diff --git a/src/test/kotlin/no/nav/k9punsj/omsorgspengeraleneomsorg/OmsorgspengerAleneOmsorgRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/omsorgspengeraleneomsorg/OmsorgspengerAleneOmsorgRoutesTest.kt index 788db9112..2b29f3586 100644 --- a/src/test/kotlin/no/nav/k9punsj/omsorgspengeraleneomsorg/OmsorgspengerAleneOmsorgRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/omsorgspengeraleneomsorg/OmsorgspengerAleneOmsorgRoutesTest.kt @@ -1,61 +1,48 @@ package no.nav.k9punsj.omsorgspengeraleneomsorg -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.dto.OpprettNySøknad import no.nav.k9punsj.felles.dto.SendSøknad -import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson -import no.nav.k9punsj.util.WebClientUtils.awaitBodyWithType -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired import org.springframework.web.reactive.function.BodyInserters import java.net.URI -import java.time.LocalDate import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class OmsorgspengerAleneOmsorgRoutesTest { - private val client = TestSetup.client +internal class OmsorgspengerAleneOmsorgRoutesTest : AbstractContainerBaseTest() { private val api = "api" private val søknadTypeUri = "omsorgspenger-alene-om-omsorgen-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - Assertions.assertTrue(body.søknader!!.isEmpty()) + + webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + .expectStatus().isOk + .expectBody().jsonPath("$.søknader").isEmpty } @Test @@ -64,13 +51,7 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { val pleietrengende = "01010050023" val opprettNySøknad = opprettSøknad(norskIdent, UUID.randomUUID().toString(), pleietrengende) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) + opprettNySøknad(opprettNySøknad) } @Test @@ -82,16 +63,12 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid, pleietrengende) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - org.assertj.core.api.Assertions.assertThat(body.feil).isNull() + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(soeknad)) + .exchange() + .expectStatus().isAccepted } @Test @@ -102,8 +79,7 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) - org.assertj.core.api.Assertions.assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) org.assertj.core.api.Assertions.assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -115,15 +91,17 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val søknad = opprettOgLagreSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) - - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", søknad.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - org.assertj.core.api.Assertions.assertThat(søknadViaGet.begrunnelseForInnsending).isEqualTo("JEG VET IKKE") - org.assertj.core.api.Assertions.assertThat(søknadViaGet.barn?.foedselsdato).isEqualTo(LocalDate.of(2018, 10, 30)) + val søknad = + opprettOgLagreSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) + + webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/${søknad.soeknadId}").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .exchange() + .expectStatus().isOk + .expectBody() + .jsonPath("$.begrunnelseForInnsending").isEqualTo("JEG VET IKKE") + .jsonPath("$.barn.foedselsdato").isEqualTo("2018-10-30") } @Test @@ -140,37 +118,28 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { pleietrengende = pleietrengende ) - val body = client.putAndAssert, OmsorgspengerAleneOmsorgSøknadDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "oppdater" - ) + val body = oppdaterSøknad(soeknad) Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - soeknad["soeknadId"] as String - ) - - Assertions.assertNotNull(søknadViaGet) - org.assertj.core.api.Assertions.assertThat(body.metadata).isEqualTo(søknadViaGet.metadata) + Assertions.assertEquals(norskIdent, body!!.soekerId) + + webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/${soeknad["soeknadId"]}").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + .expectStatus().isOk + .expectBody(OmsorgspengerAleneOmsorgSøknadDto::class.java) + .consumeWith { + Assertions.assertNotNull(it.responseBody) + Assertions.assertEquals(body.metadata, it.responseBody!!.metadata) + } } private fun opprettSøknad( personnummer: String, journalpostId: String, - pleietrengende: String + pleietrengende: String, ): OpprettNySøknad { return OpprettNySøknad( norskIdent = personnummer, @@ -183,7 +152,7 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -193,37 +162,30 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - pleietrengende: String + pleietrengende: String, ): OmsorgspengerAleneOmsorgSøknadDto { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid, pleietrengende) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) + .exchange() + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(OmsorgspengerAleneOmsorgSøknadDto::class.java) + .responseHeaders.location leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val omsorgspengerAleneOmsorgSøknadDto = oppdaterSøknad(soeknadJson) + + Assertions.assertNotNull(omsorgspengerAleneOmsorgSøknadDto) + Assertions.assertNotNull(omsorgspengerAleneOmsorgSøknadDto!!.soekerId) - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) - return søknadDtoFyltUt + return omsorgspengerAleneOmsorgSøknadDto } private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, location: URI?) { @@ -237,63 +199,59 @@ internal class OmsorgspengerAleneOmsorgRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - pleietrengende: String - ): OasSoknadsfeil { + pleietrengende: String, + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid, pleietrengende) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: OmsorgspengerAleneOmsorgSøknadDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) + Assertions.assertNotNull(søknadDtoFyltUt) + Assertions.assertNotNull(søknadDtoFyltUt!!.soekerId) val søknadId = søknadDtoFyltUt.soeknadId val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) - val journalposter = søknadDtoFyltUt.journalposter!! val kanSendeInn = journalpostRepository.kanSendeInn(journalposter) org.assertj.core.api.Assertions.assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - return body + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(sendSøknad)) + .exchange() + .expectStatus().isAccepted } + private fun opprettNySøknad(innsendingForOpprettelseAvMappe: OpprettNySøknad) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) + .exchange() + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(OmsorgspengerAleneOmsorgSøknadDto::class.java) + .responseHeaders.location + + private fun oppdaterSøknad(soeknadJson: SøknadJson) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header("Authorization", "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}") + .body(BodyInserters.fromValue(soeknadJson)) + .exchange() + .expectStatus().isOk + .expectBody(OmsorgspengerAleneOmsorgSøknadDto::class.java) + .returnResult().responseBody + private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } diff --git a/src/test/kotlin/no/nav/k9punsj/omsorgspengerkronisksyktbarn/OmsorgspengerKroniskSyktBarnRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/omsorgspengerkronisksyktbarn/OmsorgspengerKroniskSyktBarnRoutesTest.kt index 775a45436..ad9c4a557 100644 --- a/src/test/kotlin/no/nav/k9punsj/omsorgspengerkronisksyktbarn/OmsorgspengerKroniskSyktBarnRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/omsorgspengerkronisksyktbarn/OmsorgspengerKroniskSyktBarnRoutesTest.kt @@ -1,64 +1,51 @@ package no.nav.k9punsj.omsorgspengerkronisksyktbarn import com.fasterxml.jackson.module.kotlin.readValue -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9.søknad.Søknad +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.dto.OpprettNySøknad import no.nav.k9punsj.felles.dto.SendSøknad +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId -import no.nav.k9punsj.util.WebClientUtils.awaitStatusWithBody -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert import no.nav.k9punsj.utils.objectMapper -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -class OmsorgspengerKroniskSyktBarnRoutesTest { +class OmsorgspengerKroniskSyktBarnRoutesTest : AbstractContainerBaseTest() { - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "omsorgspenger-kronisk-sykt-barn-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { - val responsebody = client.getAndAssert( - norskIdent = "01110050053", - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - Assertions.assertTrue(responsebody.søknader!!.isEmpty()) + val norskIdent = "01110050053" + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody() + .jsonPath("$.søknader").isEmpty } @Test @@ -67,15 +54,10 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val pleietrengendeIdent = "02020050163" val opprettNySøknad = opprettSøknad(norskIdent, pleietrengendeIdent, UUID.randomUUID().toString()) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) + opprettNySøknad(opprettNySøknad) } + @Test fun `Hente eksisterende mappe på person`(): Unit = runBlocking { val norskIdent = "02020050163" @@ -83,25 +65,14 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val journalpostId = UUID.randomUUID().toString() val opprettNySøknad = opprettSøknad(norskIdent, pleietrengendeIdent, journalpostId) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val responsebody = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - - val journalposterDto = responsebody.søknader?.first()?.journalposter - Assertions.assertEquals(journalpostId, journalposterDto?.first()) + opprettNySøknad(opprettNySøknad) + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarOmsKSBDto::class.java) + .consumeWith { + val journalposterDto = it.responseBody?.søknader?.first()?.journalposter + Assertions.assertEquals(journalpostId, journalposterDto?.first()) + } } @Test @@ -114,29 +85,15 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, pleietrengendeIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) - - val res = client.getAndAssert( - norskIdent = "", - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - hentSøknadId(location)!! - ) + val location = opprettNySøknad(opprettNySøknad) - Assertions.assertNotNull(res) - Assertions.assertEquals(journalpostid, res.journalposter?.first()) + hentMappe(hentSøknadId(location)!!, "") + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .consumeWith { + val faktiskJournalpostId = it.responseBody?.journalposter?.first() + Assertions.assertEquals(journalpostid, faktiskJournalpostId) + } } @Test @@ -149,31 +106,17 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, pleietrengendeIdent, journalpostid) - val nySøknadRespons = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = nySøknadRespons.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) leggerPåNySøknadId(søknadFraFrontend, location) - val body = client.putAndAssert, OmsorgspengerKroniskSyktBarnSøknadDto>( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(søknadFraFrontend), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) + oppdaterSøknad(norskIdent, søknadFraFrontend) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .consumeWith { + Assertions.assertNotNull(it.responseBody) + Assertions.assertEquals(norskIdent, it.responseBody!!.soekerId) + } } @Test @@ -186,44 +129,25 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, pleietrengendeIdent, journalpostid) - val nySøknadRespons = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = nySøknadRespons.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) leggerPåNySøknadId(søknadFraFrontend, location) - val body = client.putAndAssert, OmsorgspengerKroniskSyktBarnSøknadDto>( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(søknadFraFrontend), - api, - søknadTypeUri, - "oppdater" - ) + val omsorgspengerKroniskSyktBarnSøknadDto = oppdaterSøknad(norskIdent, søknadFraFrontend) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - hentSøknadId(location)!! - ) + Assertions.assertNotNull(omsorgspengerKroniskSyktBarnSøknadDto) + Assertions.assertEquals(norskIdent, omsorgspengerKroniskSyktBarnSøknadDto.soekerId) - Assertions.assertNotNull(søknadViaGet) - assertThat(body.metadata).isEqualTo(søknadViaGet.metadata) + hentMappe(omsorgspengerKroniskSyktBarnSøknadDto.soeknadId, norskIdent) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .consumeWith { + Assertions.assertNotNull(it.responseBody) + assertThat(omsorgspengerKroniskSyktBarnSøknadDto.metadata).isEqualTo(it.responseBody!!.metadata) + } } @Test @@ -233,8 +157,7 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -247,15 +170,12 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, pleietrengendeIdent, journalpostid) - val (status, body) = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknad)) - .awaitStatusWithBody() - - assertThat(body.feil).isNull() - - Assertions.assertEquals(HttpStatus.ACCEPTED, status) + validerSøknad(soeknad) + .expectStatus().isEqualTo(HttpStatus.ACCEPTED) + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + assertThat(it.responseBody?.feil).isNull() + } } @Test @@ -267,19 +187,14 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, pleietrengendeIdent) - val søknad = client.getAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - oppdatertSoeknadDto.soeknadId - ) - - Assertions.assertNotNull(søknad) - assertThat(søknad.harInfoSomIkkeKanPunsjes).isEqualTo(true) - assertThat(søknad.harMedisinskeOpplysninger).isEqualTo(true) + hentMappe(oppdatertSoeknadDto.soeknadId, norskIdent) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .consumeWith { + Assertions.assertNotNull(it.responseBody) + assertThat(it.responseBody!!.harInfoSomIkkeKanPunsjes).isEqualTo(true) + assertThat(it.responseBody!!.harMedisinskeOpplysninger).isEqualTo(true) + } } @Test @@ -309,31 +224,16 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { tilpasserSøknadsMalTilTesten(soeknadJson, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknadJson, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil?.isEmpty()) + validerSøknad(soeknadJson) + .expectStatus().isEqualTo(HttpStatus.ACCEPTED) + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + assertThat(it.responseBody?.feil).isNull() + } val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = soeknadJson["soeknadId"] as String) - val resultat = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - assertThat(resultat.feil?.isEmpty()) + sendInnSøknad(sendSøknad) } @Test @@ -344,17 +244,16 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.BAD_REQUEST, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil?.get(0)?.felt).isEqualTo("ytelse.barn") + val body = validerSøknad(soeknad) + .expectStatus().isEqualTo(HttpStatus.BAD_REQUEST) + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + val oasSoknadsfeil = it.responseBody + Assertions.assertNotNull(oasSoknadsfeil) + assertThat(oasSoknadsfeil!!.feil).isNotNull + assertThat(oasSoknadsfeil.feil?.size).isEqualTo(1) + assertThat(oasSoknadsfeil.feil?.get(0)?.felt).isEqualTo("ytelse.barn") + } } private fun opprettSøknad(personnummer: String, pleietrengendeIdent: String, journalpostId: String) = @@ -393,34 +292,19 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { ident: String, pleietrengendeIdent: String, journalpostid: String = IdGenerator.nesteId(), - ): OasSoknadsfeil { + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, pleietrengendeIdent, journalpostid) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: OmsorgspengerKroniskSyktBarnSøknadDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(ident, soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) @@ -433,17 +317,7 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - return body + sendInnSøknad(sendSøknad) } private suspend fun opprettOgLagreSoeknad( @@ -455,31 +329,65 @@ class OmsorgspengerKroniskSyktBarnRoutesTest { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, pleietrengendeIdent, journalpostid) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(ident, soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) return søknadDtoFyltUt } + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun hentMappe(søknadId: String, norskIdent: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/$søknadId").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun opprettNySøknad(opprettNySøknad: OpprettNySøknad): URI = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(opprettNySøknad)) + .exchange() + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(OmsorgspengerKroniskSyktBarnSøknadDto::class.java) + .responseHeaders.location!! + + private fun oppdaterSøknad( + norskIdent: String, + søknadFraFrontend: SøknadJson, + ) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .body(BodyInserters.fromValue(søknadFraFrontend)) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(soeknad)) + .exchange() + + private fun sendInnSøknad(sendSøknad: SendSøknad) { + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(sendSøknad)) + .exchange() + .expectStatus().isAccepted + .expectBody(Søknad::class.java) + } } diff --git a/src/test/kotlin/no/nav/k9punsj/omsorgspengermidlertidigalene/OmsorgspengerMidlertidigAleneRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/omsorgspengermidlertidigalene/OmsorgspengerMidlertidigAleneRoutesTest.kt index ed2786d23..d068ba68a 100644 --- a/src/test/kotlin/no/nav/k9punsj/omsorgspengermidlertidigalene/OmsorgspengerMidlertidigAleneRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/omsorgspengermidlertidigalene/OmsorgspengerMidlertidigAleneRoutesTest.kt @@ -1,63 +1,46 @@ package no.nav.k9punsj.omsorgspengermidlertidigalene -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure import no.nav.k9.søknad.Søknad import no.nav.k9.søknad.ytelse.omsorgspenger.utvidetrett.v1.OmsorgspengerMidlertidigAlene -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.dto.SendSøknad -import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson -import no.nav.k9punsj.util.WebClientUtils.awaitBodyWithType -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpHeaders -import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension -import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class OmsorgspengerMidlertidigAleneRoutesTest { - private val client = TestSetup.client +internal class OmsorgspengerMidlertidigAleneRoutesTest : AbstractContainerBaseTest() { private val api = "api" private val søknadTypeUri = "omsorgspenger-midlertidig-alene-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - Assertions.assertTrue(body.søknader!!.isEmpty()) + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarOmsMADto::class.java) + .consumeWith { Assertions.assertTrue(it.responseBody!!.søknader!!.isEmpty()) } } @Test @@ -68,19 +51,21 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { personnummer = norskIdent, journalpostId = UUID.randomUUID().toString(), annenPart = null, - barn = listOf(OmsorgspengerMidlertidigAleneSøknadDto.BarnDto(norskIdent = pleietrengende, foedselsdato = null)) - ) - - val response: OmsorgspengerMidlertidigAleneSøknadDto = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri + barn = listOf( + OmsorgspengerMidlertidigAleneSøknadDto.BarnDto( + norskIdent = pleietrengende, + foedselsdato = null + ) + ) ) - assertThat(response.barn).size().isOne + opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.barn).size().isOne + assertThat(it.responseBody!!.barn.first().norskIdent).isEqualTo(pleietrengende) + } } @Test @@ -94,19 +79,15 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { soeknadJson = soeknad, ident = norskIdent, journalpostid = journalpostid, - barn = listOf(OmsorgspengerMidlertidigAleneSøknadDto.BarnDto(norskIdent = pleietrengende, foedselsdato = null)) + barn = listOf( + OmsorgspengerMidlertidigAleneSøknadDto.BarnDto( + norskIdent = pleietrengende, + foedselsdato = null + ) + ) ) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - assertThat(body.feil).isNull() + validerSøknad(soeknad).expectStatus().isAccepted } @Test @@ -117,7 +98,8 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body: Søknad = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) + val body: Søknad = + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) val ytelse = body.getYtelse() assertThat(ytelse.barn).size().isEqualTo(2) assertThat(ytelse.annenForelder).isNotNull @@ -136,16 +118,21 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostid, - barn = listOf(OmsorgspengerMidlertidigAleneSøknadDto.BarnDto(norskIdent = pleietrengende, foedselsdato = null)) + barn = listOf( + OmsorgspengerMidlertidigAleneSøknadDto.BarnDto( + norskIdent = pleietrengende, + foedselsdato = null + ) + ) ) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", søknad.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertThat(søknadViaGet.annenForelder?.norskIdent).isEqualTo("44444444444") - assertThat(søknadViaGet.barn.size).isEqualTo(2) + hentMappeGittSøknadId(søknad.soeknadId) + .expectStatus().isOk + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.annenForelder?.norskIdent).isEqualTo("44444444444") + assertThat(it.responseBody!!.barn.size).isEqualTo(2) + } } @Test @@ -167,30 +154,18 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { ) ) - val body = client.putAndAssert, OmsorgspengerMidlertidigAleneSøknadDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "oppdater" - ) + val body = oppdaterSøknad(soeknad) + .expectStatus().isOk + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseBody!! - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - soeknad["soeknadId"] as String - ) + assertThat(body.soekerId).isEqualTo(norskIdent) + + val søknadViaGet = hentMappeGittSøknadId(soeknad["soeknadId"] as String) + .expectStatus().isOk + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseBody!! - Assertions.assertNotNull(søknadViaGet) assertThat(body.metadata).isEqualTo(søknadViaGet.metadata) } @@ -198,7 +173,7 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { personnummer: String, journalpostId: String, annenPart: String? = null, - barn: List + barn: List, ): NyOmsMASøknad { return NyOmsMASøknad( norskIdent = personnummer, @@ -211,7 +186,7 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -221,7 +196,7 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - barn: List + barn: List, ): OmsorgspengerMidlertidigAleneSøknadDto { val innsendingForOpprettelseAvMappe = NyOmsMASøknad( norskIdent = ident, @@ -230,29 +205,19 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { ) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseHeaders.location leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) return søknadDtoFyltUt @@ -269,68 +234,93 @@ internal class OmsorgspengerMidlertidigAleneRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - pleietrengende: String + pleietrengende: String, ): Søknad { val innsendingForOpprettelseAvMappe = opprettSøknad( personnummer = ident, journalpostId = journalpostid, - barn = listOf(OmsorgspengerMidlertidigAleneSøknadDto.BarnDto(norskIdent = pleietrengende, foedselsdato = null)) + barn = listOf( + OmsorgspengerMidlertidigAleneSøknadDto.BarnDto( + norskIdent = pleietrengende, + foedselsdato = null + ) + ) ) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseHeaders.location leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: OmsorgspengerMidlertidigAleneSøknadDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt: OmsorgspengerMidlertidigAleneSøknadDto = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerMidlertidigAleneSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) val søknadId = søknadDtoFyltUt.soeknadId val sendSøknad = lagSendSøknad(norskIdent = ident, søknadId = søknadId) - val journalposter = søknadDtoFyltUt.journalposter!! val kanSendeInn = journalpostRepository.kanSendeInn(journalposter) - org.assertj.core.api.Assertions.assertThat(kanSendeInn).isTrue + assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) + val søknad = sendSøknad(sendSøknad) + .expectStatus().isAccepted + .expectBody(Søknad::class.java) + .returnResult().responseBody!! - return body + return søknad } private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun opprettNySøknad(opprettNySøknad: NyOmsMASøknad) = + webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(opprettNySøknad) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun hentMappeGittSøknadId(søknadId: String) = + webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/${søknadId}").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .exchange() + + private fun oppdaterSøknad(soeknad: SøknadJson) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun sendSøknad(sendSøknad: SendSøknad) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(sendSøknad) + .exchange() } diff --git a/src/test/kotlin/no/nav/k9punsj/omsorgspengerutbetaling/OmsorgspengerutbetalingRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/omsorgspengerutbetaling/OmsorgspengerutbetalingRoutesTest.kt index 5afa95f7e..f96a307f0 100644 --- a/src/test/kotlin/no/nav/k9punsj/omsorgspengerutbetaling/OmsorgspengerutbetalingRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/omsorgspengerutbetaling/OmsorgspengerutbetalingRoutesTest.kt @@ -1,32 +1,25 @@ package no.nav.k9punsj.omsorgspengerutbetaling -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9.søknad.Søknad +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.IdentOgJournalpost import no.nav.k9punsj.felles.dto.ArbeidsgiverMedArbeidsforholdId import no.nav.k9punsj.felles.dto.MatchFagsakMedPeriode import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SendSøknad +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.time.LocalDate @@ -34,33 +27,27 @@ import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -class OmsorgspengerutbetalingRoutesTest { +class OmsorgspengerutbetalingRoutesTest : AbstractContainerBaseTest() { - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "omsorgspengerutbetaling-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - - Assertions.assertTrue(body.søknader!!.isEmpty()) + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarOmsUtDto::class.java) + .consumeWith { assertThat(it.responseBody!!.søknader).isEmpty() } } @Test @@ -68,13 +55,7 @@ class OmsorgspengerutbetalingRoutesTest { val norskIdent = "01010050053" val opprettNySøknad = opprettSøknad(norskIdent, UUID.randomUUID().toString()) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) + opprettNySøknad(opprettNySøknad).expectStatus().isCreated } @Test @@ -83,22 +64,12 @@ class OmsorgspengerutbetalingRoutesTest { val journalpostId = UUID.randomUUID().toString() val opprettNySøknad = opprettSøknad(norskIdent, journalpostId) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) + opprettNySøknad(opprettNySøknad).expectStatus().isCreated + + val body = hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarOmsUtDto::class.java) + .returnResult().responseBody!! val journalposterDto = body.søknader?.first()?.journalposter Assertions.assertEquals(journalpostId, journalposterDto?.first()) @@ -113,29 +84,18 @@ class OmsorgspengerutbetalingRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - hentSøknadId(location)!! - ) - - Assertions.assertNotNull(søknadViaGet) - Assertions.assertEquals(journalpostid, søknadViaGet.journalposter?.first()) + val location = opprettNySøknad(opprettNySøknad).expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(IdentOgJournalpost::class.java) + .responseHeaders.location!! + + hentMappeGittSøknadId(location, norskIdent) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.soekerId).isEqualTo(norskIdent) + assertThat(it.responseBody!!.journalposter).containsExactly(journalpostid) + } } @Test @@ -147,31 +107,20 @@ class OmsorgspengerutbetalingRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(IdentOgJournalpost::class.java) + .responseHeaders.location!! leggerPåNySøknadId(søknadFraFrontend, location) - val body = client.putAndAssert, OmsorgspengerutbetalingSøknadDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(søknadFraFrontend), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) + oppdaterSøknad(søknadFraFrontend) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.soekerId).isEqualTo(norskIdent) + } } @Test @@ -183,41 +132,26 @@ class OmsorgspengerutbetalingRoutesTest { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(IdentOgJournalpost::class.java) + .responseHeaders.location!! leggerPåNySøknadId(søknadFraFrontend, location) - val body = client.putAndAssert, OmsorgspengerutbetalingSøknadDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(søknadFraFrontend), - api, - søknadTypeUri, - "oppdater" - ) + val body = oppdaterSøknad(søknadFraFrontend) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(body) Assertions.assertEquals(norskIdent, body.soekerId) - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - hentSøknadId(location)!! - ) + val søknadViaGet = hentMappeGittSøknadId(location, norskIdent) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadViaGet) assertThat(body.metadata).isEqualTo(søknadViaGet.metadata) @@ -230,8 +164,7 @@ class OmsorgspengerutbetalingRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -242,8 +175,8 @@ class OmsorgspengerutbetalingRoutesTest { val journalpostid = abs(Random(2234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) + assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -255,21 +188,12 @@ class OmsorgspengerutbetalingRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil).isNull() + validerSøknad(soeknad).expectStatus().isAccepted + } @Test - fun `Korrigering OMP UT med fraværsperioder fra tidiger år validerer riktigt år`() = runBlocking { + fun `Korrigering OMP UT med fraværsperioder fra tidiger år validerer riktigt år`(): Unit = runBlocking { // 03011939596 på OMS har två perioder i k9sak fra december 2022. // OmsUtKorrigering fjerner første perioden i 2022. val norskIdent = "03011939596" @@ -278,17 +202,7 @@ class OmsorgspengerutbetalingRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil).isNull() + validerSøknad(soeknad).expectStatus().isAccepted } @Test @@ -299,17 +213,12 @@ class OmsorgspengerutbetalingRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.BAD_REQUEST, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - - assertThat(body.feil?.get(0)?.feilkode).isEqualTo("mottattDato") + validerSøknad(soeknad) + .expectStatus().isBadRequest + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + assertThat(it.responseBody!!.feil?.get(0)?.feilkode).isEqualTo("mottattDato") + } } @Test @@ -319,8 +228,7 @@ class OmsorgspengerutbetalingRoutesTest { val journalpostid = abs(Random(2256234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } @@ -333,24 +241,17 @@ class OmsorgspengerutbetalingRoutesTest { PeriodeDto(LocalDate.now(), LocalDate.now().plusDays(1)) ) - val oppdatertSoeknadDto = - client.postAndAssertAwaitWithStatusAndBody>( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(dtoSpørring), - api, - søknadTypeUri, - "k9sak", - "arbeidsforholdIder" - ) - - Assertions.assertEquals("randomArbeidsforholdId", oppdatertSoeknadDto[0].arbeidsforholdId[0]) + hentArbeidsForholdIderFraK9Sak(dtoSpørring) + .expectStatus().isOk + .expectBodyList(ArbeidsgiverMedArbeidsforholdId::class.java) + .consumeWith> { + assertThat(it.responseBody!![0].arbeidsforholdId[0]).isEqualTo("randomArbeidsforholdId") + } } private fun opprettSøknad( personnummer: String, - journalpostId: String + journalpostId: String, ): IdentOgJournalpost { return IdentOgJournalpost(personnummer, journalpostId) } @@ -358,7 +259,7 @@ class OmsorgspengerutbetalingRoutesTest { private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -373,7 +274,7 @@ class OmsorgspengerutbetalingRoutesTest { private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } @@ -381,35 +282,24 @@ class OmsorgspengerutbetalingRoutesTest { private suspend fun opprettOgSendInnSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() - ): OasSoknadsfeil { + journalpostid: String = IdGenerator.nesteId(), + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(IdentOgJournalpost::class.java) + .responseHeaders.location!! leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: OmsorgspengerutbetalingSøknadDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) @@ -422,52 +312,79 @@ class OmsorgspengerutbetalingRoutesTest { assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - return body + webTestClient.post() + .uri("/$api/$søknadTypeUri/send") + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(sendSøknad) + .exchange() + .expectStatus().isAccepted + .expectBody(Søknad::class.java) + .consumeWith { + assertThat(it.responseBody!!.søknadId.id).isEqualTo(søknadId) + } } private suspend fun opprettOgLagreSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() - ): OmsorgspengerutbetalingSøknadDto { + journalpostid: String = IdGenerator.nesteId(), + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .returnResult(IdentOgJournalpost::class.java) + .responseHeaders.location!! leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) - return søknadDtoFyltUt + oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(OmsorgspengerutbetalingSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.soekerId).isEqualTo(ident) + } } + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri("/$api/$søknadTypeUri/mappe") + .header("Authorization", saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun opprettNySøknad(opprettNySøknad: IdentOgJournalpost) = webTestClient.post() + .uri("/$api/$søknadTypeUri") + .header("Authorization", saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(opprettNySøknad)) + .exchange() + + private fun hentMappeGittSøknadId( + location: URI, + norskIdent: String, + ) = webTestClient.get() + .uri("/$api/$søknadTypeUri/mappe/${hentSøknadId(location)}") + .header("Authorization", saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun oppdaterSøknad(søknadFraFrontend: SøknadJson) = webTestClient.put() + .uri("/$api/$søknadTypeUri/oppdater") + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(søknadFraFrontend) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri("/$api/$søknadTypeUri/valider") + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun hentArbeidsForholdIderFraK9Sak(dtoSpørring: MatchFagsakMedPeriode) = webTestClient.post() + .uri("/$api/$søknadTypeUri/k9sak/arbeidsforholdIder") + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(dtoSpørring) + .exchange() } diff --git a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt index 02d5b1362..ef1939929 100644 --- a/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/opplaeringspenger/OpplaeringspengerTests.kt @@ -14,7 +14,7 @@ import no.nav.k9punsj.felles.dto.SendSøknad import no.nav.k9punsj.utils.objectMapper import no.nav.k9punsj.openapi.OasFeil import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.util.DbContainerInitializer import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson @@ -38,6 +38,7 @@ import java.net.URI import java.time.Duration import java.time.LocalDate +/* @ExtendWith(SpringExtension::class, MockKExtension::class) @Disabled("OLP er ikke i bruk eller under utvikling") class OpplaeringspengerTests { @@ -261,7 +262,7 @@ class OpplaeringspengerTests { assertThat(body.feil).isNull() assertEquals(HttpStatus.ACCEPTED, status) - assertThat(DatabaseUtil.getJournalpostRepo().kanSendeInn(listOf("99998888"))).isFalse + assertThat(DbContainerInitializer.getJournalpostRepo().kanSendeInn(listOf("99998888"))).isFalse } @Test @@ -276,7 +277,7 @@ class OpplaeringspengerTests { assertThat(body.feil).isNull() assertEquals(HttpStatus.ACCEPTED, status) - assertThat(DatabaseUtil.getJournalpostRepo().kanSendeInn(listOf(journalpostId))).isFalse + assertThat(DbContainerInitializer.getJournalpostRepo().kanSendeInn(listOf(journalpostId))).isFalse val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) val (httpstatus, body2) = client.post() @@ -578,7 +579,7 @@ class OpplaeringspengerTests { val journalposter = søknadDtoFyltUt.journalposter!! - val kanSendeInn = DatabaseUtil.getJournalpostRepo().kanSendeInn(journalposter) + val kanSendeInn = DbContainerInitializer.getJournalpostRepo().kanSendeInn(journalposter) assertThat(kanSendeInn).isTrue // sender en søknad @@ -671,3 +672,4 @@ private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, l val trim = søknadId?.trim('/') søknadFraFrontend.replace("soeknadId", trim) } +*/ \ No newline at end of file diff --git a/src/test/kotlin/no/nav/k9punsj/person/BarnApiTest.kt b/src/test/kotlin/no/nav/k9punsj/person/BarnApiTest.kt index 62fb5d0fe..0105df999 100644 --- a/src/test/kotlin/no/nav/k9punsj/person/BarnApiTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/person/BarnApiTest.kt @@ -2,6 +2,7 @@ package no.nav.k9punsj.person import kotlinx.coroutines.runBlocking import no.nav.helse.dusseldorf.testsupport.jws.Azure +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.TestSetup import no.nav.k9punsj.util.WebClientUtils.awaitBodyWithType import no.nav.k9punsj.wiremock.saksbehandlerAccessToken @@ -12,10 +13,7 @@ import org.skyscreamer.jsonassert.JSONAssert import org.springframework.http.HttpHeaders import org.springframework.test.context.junit.jupiter.SpringExtension -@ExtendWith(SpringExtension::class) -class BarnApiTest { - - private val client = TestSetup.client +class BarnApiTest : AbstractContainerBaseTest() { private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" @Test @@ -27,8 +25,13 @@ class BarnApiTest { } """.trimIndent() - val hentBarnJson = hentBarnJson("01110050053") - JSONAssert.assertEquals(forventet, hentBarnJson, true) + webTestClient.get() + .uri { it.pathSegment("api", "barn").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", "01110050053") + .exchange() + .expectStatus().isOk + .expectBody().json(forventet) } @Test @@ -54,15 +57,12 @@ class BarnApiTest { } """.trimIndent() - val hentBarnJson = hentBarnJson("66666666666") - JSONAssert.assertEquals(forventet, hentBarnJson, true) - } - - private suspend fun hentBarnJson(identitetsnummer: String): String { - return client.get() + webTestClient.get() .uri { it.pathSegment("api", "barn").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", identitetsnummer) - .awaitBodyWithType() + .header("X-Nav-NorskIdent", "66666666666") + .exchange() + .expectStatus().isOk + .expectBody().json(forventet) } } diff --git a/src/test/kotlin/no/nav/k9punsj/person/PersonApiTest.kt b/src/test/kotlin/no/nav/k9punsj/person/PersonApiTest.kt index 705542687..2870f035e 100644 --- a/src/test/kotlin/no/nav/k9punsj/person/PersonApiTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/person/PersonApiTest.kt @@ -1,25 +1,14 @@ package no.nav.k9punsj.person -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup -import no.nav.k9punsj.util.WebClientUtils.awaitExchangeBlocking -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import no.nav.k9punsj.AbstractContainerBaseTest import org.intellij.lang.annotations.Language import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.skyscreamer.jsonassert.JSONAssert import org.springframework.http.HttpHeaders -import org.springframework.test.context.junit.jupiter.SpringExtension -import org.springframework.web.reactive.function.client.awaitBody -@ExtendWith(SpringExtension::class) -class PersonApiTest { - - private val client = TestSetup.client - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" +class PersonApiTest: AbstractContainerBaseTest() { @Test - suspend fun `Hente person`() { + fun `Hente person`() { val identitetsnummer = "66666666666" @Language("JSON") @@ -34,13 +23,13 @@ class PersonApiTest { } """.trimIndent() - val body = client.get() - .uri { it.pathSegment("api", "person").build() } + webTestClient.get() + .uri { it.path("/api/person").build() } .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) .header("X-Nav-NorskIdent", identitetsnummer) - .awaitExchangeBlocking() - .awaitBody() - - JSONAssert.assertEquals(forventet, body, true) + .exchange() + .expectStatus().isOk + .expectBody() + .json(forventet) } } diff --git a/src/test/kotlin/no/nav/k9punsj/pleiepengerlivetssluttfase/PleiepengerLivetsSluttfaseRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/pleiepengerlivetssluttfase/PleiepengerLivetsSluttfaseRoutesTest.kt index 9f1628efb..4c99411b0 100644 --- a/src/test/kotlin/no/nav/k9punsj/pleiepengerlivetssluttfase/PleiepengerLivetsSluttfaseRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/pleiepengerlivetssluttfase/PleiepengerLivetsSluttfaseRoutesTest.kt @@ -1,60 +1,49 @@ package no.nav.k9punsj.pleiepengerlivetssluttfase -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure -import no.nav.k9punsj.TestSetup +import no.nav.k9.søknad.Søknad +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.dto.OpprettNySøknad import no.nav.k9punsj.felles.dto.SendSøknad -import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson -import no.nav.k9punsj.util.WebClientUtils.getAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssert -import no.nav.k9punsj.util.WebClientUtils.postAndAssertAwaitWithStatusAndBody -import no.nav.k9punsj.util.WebClientUtils.putAndAssert -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.http.HttpStatus -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.util.* import kotlin.math.abs import kotlin.random.Random -@ExtendWith(SpringExtension::class, MockKExtension::class) -class PleiepengerLivetsSluttfaseRoutesTest { +class PleiepengerLivetsSluttfaseRoutesTest : AbstractContainerBaseTest() { - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "pleiepenger-livets-sluttfase-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" - private val journalpostRepository = DatabaseUtil.getJournalpostRepo() + + @Autowired + lateinit var journalpostRepository: JournalpostRepository @AfterEach internal fun tearDown() { - DatabaseUtil.cleanDB() + cleanUpDB() } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val body = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe" - ) - Assertions.assertTrue(body.søknader!!.isEmpty()) + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarPlsDto::class.java) + .consumeWith { + val body = it.responseBody!! + assertThat(body.søknader!!).isEmpty() + } } @Test @@ -63,13 +52,7 @@ class PleiepengerLivetsSluttfaseRoutesTest { val pleietrengende = "01010050023" val opprettNySøknad = opprettSøknad(norskIdent, UUID.randomUUID().toString(), pleietrengende) - client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(opprettNySøknad), - api, - søknadTypeUri - ) + opprettNySøknad(opprettNySøknad).expectStatus().isCreated } @Test @@ -81,16 +64,7 @@ class PleiepengerLivetsSluttfaseRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid, pleietrengende) - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "valider" - ) - assertThat(body.feil).isNull() + validerSøknad(soeknad).expectStatus().isAccepted } @Test @@ -102,31 +76,17 @@ class PleiepengerLivetsSluttfaseRoutesTest { tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostid) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostid, pleietrengende) - val body = client.putAndAssert, PleiepengerLivetsSluttfaseSøknadDto>( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknad), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(body) - Assertions.assertEquals(norskIdent, body.soekerId) - - val søknadViaGet = client.getAndAssert( - norskIdent = norskIdent, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - api, - søknadTypeUri, - "mappe", - soeknad["soeknadId"] as String - ) - - Assertions.assertNotNull(søknadViaGet) - assertThat(body.metadata).isEqualTo(søknadViaGet.metadata) + val body = oppdaterSøknad(soeknad) + .expectStatus().isOk + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .returnResult().responseBody!! + + hentMappeGittSøknadId(soeknad, norskIdent) + .expectStatus().isOk + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .consumeWith { + assertThat(body.metadata).isEqualTo(it.responseBody!!.metadata) + } } @Test @@ -137,15 +97,14 @@ class PleiepengerLivetsSluttfaseRoutesTest { val journalpostid = abs(Random(56234).nextInt()).toString() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostid) - val body = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) - assertThat(body.feil).isNull() + opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid, pleietrengende) assertThat(journalpostRepository.kanSendeInn(listOf(journalpostid))).isFalse } private fun opprettSøknad( personnummer: String, journalpostId: String, - pleietrengende: String + pleietrengende: String, ): OpprettNySøknad { return OpprettNySøknad( personnummer, @@ -158,7 +117,7 @@ class PleiepengerLivetsSluttfaseRoutesTest { private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) @@ -168,37 +127,26 @@ class PleiepengerLivetsSluttfaseRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - pleietrengende: String - ): PleiepengerLivetsSluttfaseSøknadDto { + pleietrengende: String, + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid, pleietrengende) // oppretter en søknad - val resPost = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = resPost.headers().asHttpHeaders().location - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .returnResult().responseHeaders.location leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) - - Assertions.assertNotNull(søknadDtoFyltUt.soekerId) - return søknadDtoFyltUt + oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.soekerId).isEqualTo(ident) + } } private fun leggerPåNySøknadId(søknadFraFrontend: MutableMap, location: URI?) { @@ -212,35 +160,24 @@ class PleiepengerLivetsSluttfaseRoutesTest { soeknadJson: SøknadJson, ident: String, journalpostid: String = IdGenerator.nesteId(), - pleietrengende: String - ): OasSoknadsfeil { + pleietrengende: String, + ) { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid, pleietrengende) // oppretter en søknad - val response = client.postAndAssert( - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.CREATED, - requestBody = BodyInserters.fromValue(innsendingForOpprettelseAvMappe), - api, - søknadTypeUri - ) - - val location = response.headers().asHttpHeaders().location - Assertions.assertEquals(HttpStatus.CREATED, response.statusCode()) - Assertions.assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .returnResult().responseHeaders.location leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt: PleiepengerLivetsSluttfaseSøknadDto = client.putAndAssert( - norskIdent = null, - authorizationHeader = saksbehandlerAuthorizationHeader, - assertStatus = HttpStatus.OK, - requestBody = BodyInserters.fromValue(soeknadJson), - api, - søknadTypeUri, - "oppdater" - ) + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(PleiepengerLivetsSluttfaseSøknadDto::class.java) + .returnResult().responseBody!! Assertions.assertNotNull(søknadDtoFyltUt.soekerId) @@ -253,23 +190,57 @@ class PleiepengerLivetsSluttfaseRoutesTest { assertThat(kanSendeInn).isTrue // sender en søknad - val body = client.postAndAssertAwaitWithStatusAndBody( - authorizationHeader = saksbehandlerAuthorizationHeader, - navNorskIdentHeader = null, - assertStatus = HttpStatus.ACCEPTED, - requestBody = BodyInserters.fromValue(sendSøknad), - api, - søknadTypeUri, - "send" - ) - - return body + sendInnSøknad(sendSøknad) + .expectStatus().isAccepted + .expectBody(Søknad::class.java) + .consumeWith { + assertThat(it.responseBody!!.søknadId.id).isEqualTo(søknadId) + } } private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri("/$api/$søknadTypeUri/mappe") + .header("Authorization", saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun opprettNySøknad(opprettNySøknad: OpprettNySøknad) = webTestClient.post() + .uri("/$api/$søknadTypeUri") + .header("Authorization", saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(opprettNySøknad)) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun oppdaterSøknad(soeknad: SøknadJson) = webTestClient.put() + .uri("/$api/$søknadTypeUri/oppdater") + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun hentMappeGittSøknadId( + soeknad: SøknadJson, + norskIdent: String, + ) = webTestClient.get() + .uri("/$api/$søknadTypeUri/mappe/${soeknad["soeknadId"]}") + .header("Authorization", saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun sendInnSøknad(sendSøknad: SendSøknad) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .bodyValue(sendSøknad) + .exchange() } diff --git a/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/MappeRepositoryTest.kt b/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/MappeRepositoryTest.kt index 852b307dc..5d19f8106 100644 --- a/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/MappeRepositoryTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/MappeRepositoryTest.kt @@ -1,26 +1,29 @@ package no.nav.k9punsj.pleiepengersyktbarn import kotlinx.coroutines.runBlocking -import no.nav.k9punsj.util.DatabaseUtil +import no.nav.k9punsj.AbstractContainerBaseTest +import no.nav.k9punsj.domenetjenester.repository.MappeRepository +import no.nav.k9punsj.domenetjenester.repository.PersonRepository import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.beans.factory.annotation.Autowired -@ExtendWith(SpringExtension::class) -internal class MappeRepositoryTest { +internal class MappeRepositoryTest: AbstractContainerBaseTest() { + + @Autowired + lateinit var mappeRepository: MappeRepository + + @Autowired + lateinit var personRepository: PersonRepository private val dummyFnr = "11111111111" private val dummyAktørId = "1000000000000" @Test internal fun HentAlleMapperSomInneholderEnNorskIdent(): Unit = runBlocking { - val repository = DatabaseUtil.getMappeRepo() - val personRepo = DatabaseUtil.getPersonRepo() - - val person = personRepo.lagre(norskIdent = dummyFnr, aktørId = dummyAktørId) + val person = personRepository.lagre(norskIdent = dummyFnr, aktørId = dummyAktørId) - val mappe = repository.opprettEllerHentMappeForPerson(personId = person.personId) + val mappe = mappeRepository.opprettEllerHentMappeForPerson(personId = person.personId) assertThat(mappe).isNotNull } } diff --git a/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/PleiepengersyktbarnTests.kt b/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/PleiepengersyktbarnTests.kt index 4d78753ce..c37023eab 100644 --- a/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/PleiepengersyktbarnTests.kt +++ b/src/test/kotlin/no/nav/k9punsj/pleiepengersyktbarn/PleiepengersyktbarnTests.kt @@ -1,73 +1,70 @@ package no.nav.k9punsj.pleiepengersyktbarn import com.fasterxml.jackson.module.kotlin.convertValue -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking -import no.nav.helse.dusseldorf.testsupport.jws.Azure +import no.nav.k9.søknad.Søknad import no.nav.k9.søknad.felles.personopplysninger.Utenlandsopphold import no.nav.k9.søknad.felles.type.Periode import no.nav.k9.søknad.ytelse.psb.v1.Omsorg import no.nav.k9.søknad.ytelse.psb.v1.PleiepengerSyktBarn -import no.nav.k9punsj.TestSetup +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.felles.dto.OpprettNySøknad import no.nav.k9punsj.felles.dto.PeriodeDto import no.nav.k9punsj.felles.dto.SendSøknad -import no.nav.k9punsj.utils.objectMapper +import no.nav.k9punsj.journalpost.JournalpostRepository import no.nav.k9punsj.openapi.OasFeil import no.nav.k9punsj.openapi.OasSoknadsfeil -import no.nav.k9punsj.util.DatabaseUtil import no.nav.k9punsj.util.IdGenerator import no.nav.k9punsj.util.LesFraFilUtil import no.nav.k9punsj.util.SøknadJson import no.nav.k9punsj.util.TestUtils.hentSøknadId -import no.nav.k9punsj.util.WebClientUtils.awaitBodyWithType -import no.nav.k9punsj.util.WebClientUtils.awaitExchangeBlocking -import no.nav.k9punsj.util.WebClientUtils.awaitStatusWithBody -import no.nav.k9punsj.util.WebClientUtils.awaitStatuscode -import no.nav.k9punsj.wiremock.saksbehandlerAccessToken +import no.nav.k9punsj.utils.objectMapper import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.Assertions.* +import org.junit.jupiter.api.AfterEach +import org.junit.jupiter.api.Assertions.assertEquals +import org.junit.jupiter.api.Assertions.assertNotNull import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpHeaders import org.springframework.http.HttpStatus -import org.springframework.http.HttpStatusCode -import org.springframework.test.context.junit.jupiter.SpringExtension +import org.springframework.test.web.reactive.server.EntityExchangeResult +import org.springframework.test.web.reactive.server.WebTestClient import org.springframework.web.reactive.function.BodyInserters import java.net.URI import java.time.Duration import java.time.LocalDate -@ExtendWith(SpringExtension::class, MockKExtension::class) -class PleiepengersyktbarnTests { +class PleiepengersyktbarnTests : AbstractContainerBaseTest() { - private val client = TestSetup.client private val api = "api" private val søknadTypeUri = "pleiepenger-sykt-barn-soknad" - private val saksbehandlerAuthorizationHeader = "Bearer ${Azure.V2_0.saksbehandlerAccessToken()}" + + @Autowired + lateinit var journalpostRepository: JournalpostRepository + + @AfterEach + fun teardown() { + cleanUpDB() + } @Test fun `Får tom liste når personen ikke har en eksisterende mappe`(): Unit = runBlocking { val norskIdent = "01110050053" - val (status, body) = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", norskIdent) - .awaitStatusWithBody() - assertEquals(HttpStatus.OK, status) - assertTrue(body.søknader!!.isEmpty()) + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarPsbDto::class.java) + .consumeWith { + assertThat(it.responseBody!!.søknader!!).isEmpty() + } } @Test fun `Opprette ny mappe på person`(): Unit = runBlocking { val norskIdent = "01010050053" val opprettNySøknad = opprettSøknad(norskIdent, "999") - val status = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitStatuscode() - assertEquals(HttpStatus.CREATED, status) + + opprettNySøknad(opprettNySøknad).expectStatus().isCreated } @Test @@ -75,22 +72,16 @@ class PleiepengersyktbarnTests { val norskIdent = "02020050163" val opprettNySøknad = opprettSøknad(norskIdent, "9999") - val status = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitStatuscode() - assertEquals(HttpStatus.CREATED, status) - - val (httpStatus, body) = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .header("X-Nav-NorskIdent", norskIdent) - .awaitStatusWithBody() - assertEquals(HttpStatus.OK, httpStatus) - - val journalposterDto = body.søknader?.first()?.journalposter - assertEquals("9999", journalposterDto?.first()) + opprettNySøknad(opprettNySøknad).expectStatus().isCreated + + hentMappe(norskIdent) + .expectStatus().isOk + .expectBody(SvarPsbDto::class.java) + .consumeWith { + val søknader = it.responseBody!!.søknader!! + assertThat(søknader).hasSize(1) + assertThat(it.responseBody!!.søknader?.first()?.journalposter?.first()).isEqualTo("9999") + } } @Test @@ -102,20 +93,16 @@ class PleiepengersyktbarnTests { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() + val søknadViaGet = hentMappeGittSøknadId(hentSøknadId(location)!!) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! assertNotNull(søknadViaGet) assertEquals(journalpostid, søknadViaGet.journalposter?.first()) @@ -130,36 +117,30 @@ class PleiepengersyktbarnTests { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! leggerPåNySøknadId(søknadFraFrontend, location) - val (httpstatus, oppdatertSoeknadDto) = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(søknadFraFrontend)) - .awaitStatusWithBody() - - assertNotNull(oppdatertSoeknadDto) - assertEquals(norskIdent, oppdatertSoeknadDto.soekerId) - assertEquals( - listOf( - PeriodeDto( - LocalDate.of(2018, 12, 30), - LocalDate.of(2019, 10, 20) + oppdaterSøknad(søknadFraFrontend) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val body = it.responseBody!! + assertEquals(norskIdent, body.soekerId) + assertEquals( + listOf( + PeriodeDto( + LocalDate.of(2018, 12, 30), + LocalDate.of(2019, 10, 20) + ) + ), + body.soeknadsperiode ) - ), - oppdatertSoeknadDto.soeknadsperiode - ) - assertEquals(HttpStatus.OK, httpstatus) + } } @Test @@ -171,25 +152,19 @@ class PleiepengersyktbarnTests { val opprettNySøknad = opprettSøknad(norskIdent, journalpostid) - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(opprettNySøknad)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = opprettNySøknad(opprettNySøknad) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! leggerPåNySøknadId(søknadFraFrontend, location) - val (httpstatus, oppdatertSoeknadDto) = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(søknadFraFrontend)) - .awaitStatusWithBody() + val oppdatertSoeknadDto = oppdaterSøknad(søknadFraFrontend) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! - assertNotNull(oppdatertSoeknadDto) assertEquals(norskIdent, oppdatertSoeknadDto.soekerId) assertEquals( listOf( @@ -200,31 +175,26 @@ class PleiepengersyktbarnTests { ), oppdatertSoeknadDto.soeknadsperiode ) - assertEquals(HttpStatus.OK, httpstatus) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", hentSøknadId(location)).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(oppdatertSoeknadDto.metadata).isEqualTo(søknadViaGet.metadata) + hentMappeGittSøknadId(hentSøknadId(location)!!) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val body = it.responseBody!! + assertThat(oppdatertSoeknadDto.metadata).isEqualTo(body.metadata) + } } @Test - fun `Innsending av søknad returnerer 404 når mappe ikke finnes`(): Unit = runBlocking { + fun `Innsending av søknad returnerer 400 når mappe ikke finnes`(): Unit = runBlocking { val norskIdent = "12030050163" val søknadId = "d8e2c5a8-b993-4d2d-9cb5-fdb22a653a0c" val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = søknadId) - val status = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatuscode() - - assertEquals(HttpStatus.BAD_REQUEST, status) + sendInnSøknad(sendSøknad) + .expectStatus().isBadRequest + .expectBody(OasSoknadsfeil::class.java) } @Test @@ -250,15 +220,13 @@ class PleiepengersyktbarnTests { val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontend() tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent) - val (_, status, body) = opprettOgSendInnSoeknad( + opprettOgSendInnSoeknad( soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = "99997777" - ) - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) + ).expectStatus().isAccepted - assertThat(DatabaseUtil.getJournalpostRepo().kanSendeInn(listOf("99997777"))).isFalse + assertThat(journalpostRepository.kanSendeInn(listOf("99997777"))).isFalse } @Test @@ -268,22 +236,24 @@ class PleiepengersyktbarnTests { val gyldigSoeknad: SøknadJson = LesFraFilUtil.søknadFraFrontend() val journalpostId = "34234234" tilpasserSøknadsMalTilTesten(gyldigSoeknad, norskIdent, journalpostId) - val (id, status, body) = + + val søknad = opprettOgSendInnSoeknad(soeknadJson = gyldigSoeknad, ident = norskIdent, journalpostid = journalpostId) + .expectStatus().isAccepted + .expectBody(Søknad::class.java) + .returnResult().responseBody!! - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) - assertThat(DatabaseUtil.getJournalpostRepo().kanSendeInn(listOf(journalpostId))).isFalse + assertThat(journalpostRepository.kanSendeInn(listOf(journalpostId))).isFalse - val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = id) - val (httpstatus, body2) = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatusWithBody() + val sendSøknad = lagSendSøknad(norskIdent = norskIdent, søknadId = søknad.søknadId.id) - assertEquals(HttpStatus.CONFLICT, httpstatus) - assertThat(body2.feil).isEqualTo("Innsendingen må inneholde minst en journalpost som kan sendes inn.") + sendInnSøknad(sendSøknad) + .expectStatus().isEqualTo(HttpStatus.CONFLICT) + .expectBody(OasFeil::class.java) + .consumeWith { + val body = it.responseBody!! + assertEquals("Innsendingen må inneholde minst en journalpost som kan sendes inn.", body.feil) + } } @Test @@ -293,10 +263,8 @@ class PleiepengersyktbarnTests { val journalpostId = IdGenerator.nesteId() tilpasserSøknadsMalTilTesten(soeknad, norskIdent, journalpostId) - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) - - assertEquals(HttpStatus.BAD_REQUEST, status) - assertThat(body.feil).isNotEmpty + opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent, journalpostId) + .expectStatus().isBadRequest } @Test @@ -305,10 +273,7 @@ class PleiepengersyktbarnTests { val soeknad: SøknadJson = LesFraFilUtil.tomtLand() tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) - - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) + opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent).expectStatus().isAccepted } @Test @@ -317,10 +282,13 @@ class PleiepengersyktbarnTests { val soeknad: SøknadJson = LesFraFilUtil.tidSøknad() tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) - - assertEquals(HttpStatus.BAD_REQUEST, status) - assertThat(body.feil).isNotEmpty + opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) + .expectStatus().isBadRequest + .expectBody(OasSoknadsfeil::class.java) + .consumeWith { + val body = it.responseBody!! + assertThat(body.feil).isNotEmpty + } } @Test @@ -329,10 +297,7 @@ class PleiepengersyktbarnTests { val soeknad: SøknadJson = LesFraFilUtil.utenUttak() tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) - - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) + opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent).expectStatus().isAccepted } @Test @@ -341,10 +306,7 @@ class PleiepengersyktbarnTests { val soeknad: SøknadJson = LesFraFilUtil.ferieNull() tilpasserSøknadsMalTilTesten(soeknad, norskIdent) - val (_, status, body) = opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent) - - assertThat(body.feil).isNull() - assertEquals(HttpStatus.ACCEPTED, status) + opprettOgSendInnSoeknad(soeknadJson = soeknad, ident = norskIdent).expectStatus().isAccepted } @Test @@ -355,13 +317,15 @@ class PleiepengersyktbarnTests { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertEquals(søknadViaGet.lovbestemtFerie?.get(0)?.fom!!, LocalDate.of(2021, 4, 14)) + hentMappeGittSøknadId(oppdatertSoeknadDto.soeknadId) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val body = it.responseBody!! + assertThat(body.lovbestemtFerie).isNotNull + assertThat(body.lovbestemtFerie).hasSize(1) + assertThat(body.lovbestemtFerie!![0].fom).isEqualTo(LocalDate.of(2021, 4, 14)) + } } @Test @@ -372,28 +336,35 @@ class PleiepengersyktbarnTests { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( - LocalDate.of(2021, 5, 10) - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo("Regskapsfører") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( - false - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo(false) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( - listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") - ) + hentMappeGittSøknadId(oppdatertSoeknadDto.soeknadId) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val søknad = it.responseBody!! + assertThat(søknad.opptjeningAktivitet).isNotNull + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende).isNotNull + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info).isNotNull + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.organisasjonsnummer).isEqualTo("890508087") + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( + LocalDate.of(2021, 5, 10) + ) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.landkode).isEqualTo("") + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerNavn).isEqualTo( + "Regskapsfører" + ) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.regnskapsførerTlf).isEqualTo("88888889") + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.registrertIUtlandet).isEqualTo( + false + ) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.bruttoInntekt).isEqualTo("1200000") + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.erNyoppstartet).isEqualTo( + false + ) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).isEqualTo( + listOf("Fiske", "Jordbruk", "Dagmamma i eget hjem/familiebarnehage", "Annen næringsvirksomhet") + ) + } } @Test @@ -404,14 +375,14 @@ class PleiepengersyktbarnTests { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.harInfoSomIkkeKanPunsjes).isEqualTo(true) - assertThat(søknadViaGet.harMedisinskeOpplysninger).isEqualTo(false) + hentMappeGittSøknadId(oppdatertSoeknadDto.soeknadId) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val søknad = it.responseBody!! + assertThat(søknad.harInfoSomIkkeKanPunsjes).isEqualTo(true) + assertThat(søknad.harMedisinskeOpplysninger).isEqualTo(false) + } } @Test @@ -421,13 +392,7 @@ class PleiepengersyktbarnTests { tilpasserSøknadsMalTilTesten(soeknad, norskIdent) opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val httpStatus = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "valider").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknad)) - .awaitStatuscode() - - assertEquals(HttpStatus.ACCEPTED, httpStatus) + validerSøknad(soeknad).expectStatus().isAccepted } @Test @@ -439,31 +404,22 @@ class PleiepengersyktbarnTests { val søknadId = opprettSoeknad(ident = norskIdent) leggerPåNySøknadId(soeknad, søknadId) - client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknad)) - .awaitExchangeBlocking() + oppdaterSøknad(soeknad).expectStatus().isOk val med2: SøknadJson = LesFraFilUtil.søknadFraFrontendMed2() tilpasserSøknadsMalTilTesten(med2, norskIdent) leggerPåNySøknadId(med2, søknadId) - client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(med2)) - .awaitExchangeBlocking() - - val id = hentSøknadId(søknadId) + oppdaterSøknad(med2).expectStatus().isOk - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", id).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - assertThat(søknadViaGet.journalposter).hasSize(2) - assertThat(søknadViaGet.journalposter).isEqualTo(listOf("9999", "10000")) + hentMappeGittSøknadId(hentSøknadId(søknadId)!!) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { + val body = it.responseBody!! + assertThat(body.journalposter).hasSize(2) + assertThat(body.journalposter).isEqualTo(listOf("9999", "10000")) + } } @Test @@ -474,28 +430,27 @@ class PleiepengersyktbarnTests { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - // GUI format - assertNotNull(søknadViaGet) - - // k9-format, faktisk søknad format - val mapTilEksternFormat = MapPsbTilK9Format( - søknadViaGet.soeknadId, - søknadViaGet.journalposter!!.toSet(), - emptyList(), - søknadViaGet - ) + hentMappeGittSøknadId(oppdatertSoeknadDto.soeknadId) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { response: EntityExchangeResult -> + val søknad = response.responseBody!! + + // k9-format, faktisk søknad format + val mapTilEksternFormat = MapPsbTilK9Format( + søknad.soeknadId, + søknad.journalposter!!.toSet(), + emptyList(), + søknad + ) - assertThat(mapTilEksternFormat.feil()).isEmpty() - val søknad = mapTilEksternFormat.søknad() - val ytelse = søknad.getYtelse() - assertThat(ytelse.utenlandsopphold.perioder.size).isEqualTo(3) - val filter = ytelse.utenlandsopphold.perioder.values.filter { it.Årsak != null } - assertThat(filter[0].Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) + assertThat(mapTilEksternFormat.feil()).isEmpty() + val k9Format = mapTilEksternFormat.søknad() + val ytelse = k9Format.getYtelse() + assertThat(ytelse.utenlandsopphold.perioder.size).isEqualTo(3) + val filter = ytelse.utenlandsopphold.perioder.values.filter { it.Årsak != null } + assertThat(filter[0].Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) + } } @Test @@ -506,144 +461,144 @@ class PleiepengersyktbarnTests { val oppdatertSoeknadDto = opprettOgLagreSoeknad(soeknadJson = soeknad, ident = norskIdent) - val søknadViaGet = client.get() - .uri { it.pathSegment(api, søknadTypeUri, "mappe", oppdatertSoeknadDto.soeknadId).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .awaitBodyWithType() - - // GUI format - assertNotNull(søknadViaGet) - assertThat(søknadViaGet.soekerId).isEqualTo(norskIdent) - assertThat(søknadViaGet.journalposter!![0]).isEqualTo("99997777") - assertThat(søknadViaGet.mottattDato).isEqualTo(LocalDate.of(2020, 10, 12)) - assertThat(søknadViaGet.barn?.norskIdent).isEqualTo("22222222222") - assertThat(søknadViaGet.soeknadsperiode?.first()?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.soeknadsperiode?.first()?.tom).isEqualTo(LocalDate.of(2019, 10, 20)) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( - LocalDate.of(2018, 12, 30) - ) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.tom).isNull() - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).hasSize(4) - assertThat(søknadViaGet.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(søknadViaGet.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") - assertThat(søknadViaGet.opptjeningAktivitet?.arbeidstaker!![0].organisasjonsnummer).isEqualTo("910909088") - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer).isEqualTo("910909088") - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.fom).isEqualTo( - LocalDate.of(2018, 12, 30) - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.tom).isEqualTo( - LocalDate.of(2019, 10, 20) - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].faktiskArbeidTimerPerDag).isEqualTo( - "7,48" - ) - assertThat(søknadViaGet.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].jobberNormaltTimerPerDag).isEqualTo( - "7,48" - ) - assertThat(søknadViaGet.arbeidstid?.frilanserArbeidstidInfo!!.perioder?.first()?.periode?.fom).isEqualTo( - LocalDate.of( - 2018, - 12, - 30 - ) - ) - assertThat(søknadViaGet.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.perioder?.first()?.jobberNormaltTimerPerDag).isEqualTo( - "7" - ) - assertThat(søknadViaGet.beredskap?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") - assertThat(søknadViaGet.nattevaak?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") - assertThat(søknadViaGet.tilsynsordning?.perioder?.first()?.timer).isEqualTo(7) - assertThat(søknadViaGet.tilsynsordning?.perioder?.first()?.minutter).isEqualTo(30) - assertThat(søknadViaGet.uttak?.first()?.timerPleieAvBarnetPerDag).isEqualTo("7,5") - assertThat(søknadViaGet.omsorg?.relasjonTilBarnet).isEqualTo("MOR") - assertThat(søknadViaGet.bosteder!![0].land).isEqualTo("RU") - assertThat(søknadViaGet.lovbestemtFerie!![0].fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.utenlandsopphold!![0].periode?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) - assertThat(søknadViaGet.soknadsinfo!!.harMedsoeker).isEqualTo(true) - assertThat(søknadViaGet.soknadsinfo!!.samtidigHjemme).isEqualTo(true) - - // k9-format, faktisk søknad format - val mapTilEksternFormat = MapPsbTilK9Format( - søknadViaGet.soeknadId, - søknadViaGet.journalposter!!.toSet(), - emptyList(), - søknadViaGet - ) + hentMappeGittSøknadId(oppdatertSoeknadDto.soeknadId) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .consumeWith { response: EntityExchangeResult -> + val søknad = response.responseBody!! + assertThat(søknad.soekerId).isEqualTo(norskIdent) + assertThat(søknad.journalposter!![0]).isEqualTo("99997777") + assertThat(søknad.mottattDato).isEqualTo(LocalDate.of(2020, 10, 12)) + assertThat(søknad.barn?.norskIdent).isEqualTo("22222222222") + assertThat(søknad.soeknadsperiode?.first()?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) + assertThat(søknad.soeknadsperiode?.first()?.tom).isEqualTo(LocalDate.of(2019, 10, 20)) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.fom).isEqualTo( + LocalDate.of(2018, 12, 30) + ) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.periode?.tom).isNull() + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.info?.virksomhetstyper).hasSize(4) + assertThat(søknad.opptjeningAktivitet?.selvstendigNaeringsdrivende?.virksomhetNavn).isEqualTo("FiskerAS") + assertThat(søknad.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") + assertThat(søknad.opptjeningAktivitet?.arbeidstaker!![0].organisasjonsnummer).isEqualTo("910909088") + assertThat(søknad.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer).isEqualTo("910909088") + assertThat(søknad.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.fom).isEqualTo( + LocalDate.of(2018, 12, 30) + ) + assertThat(søknad.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].periode?.tom).isEqualTo( + LocalDate.of(2019, 10, 20) + ) + assertThat(søknad.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].faktiskArbeidTimerPerDag).isEqualTo( + "7,48" + ) + assertThat(søknad.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo?.perioder!![0].jobberNormaltTimerPerDag).isEqualTo( + "7,48" + ) + assertThat(søknad.arbeidstid?.frilanserArbeidstidInfo!!.perioder?.first()?.periode?.fom).isEqualTo( + LocalDate.of( + 2018, + 12, + 30 + ) + ) + assertThat(søknad.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.perioder?.first()?.jobberNormaltTimerPerDag).isEqualTo( + "7" + ) + assertThat(søknad.beredskap?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") + assertThat(søknad.nattevaak?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") + assertThat(søknad.tilsynsordning?.perioder?.first()?.timer).isEqualTo(7) + assertThat(søknad.tilsynsordning?.perioder?.first()?.minutter).isEqualTo(30) + assertThat(søknad.uttak?.first()?.timerPleieAvBarnetPerDag).isEqualTo("7,5") + assertThat(søknad.omsorg?.relasjonTilBarnet).isEqualTo("MOR") + assertThat(søknad.bosteder!![0].land).isEqualTo("RU") + assertThat(søknad.lovbestemtFerie!![0].fom).isEqualTo(LocalDate.of(2018, 12, 30)) + assertThat(søknad.utenlandsopphold!![0].periode?.fom).isEqualTo(LocalDate.of(2018, 12, 30)) + assertThat(søknad.soknadsinfo!!.harMedsoeker).isEqualTo(true) + assertThat(søknad.soknadsinfo!!.samtidigHjemme).isEqualTo(true) + + // k9-format, faktisk søknad format + val mapTilEksternFormat = MapPsbTilK9Format( + søknad.soeknadId, + søknad.journalposter!!.toSet(), + emptyList(), + søknad + ) - assertThat(mapTilEksternFormat.feil()).isEmpty() - val søknad = mapTilEksternFormat.søknad() + assertThat(mapTilEksternFormat.feil()).isEmpty() + val k9Format = mapTilEksternFormat.søknad() - assertThat(søknad.søker.personIdent.verdi).isEqualTo(norskIdent) - val ytelse = søknad.getYtelse() + assertThat(k9Format.søker.personIdent.verdi).isEqualTo(norskIdent) + val ytelse = k9Format.getYtelse() - assertThat(ytelse.barn.personIdent.verdi).isEqualTo("22222222222") - assertThat(ytelse.søknadsperiode.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.opptjeningAktivitet.selvstendigNæringsdrivende?.get(0)?.perioder?.keys?.first()?.iso8601).isEqualTo( - "2018-12-30/.." - ) - assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.perioder?.values?.first()?.virksomhetstyper).hasSize( - 4 - ) - assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.virksomhetNavn).isEqualTo("FiskerAS") - assertThat(ytelse.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer.verdi).isEqualTo("910909088") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.faktiskArbeidTimerPerDag?.toString()).isEqualTo( - "PT7H29M" - ) - assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.jobberNormaltTimerPerDag?.toString()).isEqualTo( - "PT7H29M" - ) - assertThat(ytelse.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.get().perioder?.values?.first()?.jobberNormaltTimerPerDag).isEqualTo( - Duration.ofHours(7) - ) - assertThat(ytelse.arbeidstid?.frilanserArbeidstidInfo!!.get().perioder?.keys?.first()?.iso8601).isEqualTo("2018-12-30/2019-10-20") - assertThat(ytelse.beredskap?.perioder?.values?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") - assertThat(ytelse.nattevåk?.perioder?.values?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") - assertThat(ytelse.tilsynsordning?.perioder?.values?.first()?.etablertTilsynTimerPerDag.toString()).isEqualTo("PT7H30M") - assertThat(ytelse.uttak?.perioder?.values?.first()?.timerPleieAvBarnetPerDag.toString()).isEqualTo("PT7H30M") - assertThat(ytelse.omsorg.relasjonTilBarnet.get()).isEqualTo(Omsorg.BarnRelasjon.MOR) - assertThat(ytelse.bosteder.perioder.values.first().land.landkode).isEqualTo("RU") - assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2018-12-30/2019-06-20"))?.isSkalHaFerie).isEqualTo( - true - ) - assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2019-06-21/2019-10-20"))?.isSkalHaFerie).isEqualTo( - false - ) - assertThat(ytelse.utenlandsopphold!!.perioder.keys.first()?.iso8601).isEqualTo("2018-12-30/2019-01-08") - assertThat(ytelse.utenlandsopphold!!.perioder.values.first()?.Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) - assertThat(ytelse.søknadInfo!!.get().samtidigHjemme).isEqualTo(true) - assertThat(ytelse.søknadInfo!!.get().harMedsøker).isEqualTo(true) - assertThat(ytelse.opptjeningAktivitet.frilanser.startdato).isEqualTo(LocalDate.of(2019, 10, 10)) - assertThat(ytelse.opptjeningAktivitet.frilanser.sluttdato).isEqualTo(LocalDate.of(2019, 11, 10)) + assertThat(ytelse.barn.personIdent.verdi).isEqualTo("22222222222") + assertThat(ytelse.søknadsperiode.iso8601).isEqualTo("2018-12-30/2019-10-20") + assertThat(ytelse.opptjeningAktivitet.selvstendigNæringsdrivende?.get(0)?.perioder?.keys?.first()?.iso8601).isEqualTo( + "2018-12-30/.." + ) + assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.perioder?.values?.first()?.virksomhetstyper).hasSize( + 4 + ) + assertThat(ytelse?.opptjeningAktivitet?.selvstendigNæringsdrivende?.get(0)?.virksomhetNavn).isEqualTo("FiskerAS") + assertThat(ytelse.opptjeningAktivitet?.frilanser?.startdato).isEqualTo("2019-10-10") + assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].organisasjonsnummer.verdi).isEqualTo("910909088") + assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.keys?.first()?.iso8601).isEqualTo( + "2018-12-30/2019-10-20" + ) + assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.faktiskArbeidTimerPerDag?.toString()).isEqualTo( + "PT7H29M" + ) + assertThat(ytelse.arbeidstid?.arbeidstakerList!![0].arbeidstidInfo.perioder?.values?.first()?.jobberNormaltTimerPerDag?.toString()).isEqualTo( + "PT7H29M" + ) + assertThat(ytelse.arbeidstid?.selvstendigNæringsdrivendeArbeidstidInfo!!.get().perioder?.values?.first()?.jobberNormaltTimerPerDag).isEqualTo( + Duration.ofHours(7) + ) + assertThat(ytelse.arbeidstid?.frilanserArbeidstidInfo!!.get().perioder?.keys?.first()?.iso8601).isEqualTo( + "2018-12-30/2019-10-20" + ) + assertThat(ytelse.beredskap?.perioder?.values?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") + assertThat(ytelse.nattevåk?.perioder?.values?.first()?.tilleggsinformasjon).isEqualTo("FÅ SLUTT PÅ COVID!!!") + assertThat(ytelse.tilsynsordning?.perioder?.values?.first()?.etablertTilsynTimerPerDag.toString()).isEqualTo( + "PT7H30M" + ) + assertThat(ytelse.uttak?.perioder?.values?.first()?.timerPleieAvBarnetPerDag.toString()).isEqualTo("PT7H30M") + assertThat(ytelse.omsorg.relasjonTilBarnet.get()).isEqualTo(Omsorg.BarnRelasjon.MOR) + assertThat(ytelse.bosteder.perioder.values.first().land.landkode).isEqualTo("RU") + assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2018-12-30/2019-06-20"))?.isSkalHaFerie).isEqualTo( + true + ) + assertThat(ytelse.lovbestemtFerie!!.perioder?.get(Periode("2019-06-21/2019-10-20"))?.isSkalHaFerie).isEqualTo( + false + ) + assertThat(ytelse.utenlandsopphold!!.perioder.keys.first()?.iso8601).isEqualTo("2018-12-30/2019-01-08") + assertThat(ytelse.utenlandsopphold!!.perioder.values.first()?.Årsak).isEqualTo(Utenlandsopphold.UtenlandsoppholdÅrsak.BARNET_INNLAGT_I_HELSEINSTITUSJON_DEKKET_ETTER_AVTALE_MED_ET_ANNET_LAND_OM_TRYGD) + assertThat(ytelse.søknadInfo!!.get().samtidigHjemme).isEqualTo(true) + assertThat(ytelse.søknadInfo!!.get().harMedsøker).isEqualTo(true) + assertThat(ytelse.opptjeningAktivitet.frilanser.startdato).isEqualTo(LocalDate.of(2019, 10, 10)) + assertThat(ytelse.opptjeningAktivitet.frilanser.sluttdato).isEqualTo(LocalDate.of(2019, 11, 10)) + } } private suspend fun opprettOgSendInnSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() - ): Triple { + journalpostid: String = IdGenerator.nesteId(), + ): WebTestClient.ResponseSpec { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknadJson)) - .awaitBodyWithType() + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! assertNotNull(søknadDtoFyltUt.soekerId) @@ -652,44 +607,34 @@ class PleiepengersyktbarnTests { val journalposter = søknadDtoFyltUt.journalposter!! - val kanSendeInn = DatabaseUtil.getJournalpostRepo().kanSendeInn(journalposter) + val kanSendeInn = journalpostRepository.kanSendeInn(journalposter) assertThat(kanSendeInn).isTrue // sender en søknad - val (httpstatus, oasSoknadsfeil) = client.post() - .uri { it.pathSegment(api, søknadTypeUri, "send").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(sendSøknad)) - .awaitStatusWithBody() - return Triple(søknadId, httpstatus, oasSoknadsfeil) + return sendInnSøknad(sendSøknad) } private suspend fun opprettOgLagreSoeknad( soeknadJson: SøknadJson, ident: String, - journalpostid: String = IdGenerator.nesteId() + journalpostid: String = IdGenerator.nesteId(), ): PleiepengerSyktBarnSøknadDto { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) + val location = opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location!! leggerPåNySøknadId(soeknadJson, location) // fyller ut en søknad - val søknadDtoFyltUt = client.put() - .uri { it.pathSegment(api, søknadTypeUri, "oppdater").build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(soeknadJson)) - .awaitBodyWithType() + val søknadDtoFyltUt = oppdaterSøknad(soeknadJson) + .expectStatus().isOk + .expectBody(PleiepengerSyktBarnSøknadDto::class.java) + .returnResult().responseBody!! assertNotNull(søknadDtoFyltUt.soekerId) return søknadDtoFyltUt @@ -697,35 +642,64 @@ class PleiepengersyktbarnTests { private suspend fun opprettSoeknad( ident: String, - journalpostid: String = IdGenerator.nesteId() + journalpostid: String = IdGenerator.nesteId(), ): URI? { val innsendingForOpprettelseAvMappe = opprettSøknad(ident, journalpostid) // oppretter en søknad - val resPost = client.post() - .uri { it.pathSegment(api, søknadTypeUri).build() } - .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) - .body(BodyInserters.fromValue(innsendingForOpprettelseAvMappe)) - .awaitExchangeBlocking() - - val location = resPost.headers().asHttpHeaders().location - assertEquals(HttpStatus.CREATED, resPost.statusCode()) - assertNotNull(location) - - return location + return opprettNySøknad(innsendingForOpprettelseAvMappe) + .expectStatus().isCreated + .expectHeader().exists("Location") + .expectBody() + .returnResult().responseHeaders.location } + + private fun hentMappe(norskIdent: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .header("X-Nav-NorskIdent", norskIdent) + .exchange() + + private fun hentMappeGittSøknadId(søknadId: String) = webTestClient.get() + .uri { it.path("/$api/$søknadTypeUri/mappe/$søknadId").build() } + .header("Authorization", saksbehandlerAuthorizationHeader) + .exchange() + + private fun opprettNySøknad(opprettNySøknad: OpprettNySøknad) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(opprettNySøknad) + .exchange() + + private fun oppdaterSøknad(søknadFraFrontend: SøknadJson) = webTestClient.put() + .uri { it.path("/$api/$søknadTypeUri/oppdater").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(søknadFraFrontend) + .exchange() + + private fun validerSøknad(soeknad: SøknadJson) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/valider").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .bodyValue(soeknad) + .exchange() + + private fun sendInnSøknad(sendSøknad: SendSøknad) = webTestClient.post() + .uri { it.path("/$api/$søknadTypeUri/send").build() } + .header(HttpHeaders.AUTHORIZATION, saksbehandlerAuthorizationHeader) + .body(BodyInserters.fromValue(sendSøknad)) + .exchange() } private fun opprettSøknad( personnummer: String, - journalpostId: String + journalpostId: String, ): OpprettNySøknad { return OpprettNySøknad(personnummer, journalpostId, null, null) } private fun lagSendSøknad( norskIdent: String, - søknadId: String + søknadId: String, ): SendSøknad { return SendSøknad(norskIdent, søknadId) } @@ -733,7 +707,7 @@ private fun lagSendSøknad( private fun tilpasserSøknadsMalTilTesten( søknad: MutableMap, norskIdent: String, - journalpostId: String? = null + journalpostId: String? = null, ) { søknad.replace("soekerId", norskIdent) if (journalpostId != null) søknad.replace("journalposter", arrayOf(journalpostId)) diff --git a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt index b99bbd035..6a0858d5a 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/k9sak/TestK9SakService.kt @@ -2,7 +2,6 @@ package no.nav.k9punsj.rest.eksternt.k9sak import no.nav.k9.kodeverk.dokument.Brevkode import no.nav.k9.søknad.Søknad -import no.nav.k9punsj.TestProfil import no.nav.k9punsj.felles.FagsakYtelseType import no.nav.k9punsj.felles.dto.ArbeidsgiverMedArbeidsforholdId import no.nav.k9punsj.felles.dto.PeriodeDto @@ -13,7 +12,6 @@ import org.springframework.stereotype.Component import java.time.LocalDate @Component -@TestProfil internal class TestK9SakService : K9SakService { override suspend fun hentPerioderSomFinnesIK9( søker: String, diff --git a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/pdl/TestPdlService.kt b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/pdl/TestPdlService.kt index b16e53295..425b1bc7f 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/eksternt/pdl/TestPdlService.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/eksternt/pdl/TestPdlService.kt @@ -1,7 +1,5 @@ package no.nav.k9punsj.rest.eksternt.pdl -import no.nav.k9punsj.TestProfil -import no.nav.k9punsj.felles.Identitetsnummer.Companion.somIdentitetsnummer import no.nav.k9punsj.integrasjoner.pdl.IdentPdl import no.nav.k9punsj.integrasjoner.pdl.PdlResponse import no.nav.k9punsj.integrasjoner.pdl.PdlService @@ -10,7 +8,6 @@ import org.springframework.stereotype.Component import java.time.LocalDate @Component -@TestProfil internal class TestPdlService : PdlService { private val dummyFnr = "11111111111" private val dummyAktørId = "1000000000000" diff --git a/src/test/kotlin/no/nav/k9punsj/rest/server/PunsjJournalpostInfoRoutesTest.kt b/src/test/kotlin/no/nav/k9punsj/rest/server/PunsjJournalpostInfoRoutesTest.kt index dd8cca679..228f3feeb 100644 --- a/src/test/kotlin/no/nav/k9punsj/rest/server/PunsjJournalpostInfoRoutesTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/rest/server/PunsjJournalpostInfoRoutesTest.kt @@ -3,6 +3,7 @@ package no.nav.k9punsj.rest.server import com.fasterxml.jackson.module.kotlin.convertValue import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.TestSetup import no.nav.k9punsj.felles.JsonB import no.nav.k9punsj.journalpost.dto.SøkUferdigJournalposter @@ -18,94 +19,94 @@ import org.springframework.http.HttpStatus import org.springframework.test.context.junit.jupiter.SpringExtension import org.springframework.web.reactive.function.BodyInserters -@ExtendWith(SpringExtension::class, MockKExtension::class) -class PunsjJournalpostInfoRoutesTest { +class PunsjJournalpostInfoRoutesTest : AbstractContainerBaseTest() { - private val client = TestSetup.client private val json: JsonB = objectMapper().convertValue(SøkUferdigJournalposter("1000000000000", null)) @Test fun `Får en liste med journalpostIder som ikke er ferdig behandlet av punsj post`(): Unit = runBlocking { val k9sakToken = "Bearer ${no.nav.helse.dusseldorf.testsupport.jws.NaisSts.k9SakToken()}" - val res = client.post().uri { + + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .header(HttpHeaders.AUTHORIZATION, k9sakToken) .body(BodyInserters.fromValue(json)) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.OK, status) + .exchange() + .expectStatus().isOk } @Test fun `Http 500 om vi sender feil body`(): Unit = runBlocking { val k9sakToken = "Bearer ${no.nav.helse.dusseldorf.testsupport.jws.NaisSts.k9SakToken()}" - val res = client.post().uri { + + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .header(HttpHeaders.AUTHORIZATION, k9sakToken) .body(BodyInserters.fromValue("""json""")) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, status) + .exchange() + .expectStatus().is5xxServerError } @Test - fun `Http 401 om vi har token fra riktig applikasjon men feil aud`() = runBlocking { - val stsTokenLosApi = "Bearer ${no.nav.helse.dusseldorf.testsupport.jws.NaisSts.generateJwt( - application = "srvk9sak", - overridingClaims = mapOf( - "aud" to "k9losapi" - ))}" - val res = client.post().uri { + fun `Http 401 om vi har token fra riktig applikasjon men feil aud`(): Unit = runBlocking { + val stsTokenLosApi = "Bearer ${ + no.nav.helse.dusseldorf.testsupport.jws.NaisSts.generateJwt( + application = "srvk9sak", + overridingClaims = mapOf( + "aud" to "k9losapi" + ) + ) + }" + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .header(HttpHeaders.AUTHORIZATION, stsTokenLosApi) .body(BodyInserters.fromValue(json)) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.UNAUTHORIZED, status) + .exchange() + .expectStatus().isUnauthorized } @Test - fun `Http 401 om vi har token til annen applikasjon`() = runBlocking { - val stsTokenLosApi = "Bearer ${no.nav.helse.dusseldorf.testsupport.jws.NaisSts.generateJwt( - application = "srvk9losapi", - overridingClaims = mapOf( - "sub" to "srvk9losapi", - "aud" to "srvk9losapi" - ))}" - val res = client.post().uri { + fun `Http 401 om vi har token til annen applikasjon`(): Unit = runBlocking { + val stsTokenLosApi = "Bearer ${ + no.nav.helse.dusseldorf.testsupport.jws.NaisSts.generateJwt( + application = "srvk9losapi", + overridingClaims = mapOf( + "sub" to "srvk9losapi", + "aud" to "srvk9losapi" + ) + ) + }" + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .header(HttpHeaders.AUTHORIZATION, stsTokenLosApi) .body(BodyInserters.fromValue(json)) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.UNAUTHORIZED, status) + .exchange() + .expectStatus().isUnauthorized } @Test - fun `Http 401 om ikke har token`() = runBlocking { - val res = client.post().uri { + fun `Http 401 om ikke har token`(): Unit = runBlocking { + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .body(BodyInserters.fromValue(json)) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.UNAUTHORIZED, status) + .exchange() + .expectStatus().isUnauthorized } @Test - fun `Http 200 om vi har azure ad token`() = runBlocking { + fun `Http 200 om vi har azure ad token`(): Unit = runBlocking { val azureToken = "Bearer ${no.nav.helse.dusseldorf.testsupport.jws.Azure.V2_0.saksbehandlerAccessToken()}" - val res = client.post().uri { + webTestClient.post().uri { it.pathSegment("api", "journalpost", "uferdig").build() } .header(HttpHeaders.AUTHORIZATION, azureToken) .body(BodyInserters.fromValue(json)) - - val status = res.awaitStatuscode() - assertEquals(HttpStatus.OK, status) + .exchange() + .expectStatus().isOk } } diff --git a/src/test/kotlin/no/nav/k9punsj/sak/SakServiceTest.kt b/src/test/kotlin/no/nav/k9punsj/sak/SakServiceTest.kt index ab28a513b..76d370145 100644 --- a/src/test/kotlin/no/nav/k9punsj/sak/SakServiceTest.kt +++ b/src/test/kotlin/no/nav/k9punsj/sak/SakServiceTest.kt @@ -1,29 +1,21 @@ package no.nav.k9punsj.sak -import io.mockk.junit5.MockKExtension import kotlinx.coroutines.runBlocking +import no.nav.k9punsj.AbstractContainerBaseTest import no.nav.k9punsj.domenetjenester.PersonService -import no.nav.k9punsj.rest.eksternt.k9sak.TestK9SakService import org.assertj.core.api.Assertions.assertThat -import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test -import org.junit.jupiter.api.extension.ExtendWith +import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.mock.mockito.MockBean -import org.springframework.test.context.junit.jupiter.SpringExtension -@ExtendWith(SpringExtension::class, MockKExtension::class) -internal class SakServiceTest { +internal class SakServiceTest: AbstractContainerBaseTest() { + @Autowired private lateinit var sakService: SakService @MockBean private lateinit var personService: PersonService - @BeforeEach - internal fun setUp() { - sakService = SakService(k9SakService = TestK9SakService(), personService = personService) - } - @Test internal fun `gitt saker fra saf, forvent kun fagsaker fra k9`() { runBlocking { diff --git a/src/test/kotlin/no/nav/k9punsj/util/DatabaseUtil.kt b/src/test/kotlin/no/nav/k9punsj/util/DatabaseUtil.kt deleted file mode 100644 index 4633e1787..000000000 --- a/src/test/kotlin/no/nav/k9punsj/util/DatabaseUtil.kt +++ /dev/null @@ -1,68 +0,0 @@ -package no.nav.k9punsj.util - -import io.zonky.test.db.postgres.embedded.EmbeddedPostgres -import kotliquery.queryOf -import kotliquery.sessionOf -import kotliquery.using -import no.nav.k9punsj.TestProfil -import no.nav.k9punsj.akjonspunkter.AksjonspunktRepository -import no.nav.k9punsj.domenetjenester.repository.BunkeRepository -import no.nav.k9punsj.domenetjenester.repository.MappeRepository -import no.nav.k9punsj.domenetjenester.repository.PersonRepository -import no.nav.k9punsj.domenetjenester.repository.SøknadRepository -import no.nav.k9punsj.journalpost.JournalpostRepository -import no.nav.k9punsj.metrikker.JournalpostMetrikkRepository -import org.flywaydb.core.Flyway -import org.springframework.context.annotation.Bean -import org.springframework.stereotype.Component -import javax.sql.DataSource - -class DatabaseUtil { - companion object { - internal val embeddedPostgres = EmbeddedPostgres.start() - internal val dataSource: DataSource = embeddedPostgres.postgresDatabase.also { dataSource -> - val flyway = Flyway.configure() - .cleanDisabled(false) - .locations("migreringer/") - .dataSource(dataSource) - .load()!! - flyway.clean() - flyway.migrate() - } - - fun getMappeRepo(): MappeRepository = MappeRepository(dataSource) - fun cleanMappeRepo() = cleanTable(MappeRepository.MAPPE_TABLE) - - fun getSøknadRepo(): SøknadRepository = SøknadRepository(dataSource) - fun cleanSøknadRepo() = cleanTable(SøknadRepository.SØKNAD_TABLE) - - fun getPersonRepo(): PersonRepository = PersonRepository(dataSource) - fun cleanPersonRepo() = cleanTable(PersonRepository.PERSON_TABLE) - - fun getBunkeRepo(): BunkeRepository = BunkeRepository(dataSource) - fun cleanBunkeRepo() = cleanTable(BunkeRepository.BUNKE_TABLE) - - fun getJournalpostRepo(): JournalpostRepository = JournalpostRepository(dataSource) - fun journalpostMetrikkRepository(): JournalpostMetrikkRepository = JournalpostMetrikkRepository(dataSource) - fun cleanJournalpostRepo() = cleanTable(JournalpostRepository.JOURNALPOST_TABLE) - - fun getAksjonspunktRepo(): AksjonspunktRepository = AksjonspunktRepository(dataSource) - fun cleanAksjonspunktRepo() = cleanTable(AksjonspunktRepository.AKSJONSPUNKT_TABLE) - - fun cleanDB() { - cleanSøknadRepo() - cleanBunkeRepo() - cleanMappeRepo() - cleanPersonRepo() - cleanAksjonspunktRepo() - cleanJournalpostRepo() - } - - private fun cleanTable(tableName: String) { - using(sessionOf(dataSource)) { - //language=PostgreSQL - it.transaction { tx -> tx.run(queryOf("DELETE FROM $tableName;").asExecute) } - } - } - } -} diff --git a/src/test/kotlin/no/nav/k9punsj/util/DbContainerInitializer.kt b/src/test/kotlin/no/nav/k9punsj/util/DbContainerInitializer.kt new file mode 100644 index 000000000..839b2fd4c --- /dev/null +++ b/src/test/kotlin/no/nav/k9punsj/util/DbContainerInitializer.kt @@ -0,0 +1,20 @@ +package no.nav.k9punsj.util + +import org.springframework.context.ApplicationContextInitializer +import org.springframework.context.ConfigurableApplicationContext +import org.testcontainers.containers.PostgreSQLContainer + +class DbContainerInitializer: ApplicationContextInitializer { + companion object { + private val postgreSQLContainer12 = PostgreSQLContainer("postgres:12.2-alpine") + + internal val postgresContainer = postgreSQLContainer12 + .withDatabaseName("postgres") + .withUsername("postgres") + .withPassword("postgres") + } + + override fun initialize(applicationContext: ConfigurableApplicationContext) { + postgresContainer.start() + } +} \ No newline at end of file diff --git a/src/test/kotlin/no/nav/k9punsj/wiremock/WireMocks.kt b/src/test/kotlin/no/nav/k9punsj/wiremock/WireMocks.kt index f2ca938eb..6b3324530 100644 --- a/src/test/kotlin/no/nav/k9punsj/wiremock/WireMocks.kt +++ b/src/test/kotlin/no/nav/k9punsj/wiremock/WireMocks.kt @@ -1,24 +1,29 @@ package no.nav.k9punsj.wiremock +import com.github.tomakehurst.wiremock.WireMockServer import com.github.tomakehurst.wiremock.core.Options import no.nav.helse.dusseldorf.testsupport.wiremock.WireMockBuilder fun initWireMock( - port: Int, - rootDirectory: String = "src/test/resources" -) = WireMockBuilder() - .withPort(port) - .withAzureSupport() - .withNaisStsSupport() - .wireMockConfiguration { - it.withRootDirectory(rootDirectory) - it.useChunkedTransferEncoding(Options.ChunkedEncodingPolicy.NEVER) - } - .build() - .stubSaf() - .stubPdl() - .stubAccessTokens() - .stubGosys() - .stubAareg() - .stubEreg() - .stubDokarkiv() + port: Int? = null, + rootDirectory: String = "src/test/resources", +): WireMockServer { + val builder = WireMockBuilder() + .withAzureSupport() + .withNaisStsSupport() + .wireMockConfiguration { + it.withRootDirectory(rootDirectory) + it.useChunkedTransferEncoding(Options.ChunkedEncodingPolicy.NEVER) + } + + port?.let { builder.withPort(it) } + + return builder.build() + .stubSaf() + .stubPdl() + .stubAccessTokens() + .stubGosys() + .stubAareg() + .stubEreg() + .stubDokarkiv() +} diff --git a/src/test/resources/application.yaml b/src/test/resources/application.yaml new file mode 100644 index 000000000..5bd18321a --- /dev/null +++ b/src/test/resources/application.yaml @@ -0,0 +1,24 @@ +spring: + main: + web-application-type: reactive + profiles: + active: test + flyway: + enabled: true + baselineOnMigrate: true + clean-on-validation-error: true + datasource: + hikari: + minimum-idle: 1 + maximum-pool-size: 3 + driver-class-name: org.postgresql.Driver + +server: + port: 8085 + +logging: + level: + web: TRACE + org: + springframework: + web: TRACE