Best Kotest code snippet using io.kotest.matchers.collections.inorder
OpprettRevurderingServiceTest.kt
Source:OpprettRevurderingServiceTest.kt
1package no.nav.su.se.bakover.service.revurdering2import arrow.core.getOrHandle3import arrow.core.left4import arrow.core.nonEmptyListOf5import arrow.core.right6import io.kotest.matchers.collections.shouldHaveSize7import io.kotest.matchers.shouldBe8import no.nav.su.se.bakover.common.UUID309import no.nav.su.se.bakover.common.desember10import no.nav.su.se.bakover.common.juli11import no.nav.su.se.bakover.common.juni12import no.nav.su.se.bakover.common.mars13import no.nav.su.se.bakover.common.periode.Periode14import no.nav.su.se.bakover.common.periode.juni15import no.nav.su.se.bakover.common.periode.Ã¥r16import no.nav.su.se.bakover.common.startOfMonth17import no.nav.su.se.bakover.common.toTidspunkt18import no.nav.su.se.bakover.domain.CopyArgs19import no.nav.su.se.bakover.domain.Fnr20import no.nav.su.se.bakover.domain.Saksnummer21import no.nav.su.se.bakover.domain.avkorting.AvkortingVedRevurdering22import no.nav.su.se.bakover.domain.avkorting.Avkortingsvarsel23import no.nav.su.se.bakover.domain.grunnlag.Grunnlag24import no.nav.su.se.bakover.domain.grunnlag.Grunnlagsdata25import no.nav.su.se.bakover.domain.grunnlag.Uføregrad26import no.nav.su.se.bakover.domain.oppgave.OppgaveConfig27import no.nav.su.se.bakover.domain.oppgave.OppgaveFeil.KunneIkkeOppretteOppgave28import no.nav.su.se.bakover.domain.oppgave.OppgaveId29import no.nav.su.se.bakover.domain.person.KunneIkkeHentePerson30import no.nav.su.se.bakover.domain.revurdering.ForhÃ¥ndsvarsel31import no.nav.su.se.bakover.domain.revurdering.InformasjonSomRevurderes32import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering33import no.nav.su.se.bakover.domain.revurdering.RevurderingRepo34import no.nav.su.se.bakover.domain.revurdering.Revurderingsteg35import no.nav.su.se.bakover.domain.revurdering.RevurderingsÃ¥rsak36import no.nav.su.se.bakover.domain.revurdering.Vurderingstatus37import no.nav.su.se.bakover.domain.søknadsbehandling.Stønadsperiode38import no.nav.su.se.bakover.domain.vedtak.GjeldendeVedtaksdata39import no.nav.su.se.bakover.domain.vedtak.VedtakSomKanRevurderes40import no.nav.su.se.bakover.domain.vilkÃ¥r.Resultat41import no.nav.su.se.bakover.domain.vilkÃ¥r.VilkÃ¥r42import no.nav.su.se.bakover.domain.vilkÃ¥r.VilkÃ¥rsvurderinger43import no.nav.su.se.bakover.domain.vilkÃ¥r.Vurderingsperiode44import no.nav.su.se.bakover.service.argThat45import no.nav.su.se.bakover.service.formueVilkÃ¥r46import no.nav.su.se.bakover.service.oppgave.OppgaveService47import no.nav.su.se.bakover.service.person.PersonService48import no.nav.su.se.bakover.service.revurdering.RevurderingTestUtils.periodeNesteMÃ¥nedOgTreMÃ¥nederFram49import no.nav.su.se.bakover.service.revurdering.RevurderingTestUtils.stønadsperiodeNesteMÃ¥nedOgTreMÃ¥nederFram50import no.nav.su.se.bakover.service.søknadsbehandling.testBeregning51import no.nav.su.se.bakover.service.vedtak.KunneIkkeKopiereGjeldendeVedtaksdata52import no.nav.su.se.bakover.service.vedtak.VedtakService53import no.nav.su.se.bakover.test.TestSessionFactory54import no.nav.su.se.bakover.test.TikkendeKlokke55import no.nav.su.se.bakover.test.aktørId56import no.nav.su.se.bakover.test.create57import no.nav.su.se.bakover.test.fixedClock58import no.nav.su.se.bakover.test.fixedLocalDate59import no.nav.su.se.bakover.test.fixedTidspunkt60import no.nav.su.se.bakover.test.fnr61import no.nav.su.se.bakover.test.formuevilkÃ¥rIkkeVurdert62import no.nav.su.se.bakover.test.generer63import no.nav.su.se.bakover.test.getOrFail64import no.nav.su.se.bakover.test.innvilgetUførevilkÃ¥rForventetInntekt1200065import no.nav.su.se.bakover.test.iverksattRevurderingInnvilgetFraInnvilgetSøknadsbehandlingsVedtak66import no.nav.su.se.bakover.test.plus67import no.nav.su.se.bakover.test.sakId68import no.nav.su.se.bakover.test.saksbehandler69import no.nav.su.se.bakover.test.saksnummer70import no.nav.su.se.bakover.test.søknadsbehandlingIverksattInnvilget71import no.nav.su.se.bakover.test.tilstrekkeligDokumentert72import no.nav.su.se.bakover.test.uføregrunnlagForventetInntekt1200073import no.nav.su.se.bakover.test.utenlandsoppholdAvslag74import no.nav.su.se.bakover.test.utenlandsoppholdInnvilget75import no.nav.su.se.bakover.test.vedtakRevurdering76import no.nav.su.se.bakover.test.vilkÃ¥rsvurderingerSøknadsbehandlingInnvilget77import org.junit.jupiter.api.Test78import org.mockito.kotlin.any79import org.mockito.kotlin.anyOrNull80import org.mockito.kotlin.doReturn81import org.mockito.kotlin.inOrder82import org.mockito.kotlin.mock83import org.mockito.kotlin.verify84import java.time.temporal.ChronoUnit85import java.util.UUID86internal class OpprettRevurderingServiceTest {87 private val informasjonSomRevurderes = listOf(88 Revurderingsteg.Inntekt,89 )90 private val uføregrunnlag = uføregrunnlagForventetInntekt12000(periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram)91 private val vilkÃ¥rsvurderingUføre =92 innvilgetUførevilkÃ¥rForventetInntekt12000(periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram)93 private fun createInnvilgetBehandling() = søknadsbehandlingIverksattInnvilget(94 stønadsperiode = stønadsperiodeNesteMÃ¥nedOgTreMÃ¥nederFram,95 vilkÃ¥rsvurderinger = vilkÃ¥rsvurderingerSøknadsbehandlingInnvilget(96 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,97 uføre = vilkÃ¥rsvurderingUføre,98 ),99 ).second100 private fun createSøknadsbehandlingVedtak() =101 VedtakSomKanRevurderes.fromSøknadsbehandling(createInnvilgetBehandling(), UUID30.randomUUID(), fixedClock)102 @Test103 fun `oppretter en revurdering`() {104 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(105 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,106 vedtakListe = nonEmptyListOf(createSøknadsbehandlingVedtak()),107 clock = fixedClock,108 )109 val vedtakServiceMock = mock<VedtakService> {110 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()111 }112 val revurderingRepoMock = mock<RevurderingRepo>()113 val personServiceMock = mock<PersonService> {114 on { hentAktørId(any()) } doReturn aktørId.right()115 }116 val oppgaveServiceMock = mock<OppgaveService> {117 on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right()118 }119 val mocks = RevurderingServiceMocks(120 vedtakService = vedtakServiceMock,121 revurderingRepo = revurderingRepoMock,122 oppgaveService = oppgaveServiceMock,123 personService = personServiceMock,124 avkortingsvarselRepo = mock {125 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen126 },127 )128 val actual = mocks.revurderingService.opprettRevurdering(129 OpprettRevurderingRequest(130 sakId = sakId,131 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,132 Ã¥rsak = "MELDING_FRA_BRUKER",133 begrunnelse = "Ny informasjon",134 saksbehandler = saksbehandler,135 informasjonSomRevurderes = informasjonSomRevurderes,136 ),137 ).orNull()!!138 val tilRevurdering =139 gjeldendeVedtaksdata.gjeldendeVedtakPÃ¥Dato(periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed) as VedtakSomKanRevurderes.EndringIYtelse140 actual.let { opprettetRevurdering ->141 opprettetRevurdering.periode shouldBe periodeNesteMÃ¥nedOgTreMÃ¥nederFram142 opprettetRevurdering.tilRevurdering shouldBe tilRevurdering143 opprettetRevurdering.saksbehandler shouldBe saksbehandler144 opprettetRevurdering.oppgaveId shouldBe OppgaveId("oppgaveId")145 opprettetRevurdering.fritekstTilBrev shouldBe ""146 opprettetRevurdering.revurderingsÃ¥rsak shouldBe RevurderingsÃ¥rsak.create(147 Ã¥rsak = RevurderingsÃ¥rsak.Ã
rsak.MELDING_FRA_BRUKER.toString(), begrunnelse = "Ny informasjon",148 )149 opprettetRevurdering.forhÃ¥ndsvarsel shouldBe null150 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.grunnlag.let {151 it shouldHaveSize 1152 it[0].ekvivalentMed(uføregrunnlag)153 }154 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.ekvivalentMed(vilkÃ¥rsvurderingUføre)155 opprettetRevurdering.informasjonSomRevurderes shouldBe InformasjonSomRevurderes.create(mapOf(Revurderingsteg.Inntekt to Vurderingstatus.IkkeVurdert))156 inOrder(157 *mocks.all(),158 ) {159 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)160 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })161 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())162 verify(oppgaveServiceMock).opprettOppgave(163 argThat {164 it shouldBe OppgaveConfig.Revurderingsbehandling(165 saksnummer = saksnummer,166 aktørId = aktørId,167 tilordnetRessurs = null,168 clock = fixedClock,169 )170 },171 )172 verify(revurderingRepoMock).defaultTransactionContext()173 verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual.right() }, anyOrNull())174 }175 mocks.verifyNoMoreInteractions()176 }177 }178 @Test179 fun `kan opprette revurdering med Ã¥rsak g-regulering i samme mÃ¥ned`() {180 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(181 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,182 vedtakListe = nonEmptyListOf(createSøknadsbehandlingVedtak()),183 clock = fixedClock,184 )185 val vedtakServiceMock = mock<VedtakService> {186 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()187 }188 val revurderingRepoMock = mock<RevurderingRepo>()189 val personServiceMock = mock<PersonService> {190 on { hentAktørId(any()) } doReturn aktørId.right()191 }192 val oppgaveServiceMock = mock<OppgaveService> {193 on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right()194 }195 val mocks = RevurderingServiceMocks(196 vedtakService = vedtakServiceMock,197 revurderingRepo = revurderingRepoMock,198 oppgaveService = oppgaveServiceMock,199 personService = personServiceMock,200 avkortingsvarselRepo = mock {201 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen202 },203 )204 val actual = mocks.revurderingService.opprettRevurdering(205 OpprettRevurderingRequest(206 sakId = sakId,207 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,208 Ã¥rsak = "REGULER_GRUNNBELÃP",209 begrunnelse = "g-regulering",210 saksbehandler = saksbehandler,211 informasjonSomRevurderes = informasjonSomRevurderes,212 ),213 ).getOrHandle {214 throw RuntimeException("$it")215 }216 val tilRevurdering =217 gjeldendeVedtaksdata.gjeldendeVedtakPÃ¥Dato(periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed) as VedtakSomKanRevurderes.EndringIYtelse218 val periode =219 Periode.create(periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed)220 actual.let { opprettetRevurdering ->221 opprettetRevurdering.periode shouldBe periode222 opprettetRevurdering.tilRevurdering shouldBe tilRevurdering223 opprettetRevurdering.saksbehandler shouldBe saksbehandler224 opprettetRevurdering.oppgaveId shouldBe OppgaveId("oppgaveId")225 opprettetRevurdering.fritekstTilBrev shouldBe ""226 opprettetRevurdering.revurderingsÃ¥rsak shouldBe RevurderingsÃ¥rsak(227 RevurderingsÃ¥rsak.Ã
rsak.REGULER_GRUNNBELÃP,228 RevurderingsÃ¥rsak.Begrunnelse.create("g-regulering"),229 )230 opprettetRevurdering.forhÃ¥ndsvarsel shouldBe ForhÃ¥ndsvarsel.Ferdigbehandlet.SkalIkkeForhÃ¥ndsvarsles231 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.grunnlag.let {232 it shouldHaveSize 1233 it[0].ekvivalentMed(uføregrunnlag.copy(periode = periode))234 }235 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.ekvivalentMed(236 vilkÃ¥rsvurderingUføre.copy(237 vurderingsperioder = vilkÃ¥rsvurderingUføre.vurderingsperioder.map {238 it.copy(CopyArgs.Tidslinje.NyPeriode(periode))239 },240 ),241 )242 opprettetRevurdering.informasjonSomRevurderes shouldBe InformasjonSomRevurderes.create(mapOf(Revurderingsteg.Inntekt to Vurderingstatus.IkkeVurdert))243 }244 inOrder(245 *mocks.all(),246 ) {247 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periode.fraOgMed)248 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })249 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())250 verify(oppgaveServiceMock).opprettOppgave(251 argThat {252 it shouldBe OppgaveConfig.Revurderingsbehandling(253 saksnummer = saksnummer,254 aktørId = aktørId,255 tilordnetRessurs = null,256 clock = fixedClock,257 )258 },259 )260 verify(revurderingRepoMock).defaultTransactionContext()261 verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual.right() }, anyOrNull())262 }263 mocks.verifyNoMoreInteractions()264 }265 @Test266 fun `kan opprette revurdering med Ã¥rsak g-regulering 1 kalendermÃ¥ned tilbake i tid`() {267 val periode = Periode.create(268 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed.minusMonths(1).startOfMonth(),269 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed,270 )271 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(272 periode = periode,273 vedtakListe = nonEmptyListOf(createSøknadsbehandlingVedtak()),274 clock = fixedClock,275 )276 val vedtakServiceMock = mock<VedtakService> {277 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()278 }279 val revurderingRepoMock = mock<RevurderingRepo>()280 val personServiceMock = mock<PersonService> {281 on { hentAktørId(any()) } doReturn aktørId.right()282 }283 val oppgaveServiceMock = mock<OppgaveService> {284 on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right()285 }286 val mocks = RevurderingServiceMocks(287 vedtakService = vedtakServiceMock,288 revurderingRepo = revurderingRepoMock,289 oppgaveService = oppgaveServiceMock,290 personService = personServiceMock,291 avkortingsvarselRepo = mock {292 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen293 },294 )295 val actual = mocks.revurderingService.opprettRevurdering(296 OpprettRevurderingRequest(297 sakId = sakId,298 fraOgMed = periode.tilOgMed.minusMonths(1).startOfMonth(),299 Ã¥rsak = "REGULER_GRUNNBELÃP",300 begrunnelse = "g-regulering",301 saksbehandler = saksbehandler,302 informasjonSomRevurderes = informasjonSomRevurderes,303 ),304 ).getOrHandle {305 throw RuntimeException("$it")306 }307 val tilRevurdering =308 gjeldendeVedtaksdata.gjeldendeVedtakPÃ¥Dato(periode.fraOgMed) as VedtakSomKanRevurderes.EndringIYtelse309 actual.let { opprettetRevurdering ->310 opprettetRevurdering.periode shouldBe periode311 opprettetRevurdering.tilRevurdering shouldBe tilRevurdering312 opprettetRevurdering.saksbehandler shouldBe saksbehandler313 opprettetRevurdering.oppgaveId shouldBe OppgaveId("oppgaveId")314 opprettetRevurdering.fritekstTilBrev shouldBe ""315 opprettetRevurdering.revurderingsÃ¥rsak shouldBe RevurderingsÃ¥rsak(316 RevurderingsÃ¥rsak.Ã
rsak.REGULER_GRUNNBELÃP,317 RevurderingsÃ¥rsak.Begrunnelse.create("g-regulering"),318 )319 opprettetRevurdering.forhÃ¥ndsvarsel shouldBe ForhÃ¥ndsvarsel.Ferdigbehandlet.SkalIkkeForhÃ¥ndsvarsles320 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.grunnlag.let {321 it shouldHaveSize 1322 it[0].ekvivalentMed(uføregrunnlag.copy(periode = periode))323 }324 opprettetRevurdering.vilkÃ¥rsvurderinger.uføre.ekvivalentMed(325 vilkÃ¥rsvurderingUføre.copy(326 vurderingsperioder = vilkÃ¥rsvurderingUføre.vurderingsperioder.map {327 it.copy(CopyArgs.Tidslinje.NyPeriode(periode))328 },329 ),330 )331 opprettetRevurdering.informasjonSomRevurderes shouldBe InformasjonSomRevurderes.create(mapOf(Revurderingsteg.Inntekt to Vurderingstatus.IkkeVurdert))332 }333 inOrder(334 *mocks.all(),335 ) {336 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periode.fraOgMed)337 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })338 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())339 verify(oppgaveServiceMock).opprettOppgave(340 argThat {341 it shouldBe OppgaveConfig.Revurderingsbehandling(342 saksnummer = saksnummer,343 aktørId = aktørId,344 tilordnetRessurs = null,345 clock = fixedClock,346 )347 },348 )349 verify(revurderingRepoMock).defaultTransactionContext()350 verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual.right() }, anyOrNull())351 }352 mocks.verifyNoMoreInteractions()353 }354 @Test355 fun `fant ikke sak`() {356 val vedtakServiceMock = mock<VedtakService> {357 on {358 kopierGjeldendeVedtaksdata(359 any(),360 any(),361 )362 } doReturn KunneIkkeKopiereGjeldendeVedtaksdata.FantIkkeSak.left()363 }364 val mocks = RevurderingServiceMocks(365 vedtakService = vedtakServiceMock,366 )367 val actual = mocks.revurderingService.opprettRevurdering(368 OpprettRevurderingRequest(369 sakId = sakId,370 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,371 Ã¥rsak = "MELDING_FRA_BRUKER",372 begrunnelse = "Ny informasjon",373 saksbehandler = saksbehandler,374 informasjonSomRevurderes = listOf(Revurderingsteg.Inntekt),375 ),376 )377 actual shouldBe KunneIkkeOppretteRevurdering.FantIkkeSak.left()378 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)379 mocks.verifyNoMoreInteractions()380 }381 @Test382 fun `kan ikke opprette revurdering hvis ingen vedtak eksisterer for angitt fra og med dato`() {383 val vedtakServiceMock = mock<VedtakService> {384 on {385 kopierGjeldendeVedtaksdata(386 any(),387 any(),388 )389 } doReturn KunneIkkeKopiereGjeldendeVedtaksdata.FantIngenVedtak.left()390 }391 val mocks = RevurderingServiceMocks(392 vedtakService = vedtakServiceMock,393 )394 val actual = mocks.revurderingService.opprettRevurdering(395 OpprettRevurderingRequest(396 sakId = sakId,397 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,398 Ã¥rsak = "MELDING_FRA_BRUKER",399 begrunnelse = "Ny informasjon",400 saksbehandler = saksbehandler,401 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),402 ),403 )404 actual shouldBe KunneIkkeOppretteRevurdering.FantIngenVedtakSomKanRevurderes.left()405 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)406 mocks.verifyNoMoreInteractions()407 }408 @Test409 fun `for en ny revurdering vil det tas utgangspunkt i nyeste vedtak hvor fraOgMed er inni perioden`() {410 val vedtaksperiode = Ã¥r(2021)411 val behandlingMock = mock<IverksattRevurdering.Innvilget> {412 on { fnr } doReturn Fnr.generer()413 on { saksnummer } doReturn Saksnummer(2021)414 on { grunnlagsdata } doReturn Grunnlagsdata.create(415 bosituasjon = listOf(416 Grunnlag.Bosituasjon.Fullstendig.Enslig(417 id = UUID.randomUUID(),418 opprettet = fixedTidspunkt,419 periode = vedtaksperiode,420 begrunnelse = null,421 ),422 ),423 )424 on { vilkÃ¥rsvurderinger } doReturn VilkÃ¥rsvurderinger.Revurdering(425 uføre = vilkÃ¥rsvurderingUføre,426 formue = formueVilkÃ¥r(periode = vedtaksperiode),427 utenlandsopphold = utenlandsoppholdInnvilget(periode = vedtaksperiode),428 opplysningsplikt = tilstrekkeligDokumentert(periode = vedtaksperiode),429 )430 }431 val vedtakForFørsteJanuarLagetNÃ¥ = mock<VedtakSomKanRevurderes.EndringIYtelse.InnvilgetRevurdering> {432 on { id } doReturn UUID.randomUUID()433 on { opprettet } doReturn fixedTidspunkt434 on { periode } doReturn vedtaksperiode435 on { behandling } doReturn behandlingMock436 on { beregning } doReturn testBeregning437 }438 val vedtakForFørsteMarsLagetNÃ¥ = mock<VedtakSomKanRevurderes.EndringIYtelse.InnvilgetRevurdering> {439 on { id } doReturn UUID.randomUUID()440 on { opprettet } doReturn fixedTidspunkt.plus(1, ChronoUnit.SECONDS)441 on { periode } doReturn Periode.create(1.mars(2021), 31.desember(2021))442 on { behandling } doReturn behandlingMock443 on { beregning } doReturn testBeregning444 }445 val vedtakForFørsteJanuarLagetForLengeSiden = mock<VedtakSomKanRevurderes.EndringIYtelse.InnvilgetRevurdering> {446 on { id } doReturn UUID.randomUUID()447 on { opprettet } doReturn fixedTidspunkt.instant.minus(2, ChronoUnit.HALF_DAYS).toTidspunkt()448 on { periode } doReturn vedtaksperiode449 on { behandling } doReturn behandlingMock450 on { beregning } doReturn testBeregning451 }452 val fraOgMedDatoFebruar = fixedLocalDate.plus(1, ChronoUnit.MONTHS)453 val fraOgMedDatoApril = fixedLocalDate.plus(3, ChronoUnit.MONTHS)454 val vedtakListe = nonEmptyListOf(455 vedtakForFørsteJanuarLagetNÃ¥,456 vedtakForFørsteMarsLagetNÃ¥,457 vedtakForFørsteJanuarLagetForLengeSiden,458 )459 val gjeldendeVedtaksdataFebruar = GjeldendeVedtaksdata(460 periode = Periode.create(fraOgMedDatoFebruar, vedtakListe.maxOf { it.periode.tilOgMed }),461 vedtakListe = vedtakListe,462 clock = fixedClock,463 )464 val gjeldendeVedtaksdataApril = GjeldendeVedtaksdata(465 periode = Periode.create(fraOgMedDatoApril, vedtakListe.maxOf { it.periode.tilOgMed }),466 vedtakListe = vedtakListe,467 clock = fixedClock,468 )469 val vedtakServiceMock = mock<VedtakService> {470 on { kopierGjeldendeVedtaksdata(sakId, fraOgMedDatoFebruar) } doReturn gjeldendeVedtaksdataFebruar.right()471 on { kopierGjeldendeVedtaksdata(sakId, fraOgMedDatoApril) } doReturn gjeldendeVedtaksdataApril.right()472 }473 val mocks = RevurderingServiceMocks(474 vedtakService = vedtakServiceMock,475 oppgaveService = mock {476 on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right()477 },478 personService = mock {479 on { hentAktørId(any()) } doReturn aktørId.right()480 },481 avkortingsvarselRepo = mock {482 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen483 },484 revurderingRepo = mock {485 on { defaultTransactionContext() } doReturn TestSessionFactory.transactionContext486 },487 )488 val revurderingForFebruar = mocks.revurderingService.opprettRevurdering(489 OpprettRevurderingRequest(490 sakId = sakId,491 fraOgMed = fraOgMedDatoFebruar,492 Ã¥rsak = "MELDING_FRA_BRUKER",493 begrunnelse = "Ny informasjon",494 saksbehandler = saksbehandler,495 informasjonSomRevurderes = listOf(Revurderingsteg.Inntekt, Revurderingsteg.Bosituasjon),496 ),497 )498 revurderingForFebruar.orNull()!!.tilRevurdering shouldBe vedtakForFørsteJanuarLagetNÃ¥499 val revurderingForApril = mocks.revurderingService.opprettRevurdering(500 OpprettRevurderingRequest(501 sakId = sakId,502 fraOgMed = fraOgMedDatoApril,503 Ã¥rsak = "MELDING_FRA_BRUKER",504 begrunnelse = "Ny informasjon",505 saksbehandler = saksbehandler,506 informasjonSomRevurderes,507 ),508 )509 revurderingForApril.orNull()!!.tilRevurdering shouldBe vedtakForFørsteMarsLagetNÃ¥510 }511 @Test512 fun `kan revurdere en periode med eksisterende revurdering`() {513 val (sak, iverksattRevurdering) = iverksattRevurderingInnvilgetFraInnvilgetSøknadsbehandlingsVedtak()514 val søknadsbehandlingVedtak = sak.vedtakListe.first() as VedtakSomKanRevurderes515 val revurderingVedtak = VedtakSomKanRevurderes.from(516 iverksattRevurdering,517 UUID30.randomUUID(),518 fixedClock.plus(1, ChronoUnit.SECONDS),519 )520 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(521 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,522 vedtakListe = nonEmptyListOf(523 søknadsbehandlingVedtak,524 revurderingVedtak,525 ),526 clock = fixedClock,527 )528 val vedtakServiceMock = mock<VedtakService> {529 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()530 }531 val revurderingRepoMock = mock<RevurderingRepo>()532 val oppgaveServiceMock = mock<OppgaveService> {533 on { opprettOppgave(any()) } doReturn OppgaveId("oppgaveId").right()534 }535 val personServiceMock = mock<PersonService> {536 on { hentAktørId(any()) } doReturn aktørId.right()537 }538 val mocks = RevurderingServiceMocks(539 vedtakService = vedtakServiceMock,540 revurderingRepo = revurderingRepoMock,541 oppgaveService = oppgaveServiceMock,542 personService = personServiceMock,543 avkortingsvarselRepo = mock {544 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen545 },546 )547 val actual = mocks.revurderingService.opprettRevurdering(548 OpprettRevurderingRequest(549 sakId = sakId,550 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,551 Ã¥rsak = "MELDING_FRA_BRUKER",552 begrunnelse = "Ny informasjon",553 saksbehandler = saksbehandler,554 informasjonSomRevurderes = informasjonSomRevurderes,555 ),556 )557 actual.orNull()!!.also {558 it.saksnummer shouldBe saksnummer559 it.tilRevurdering.id shouldBe revurderingVedtak.id560 }561 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)562 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })563 verify(revurderingRepoMock).defaultTransactionContext()564 verify(revurderingRepoMock).lagre(argThat { it.right() shouldBe actual }, anyOrNull())565 verify(oppgaveServiceMock).opprettOppgave(566 argThat {567 it shouldBe OppgaveConfig.Revurderingsbehandling(568 saksnummer = saksnummer,569 aktørId = aktørId,570 tilordnetRessurs = null,571 clock = fixedClock,572 )573 },574 )575 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())576 mocks.verifyNoMoreInteractions()577 }578 @Test579 fun `ugyldig periode`() {580 val vedtakServiceMock = mock<VedtakService> {581 on {582 kopierGjeldendeVedtaksdata(583 any(),584 any(),585 )586 } doReturn KunneIkkeKopiereGjeldendeVedtaksdata.UgyldigPeriode(Periode.UgyldigPeriode.FraOgMedDatoMÃ¥VæreFørsteDagIMÃ¥neden)587 .left()588 }589 val mocks = RevurderingServiceMocks(590 vedtakService = vedtakServiceMock,591 )592 val actual = mocks.revurderingService.opprettRevurdering(593 OpprettRevurderingRequest(594 sakId = sakId,595 // tester at fraOgMed mÃ¥ starte pÃ¥ 1.596 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed,597 Ã¥rsak = "MELDING_FRA_BRUKER",598 begrunnelse = "Ny informasjon",599 saksbehandler = saksbehandler,600 informasjonSomRevurderes = listOf(Revurderingsteg.Inntekt),601 ),602 )603 actual shouldBe KunneIkkeOppretteRevurdering.UgyldigPeriode(Periode.UgyldigPeriode.FraOgMedDatoMÃ¥VæreFørsteDagIMÃ¥neden)604 .left()605 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(any(), any())606 mocks.verifyNoMoreInteractions()607 }608 @Test609 fun `fant ikke aktør id`() {610 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(611 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,612 vedtakListe = nonEmptyListOf(createSøknadsbehandlingVedtak()),613 clock = fixedClock,614 )615 val vedtakServiceMock = mock<VedtakService> {616 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()617 }618 val personServiceMock = mock<PersonService> {619 on { hentAktørId(any()) } doReturn KunneIkkeHentePerson.FantIkkePerson.left()620 }621 val mocks = RevurderingServiceMocks(622 vedtakService = vedtakServiceMock,623 personService = personServiceMock,624 )625 val actual = mocks.revurderingService.opprettRevurdering(626 OpprettRevurderingRequest(627 sakId = sakId,628 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,629 Ã¥rsak = "MELDING_FRA_BRUKER",630 begrunnelse = "Ny informasjon",631 saksbehandler = saksbehandler,632 informasjonSomRevurderes = listOf(Revurderingsteg.Inntekt),633 ),634 )635 actual shouldBe KunneIkkeOppretteRevurdering.FantIkkeAktørId.left()636 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)637 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })638 mocks.verifyNoMoreInteractions()639 }640 @Test641 fun `kunne ikke opprette oppgave`() {642 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(643 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,644 vedtakListe = nonEmptyListOf(createSøknadsbehandlingVedtak()),645 clock = fixedClock,646 )647 val vedtakServiceMock = mock<VedtakService> {648 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()649 }650 val personServiceMock = mock<PersonService> {651 on { hentAktørId(any()) } doReturn aktørId.right()652 }653 val oppgaveServiceMock = mock<OppgaveService> {654 on { opprettOppgave(any()) } doReturn KunneIkkeOppretteOppgave.left()655 }656 val mocks = RevurderingServiceMocks(657 vedtakService = vedtakServiceMock,658 oppgaveService = oppgaveServiceMock,659 personService = personServiceMock,660 avkortingsvarselRepo = mock {661 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen662 },663 )664 val actual = mocks.revurderingService.opprettRevurdering(665 OpprettRevurderingRequest(666 sakId = sakId,667 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,668 Ã¥rsak = "MELDING_FRA_BRUKER",669 begrunnelse = "Ny informasjon",670 saksbehandler = saksbehandler,671 informasjonSomRevurderes = informasjonSomRevurderes,672 ),673 )674 actual shouldBe KunneIkkeOppretteRevurdering.KunneIkkeOppretteOppgave.left()675 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)676 verify(personServiceMock).hentAktørId(argThat { it shouldBe fnr })677 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(sakId)678 verify(oppgaveServiceMock).opprettOppgave(679 argThat {680 it shouldBe OppgaveConfig.Revurderingsbehandling(681 saksnummer = saksnummer,682 aktørId = aktørId,683 tilordnetRessurs = null,684 clock = fixedClock,685 )686 },687 )688 mocks.verifyNoMoreInteractions()689 }690 @Test691 fun `mÃ¥ velge noe som skal revurderes`() {692 val personServiceMock = mock<PersonService> {693 on { hentAktørId(any()) } doReturn aktørId.right()694 }695 val mocks = RevurderingServiceMocks(696 personService = personServiceMock,697 )698 val actual = mocks.revurderingService.opprettRevurdering(699 OpprettRevurderingRequest(700 sakId = sakId,701 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,702 Ã¥rsak = "MELDING_FRA_BRUKER",703 begrunnelse = "Ny informasjon",704 saksbehandler = saksbehandler,705 informasjonSomRevurderes = emptyList(),706 ),707 )708 actual shouldBe KunneIkkeOppretteRevurdering.MÃ¥VelgeInformasjonSomSkalRevurderes.left()709 mocks.verifyNoMoreInteractions()710 }711 @Test712 fun `støtter ikke tilfeller hvor gjeldende vedtaksdata ikke er sammenhengende i tid`() {713 val førsteVedtak = createSøknadsbehandlingVedtak()714 val periodePlussEtÃ
r = Periode.create(715 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed.plusYears(1),716 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed.plusYears(1),717 )718 val uføregrunnlag = Grunnlag.Uføregrunnlag(719 periode = periodePlussEtÃ
r,720 uføregrad = Uføregrad.parse(25),721 forventetInntekt = 12000,722 opprettet = fixedTidspunkt,723 )724 val uførevilkÃ¥r = VilkÃ¥r.Uførhet.Vurdert.create(725 vurderingsperioder = nonEmptyListOf(726 Vurderingsperiode.Uføre.create(727 resultat = Resultat.Innvilget,728 grunnlag = uføregrunnlag,729 periode = periodePlussEtÃ
r,730 begrunnelse = "ok",731 opprettet = fixedTidspunkt,732 ),733 ),734 )735 val bosituasjon = listOf(736 Grunnlag.Bosituasjon.Fullstendig.Enslig(737 id = UUID.randomUUID(),738 opprettet = fixedTidspunkt,739 periode = periodePlussEtÃ
r,740 begrunnelse = null,741 ),742 )743 val andreVedtak = createSøknadsbehandlingVedtak().copy(744 periode = periodePlussEtÃ
r,745 behandling = createInnvilgetBehandling().copy(746 grunnlagsdata = Grunnlagsdata.create(747 bosituasjon = bosituasjon,748 ),749 vilkÃ¥rsvurderinger = VilkÃ¥rsvurderinger.Søknadsbehandling(750 uføre = uførevilkÃ¥r,751 formue = formuevilkÃ¥rIkkeVurdert(),752 ),753 stønadsperiode = Stønadsperiode.create(periodePlussEtÃ
r),754 ),755 )756 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(757 periode = Periode.create(758 førsteVedtak.periode.fraOgMed,759 andreVedtak.periode.tilOgMed,760 ),761 vedtakListe = nonEmptyListOf(762 førsteVedtak,763 andreVedtak,764 ),765 clock = fixedClock,766 )767 val vedtakServiceMock = mock<VedtakService> {768 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()769 }770 val mocks = RevurderingServiceMocks(771 vedtakService = vedtakServiceMock,772 )773 val actual = mocks.revurderingService.opprettRevurdering(774 OpprettRevurderingRequest(775 sakId = sakId,776 fraOgMed = periodeNesteMånedOgTreMånederFram.fraOgMed,777 årsak = "MELDING_FRA_BRUKER",778 begrunnelse = "Ny informasjon",779 saksbehandler = saksbehandler,780 informasjonSomRevurderes = informasjonSomRevurderes,781 ),782 )783 actual shouldBe KunneIkkeOppretteRevurdering.TidslinjeForVedtakErIkkeKontinuerlig.left()784 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMånedOgTreMånederFram.fraOgMed)785 mocks.verifyNoMoreInteractions()786 }787 @Test788 fun `får feilmelding dersom saken har utestående avkorting, men revurderingsperioden inneholder ikke perioden for avkortingen`() {789 val clock = TikkendeKlokke(fixedClock)790 val (sak, opphørUtenlandsopphold) = vedtakRevurdering(791 clock = clock,792 revurderingsperiode = Periode.create(1.juni(2021), 31.desember(2021)),793 vilkårOverrides = listOf(794 utenlandsoppholdAvslag(795 id = UUID.randomUUID(),796 opprettet = fixedTidspunkt,797 periode = Periode.create(1.juni(2021), 31.desember(2021)),798 ),799 ),800 )801 val nyRevurderingsperiode = Periode.create(1.juli(2021), 31.desember(2021))802 val uteståendeAvkorting =803 (opphørUtenlandsopphold as VedtakSomKanRevurderes.EndringIYtelse.OpphørtRevurdering).behandling.avkorting.let {804 (it as AvkortingVedRevurdering.Iverksatt.OpprettNyttAvkortingsvarsel).avkortingsvarsel805 }806 RevurderingServiceMocks(807 vedtakService = mock {808 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn sak.kopierGjeldendeVedtaksdata(809 fraOgMed = nyRevurderingsperiode.fraOgMed,810 clock = clock,811 ).getOrFail().right()812 },813 personService = mock {814 on { hentAktørId(any()) } doReturn aktørId.right()815 },816 avkortingsvarselRepo = mock {817 on { hentUtestående(any()) } doReturn uteståendeAvkorting818 },819 ).let {820 it.revurderingService.opprettRevurdering(821 OpprettRevurderingRequest(822 sakId = sakId,823 fraOgMed = nyRevurderingsperiode.fraOgMed,824 årsak = "MELDING_FRA_BRUKER",825 begrunnelse = "Ny informasjon",826 saksbehandler = saksbehandler,827 informasjonSomRevurderes = listOf(Revurderingsteg.Utenlandsopphold),828 ),829 ) shouldBe KunneIkkeOppretteRevurdering.UteståendeAvkortingMåRevurderesEllerAvkortesINyPeriode(juni(2021))830 .left()831 }832 }833}...
OppdaterRevurderingServiceTest.kt
Source:OppdaterRevurderingServiceTest.kt
1package no.nav.su.se.bakover.service.revurdering2import arrow.core.NonEmptyList3import arrow.core.getOrHandle4import arrow.core.left5import arrow.core.nonEmptyListOf6import arrow.core.right7import io.kotest.assertions.fail8import io.kotest.matchers.collections.shouldHaveSize9import io.kotest.matchers.shouldBe10import io.kotest.matchers.types.beOfType11import no.nav.su.se.bakover.common.desember12import no.nav.su.se.bakover.common.juli13import no.nav.su.se.bakover.common.juni14import no.nav.su.se.bakover.common.oktober15import no.nav.su.se.bakover.common.periode.Periode16import no.nav.su.se.bakover.common.periode.juni17import no.nav.su.se.bakover.domain.NavIdentBruker18import no.nav.su.se.bakover.domain.avkorting.AvkortingVedRevurdering19import no.nav.su.se.bakover.domain.avkorting.Avkortingsvarsel20import no.nav.su.se.bakover.domain.behandling.Attestering21import no.nav.su.se.bakover.domain.behandling.Attesteringshistorikk22import no.nav.su.se.bakover.domain.grunnlag.Grunnlag23import no.nav.su.se.bakover.domain.grunnlag.Grunnlagsdata24import no.nav.su.se.bakover.domain.grunnlag.Uføregrad25import no.nav.su.se.bakover.domain.oppdrag.tilbakekreving.IkkeBehovForTilbakekrevingFerdigbehandlet26import no.nav.su.se.bakover.domain.revurdering.ForhÃ¥ndsvarsel27import no.nav.su.se.bakover.domain.revurdering.InformasjonSomRevurderes28import no.nav.su.se.bakover.domain.revurdering.IverksattRevurdering29import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering30import no.nav.su.se.bakover.domain.revurdering.RevurderingRepo31import no.nav.su.se.bakover.domain.revurdering.Revurderingsteg32import no.nav.su.se.bakover.domain.revurdering.RevurderingsÃ¥rsak33import no.nav.su.se.bakover.domain.revurdering.Vurderingstatus34import no.nav.su.se.bakover.domain.søknadsbehandling.Stønadsperiode35import no.nav.su.se.bakover.domain.vedtak.GjeldendeVedtaksdata36import no.nav.su.se.bakover.domain.vedtak.VedtakSomKanRevurderes37import no.nav.su.se.bakover.domain.vilkÃ¥r.OpplysningspliktVilkÃ¥r38import no.nav.su.se.bakover.domain.vilkÃ¥r.Resultat39import no.nav.su.se.bakover.domain.vilkÃ¥r.UtenlandsoppholdVilkÃ¥r40import no.nav.su.se.bakover.domain.vilkÃ¥r.VilkÃ¥r41import no.nav.su.se.bakover.domain.vilkÃ¥r.VilkÃ¥rsvurderinger42import no.nav.su.se.bakover.domain.vilkÃ¥r.Vurderingsperiode43import no.nav.su.se.bakover.service.argThat44import no.nav.su.se.bakover.service.formueVilkÃ¥r45import no.nav.su.se.bakover.service.revurdering.RevurderingTestUtils.periodeNesteMÃ¥nedOgTreMÃ¥nederFram46import no.nav.su.se.bakover.service.revurdering.RevurderingTestUtils.stønadsperiodeNesteMÃ¥nedOgTreMÃ¥nederFram47import no.nav.su.se.bakover.service.vedtak.KunneIkkeKopiereGjeldendeVedtaksdata48import no.nav.su.se.bakover.service.vedtak.VedtakService49import no.nav.su.se.bakover.test.TikkendeKlokke50import no.nav.su.se.bakover.test.aktørId51import no.nav.su.se.bakover.test.create52import no.nav.su.se.bakover.test.fixedClock53import no.nav.su.se.bakover.test.fixedLocalDate54import no.nav.su.se.bakover.test.fixedTidspunkt55import no.nav.su.se.bakover.test.formuevilkÃ¥rIkkeVurdert56import no.nav.su.se.bakover.test.getOrFail57import no.nav.su.se.bakover.test.innvilgetUførevilkÃ¥rForventetInntekt1200058import no.nav.su.se.bakover.test.oppgaveIdRevurdering59import no.nav.su.se.bakover.test.opprettetRevurdering60import no.nav.su.se.bakover.test.opprettetRevurderingFraInnvilgetSøknadsbehandlingsVedtak61import no.nav.su.se.bakover.test.revurderingId62import no.nav.su.se.bakover.test.sakId63import no.nav.su.se.bakover.test.saksbehandler64import no.nav.su.se.bakover.test.saksnummer65import no.nav.su.se.bakover.test.stønadsperiode202166import no.nav.su.se.bakover.test.utenlandsoppholdAvslag67import no.nav.su.se.bakover.test.vedtakRevurdering68import no.nav.su.se.bakover.test.vedtakSøknadsbehandlingIverksattInnvilget69import no.nav.su.se.bakover.test.vilkÃ¥rsvurderingRevurderingIkkeVurdert70import org.junit.jupiter.api.Test71import org.mockito.kotlin.any72import org.mockito.kotlin.anyOrNull73import org.mockito.kotlin.doReturn74import org.mockito.kotlin.eq75import org.mockito.kotlin.inOrder76import org.mockito.kotlin.mock77import org.mockito.kotlin.verify78import java.time.temporal.ChronoUnit79import java.util.UUID80internal class OppdaterRevurderingServiceTest {81 private val sakOgIverksattInnvilgetSøknadsbehandlingsvedtak = vedtakSøknadsbehandlingIverksattInnvilget(82 stønadsperiode = stønadsperiodeNesteMÃ¥nedOgTreMÃ¥nederFram,83 )84 // Merk at søknadsbehandlingens uførevilkÃ¥r ikke er likt som OpprettetRevurdering før vi kaller oppdater-funksjonen, men vi forventer at de er like etter oppdateringa.85 private val vilkÃ¥rsvurderingUføre =86 innvilgetUførevilkÃ¥rForventetInntekt12000(periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram)87 // TODO jah: Vi burde ha en domeneklasse/factory som oppretter en revurdering fra et Vedtak, sÃ¥ slipper vi Ã¥ gjøre disse antagelsene i testene88 private val opprettetRevurdering = opprettetRevurderingFraInnvilgetSøknadsbehandlingsVedtak(89 stønadsperiode = stønadsperiodeNesteMÃ¥nedOgTreMÃ¥nederFram,90 revurderingsperiode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,91 sakOgVedtakSomKanRevurderes = sakOgIverksattInnvilgetSøknadsbehandlingsvedtak,92 ).second.copy(93 grunnlagsdata = Grunnlagsdata.create(94 bosituasjon = listOf(95 Grunnlag.Bosituasjon.Fullstendig.Enslig(96 id = UUID.randomUUID(),97 opprettet = fixedTidspunkt,98 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,99 begrunnelse = null,100 ),101 ),102 ),103 vilkÃ¥rsvurderinger = VilkÃ¥rsvurderinger.Revurdering(104 uføre = vilkÃ¥rsvurderingUføre,105 formue = formuevilkÃ¥rIkkeVurdert(),106 utenlandsopphold = UtenlandsoppholdVilkÃ¥r.IkkeVurdert,107 opplysningsplikt = OpplysningspliktVilkÃ¥r.IkkeVurdert,108 ),109 informasjonSomRevurderes = InformasjonSomRevurderes.create(mapOf(Revurderingsteg.Uførhet to Vurderingstatus.IkkeVurdert)),110 )111 @Test112 fun `ugyldig begrunnelse`() {113 val mocks = RevurderingServiceMocks()114 val actual = mocks.revurderingService.oppdaterRevurdering(115 OppdaterRevurderingRequest(116 revurderingId = revurderingId,117 fraOgMed = fixedLocalDate,118 Ã¥rsak = "MELDING_FRA_BRUKER",119 begrunnelse = "",120 saksbehandler = saksbehandler,121 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),122 ),123 )124 actual shouldBe KunneIkkeOppdatereRevurdering.UgyldigBegrunnelse.left()125 mocks.verifyNoMoreInteractions()126 }127 @Test128 fun `ugyldig Ã¥rsak`() {129 val mocks = RevurderingServiceMocks()130 val actual = mocks.revurderingService.oppdaterRevurdering(131 OppdaterRevurderingRequest(132 revurderingId = revurderingId,133 fraOgMed = fixedLocalDate,134 Ã¥rsak = "UGYLDIG_Ã
RSAK",135 begrunnelse = "gyldig begrunnelse",136 saksbehandler = saksbehandler,137 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),138 ),139 )140 actual shouldBe KunneIkkeOppdatereRevurdering.UgyldigÃ
rsak.left()141 mocks.verifyNoMoreInteractions()142 }143 @Test144 fun `ugyldig periode`() {145 val vedtakServiceMock = mock<VedtakService> {146 on {147 kopierGjeldendeVedtaksdata(148 any(),149 any(),150 )151 } doReturn KunneIkkeKopiereGjeldendeVedtaksdata.UgyldigPeriode(Periode.UgyldigPeriode.FraOgMedDatoMÃ¥VæreFørsteDagIMÃ¥neden)152 .left()153 }154 val revurderingRepoMock = mock<RevurderingRepo> {155 on { hent(any()) } doReturn opprettetRevurdering156 }157 val mocks = RevurderingServiceMocks(158 vedtakService = vedtakServiceMock,159 revurderingRepo = revurderingRepoMock,160 )161 val actual = mocks.revurderingService.oppdaterRevurdering(162 OppdaterRevurderingRequest(163 revurderingId = revurderingId,164 fraOgMed = fixedLocalDate,165 Ã¥rsak = "MELDING_FRA_BRUKER",166 begrunnelse = "gyldig begrunnelse",167 saksbehandler = saksbehandler,168 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),169 ),170 )171 actual shouldBe KunneIkkeOppdatereRevurdering.UgyldigPeriode(Periode.UgyldigPeriode.FraOgMedDatoMÃ¥VæreFørsteDagIMÃ¥neden)172 .left()173 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(any(), any())174 verify(revurderingRepoMock).hent(any())175 mocks.verifyNoMoreInteractions()176 }177 @Test178 fun `Fant ikke revurdering`() {179 val revurderingRepoMock = mock<RevurderingRepo> {180 on { hent(any()) } doReturn null181 }182 val mocks = RevurderingServiceMocks(revurderingRepo = revurderingRepoMock)183 val actual = mocks.revurderingService.oppdaterRevurdering(184 OppdaterRevurderingRequest(185 revurderingId = revurderingId,186 fraOgMed = fixedLocalDate,187 Ã¥rsak = "MELDING_FRA_BRUKER",188 begrunnelse = "gyldig begrunnelse",189 saksbehandler = saksbehandler,190 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),191 ),192 )193 actual shouldBe KunneIkkeOppdatereRevurdering.FantIkkeRevurdering.left()194 verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId })195 mocks.verifyNoMoreInteractions()196 }197 @Test198 fun `Kan ikke oppdatere sendt forhÃ¥ndsvarslet revurdering`() {199 val revurderingRepoMock = mock<RevurderingRepo> {200 on { hent(any()) } doReturn opprettetRevurdering.copy(201 forhÃ¥ndsvarsel = ForhÃ¥ndsvarsel.UnderBehandling.Sendt,202 )203 }204 val mocks = RevurderingServiceMocks(revurderingRepo = revurderingRepoMock)205 val actual = mocks.revurderingService.oppdaterRevurdering(206 OppdaterRevurderingRequest(207 revurderingId = revurderingId,208 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed.plus(1, ChronoUnit.DAYS),209 Ã¥rsak = "REGULER_GRUNNBELÃP",210 begrunnelse = "gyldig begrunnelse",211 saksbehandler = saksbehandler,212 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),213 ),214 )215 actual shouldBe KunneIkkeOppdatereRevurdering.KanIkkeOppdatereRevurderingSomErForhÃ¥ndsvarslet.left()216 verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId })217 mocks.verifyNoMoreInteractions()218 }219 @Test220 fun `Kan ikke oppdatere besluttet forhÃ¥ndsvarslet revurdering`() {221 val revurderingRepoMock = mock<RevurderingRepo> {222 on { hent(any()) } doReturn opprettetRevurdering.copy(223 forhÃ¥ndsvarsel = ForhÃ¥ndsvarsel.Ferdigbehandlet.ForhÃ¥ndsvarslet.FortsettMedSammeGrunnlag("begrunnelse"),224 )225 }226 val mocks = RevurderingServiceMocks(revurderingRepo = revurderingRepoMock)227 val actual = mocks.revurderingService.oppdaterRevurdering(228 OppdaterRevurderingRequest(229 revurderingId = revurderingId,230 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed.plus(1, ChronoUnit.DAYS),231 Ã¥rsak = "REGULER_GRUNNBELÃP",232 begrunnelse = "gyldig begrunnelse",233 saksbehandler = saksbehandler,234 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),235 ),236 )237 actual shouldBe KunneIkkeOppdatereRevurdering.KanIkkeOppdatereRevurderingSomErForhÃ¥ndsvarslet.left()238 verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId })239 mocks.verifyNoMoreInteractions()240 }241 @Test242 fun `Oppdatering av iverksatt revurdering gir ugyldig tilstand`() {243 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(244 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,245 vedtakListe = nonEmptyListOf(sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second),246 clock = fixedClock,247 )248 val vedtakServiceMock = mock<VedtakService> {249 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()250 }251 val revurderingRepoMock = mock<RevurderingRepo> {252 on { hent(any()) } doReturn opprettetRevurdering.let {253 IverksattRevurdering.Innvilget(254 id = it.id,255 periode = it.periode,256 opprettet = it.opprettet,257 tilRevurdering = it.tilRevurdering,258 saksbehandler = it.saksbehandler,259 oppgaveId = it.oppgaveId,260 fritekstTilBrev = it.fritekstTilBrev,261 revurderingsÃ¥rsak = it.revurderingsÃ¥rsak,262 beregning = mock(),263 attesteringer = Attesteringshistorikk.empty().leggTilNyAttestering(264 Attestering.Iverksatt(265 attestant = NavIdentBruker.Attestant("navIdent"),266 opprettet = fixedTidspunkt,267 ),268 ),269 simulering = mock(),270 forhÃ¥ndsvarsel = ForhÃ¥ndsvarsel.Ferdigbehandlet.SkalIkkeForhÃ¥ndsvarsles,271 grunnlagsdata = Grunnlagsdata.create(272 bosituasjon = listOf(273 Grunnlag.Bosituasjon.Fullstendig.Enslig(274 id = UUID.randomUUID(),275 opprettet = fixedTidspunkt,276 periode = it.periode,277 begrunnelse = null,278 ),279 ),280 ),281 vilkÃ¥rsvurderinger = vilkÃ¥rsvurderingRevurderingIkkeVurdert(),282 informasjonSomRevurderes = it.informasjonSomRevurderes,283 avkorting = AvkortingVedRevurdering.Iverksatt.IngenNyEllerUtestÃ¥ende,284 tilbakekrevingsbehandling = IkkeBehovForTilbakekrevingFerdigbehandlet,285 )286 }287 }288 val mocks = RevurderingServiceMocks(289 vedtakService = vedtakServiceMock,290 revurderingRepo = revurderingRepoMock,291 avkortingsvarselRepo = mock {292 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen293 },294 )295 val actual = mocks.revurderingService.oppdaterRevurdering(296 OppdaterRevurderingRequest(297 revurderingId = revurderingId,298 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,299 Ã¥rsak = "MELDING_FRA_BRUKER",300 begrunnelse = "gyldig begrunnelse",301 saksbehandler = saksbehandler,302 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),303 ),304 )305 actual shouldBe KunneIkkeOppdatereRevurdering.UgyldigTilstand(306 IverksattRevurdering.Innvilget::class,307 OpprettetRevurdering::class,308 ).left()309 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())310 verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId })311 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(312 opprettetRevurdering.sakId,313 opprettetRevurdering.periode.fraOgMed,314 )315 mocks.verifyNoMoreInteractions()316 }317 @Test318 fun `oppdater en revurdering`() {319 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(320 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,321 vedtakListe = nonEmptyListOf(sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second),322 clock = fixedClock,323 )324 val vedtakServiceMock = mock<VedtakService> {325 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()326 }327 val revurderingRepoMock = mock<RevurderingRepo> {328 on { hent(any()) } doReturn opprettetRevurdering329 }330 val mocks = RevurderingServiceMocks(331 vedtakService = vedtakServiceMock,332 revurderingRepo = revurderingRepoMock,333 avkortingsvarselRepo = mock {334 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen335 },336 )337 val oppdatertPeriode = Periode.create(338 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed.plus(1, ChronoUnit.MONTHS),339 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed,340 )341 val actual = mocks.revurderingService.oppdaterRevurdering(342 // Bruker andre verdier enn den opprinnelige revurderingen for Ã¥ se at de faktisk forandrer seg343 OppdaterRevurderingRequest(344 revurderingId = revurderingId,345 fraOgMed = oppdatertPeriode.fraOgMed,346 Ã¥rsak = "ANDRE_KILDER",347 begrunnelse = "bør bli oppdatert",348 saksbehandler = NavIdentBruker.Saksbehandler("En ny saksbehandlinger"),349 informasjonSomRevurderes = listOf(Revurderingsteg.Inntekt),350 ),351 ).getOrHandle {352 fail("$it")353 }354 actual.let { oppdatertRevurdering ->355 oppdatertRevurdering.periode shouldBe periodeNesteMÃ¥nedOgTreMÃ¥nederFram356 oppdatertRevurdering.tilRevurdering shouldBe sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second357 oppdatertRevurdering.saksbehandler shouldBe saksbehandler358 oppdatertRevurdering.oppgaveId shouldBe oppgaveIdRevurdering359 oppdatertRevurdering.fritekstTilBrev shouldBe ""360 oppdatertRevurdering.revurderingsÃ¥rsak shouldBe RevurderingsÃ¥rsak(361 Ã¥rsak = RevurderingsÃ¥rsak.Ã
rsak.ANDRE_KILDER,362 begrunnelse = RevurderingsÃ¥rsak.Begrunnelse.create("bør bli oppdatert"),363 )364 oppdatertRevurdering.forhÃ¥ndsvarsel shouldBe null365 oppdatertRevurdering.vilkÃ¥rsvurderinger.uføre.grunnlag.let {366 it shouldHaveSize 1367 it[0].ekvivalentMed(sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second.behandling.vilkÃ¥rsvurderinger.uføre.grunnlag.first())368 }369 oppdatertRevurdering.vilkÃ¥rsvurderinger.uføre.ekvivalentMed(sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second.behandling.vilkÃ¥rsvurderinger.uføre as VilkÃ¥r.Uførhet.Vurdert)370 oppdatertRevurdering.informasjonSomRevurderes shouldBe InformasjonSomRevurderes.create(mapOf(Revurderingsteg.Inntekt to Vurderingstatus.IkkeVurdert))371 }372 inOrder(373 *mocks.all(),374 ) {375 verify(revurderingRepoMock).hent(argThat { it shouldBe revurderingId })376 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(377 sakId = argThat { it shouldBe sakId },378 fraOgMed = argThat {379 it shouldBe oppdatertPeriode.fraOgMed380 },381 )382 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())383 verify(revurderingRepoMock).defaultTransactionContext()384 verify(revurderingRepoMock).lagre(argThat { it shouldBe actual }, anyOrNull())385 }386 mocks.verifyNoMoreInteractions()387 }388 @Test389 fun `mÃ¥ velge minst ting som skal revurderes`() {390 val revurderingRepoMock = mock<RevurderingRepo> {391 on { hent(any()) } doReturn opprettetRevurdering392 }393 val mocks = RevurderingServiceMocks(revurderingRepo = revurderingRepoMock)394 mocks.revurderingService.oppdaterRevurdering(395 OppdaterRevurderingRequest(396 revurderingId = revurderingId,397 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,398 Ã¥rsak = "MELDING_FRA_BRUKER",399 begrunnelse = "Ny informasjon",400 saksbehandler = saksbehandler,401 informasjonSomRevurderes = emptyList(),402 ),403 ) shouldBe KunneIkkeOppdatereRevurdering.MÃ¥VelgeInformasjonSomSkalRevurderes.left()404 }405 @Test406 fun `grunnlag resettes dersom man oppdaterer revurderingen`() {407 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(408 periode = periodeNesteMÃ¥nedOgTreMÃ¥nederFram,409 vedtakListe = nonEmptyListOf(sakOgIverksattInnvilgetSøknadsbehandlingsvedtak.second),410 clock = fixedClock,411 )412 val vedtakServiceMock = mock<VedtakService> {413 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()414 }415 val revurderingRepoMock = mock<RevurderingRepo> {416 on { hent(any()) } doReturn opprettetRevurdering.copy(417 // simuler at det er gjort endringer før oppdatering418 grunnlagsdata = Grunnlagsdata.create(),419 vilkÃ¥rsvurderinger = vilkÃ¥rsvurderingRevurderingIkkeVurdert(),420 )421 }422 val mocks = RevurderingServiceMocks(423 vedtakService = vedtakServiceMock,424 revurderingRepo = revurderingRepoMock,425 avkortingsvarselRepo = mock {426 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen427 },428 )429 val actual = mocks.revurderingService.oppdaterRevurdering(430 OppdaterRevurderingRequest(431 revurderingId = revurderingId,432 fraOgMed = periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed,433 Ã¥rsak = "REGULER_GRUNNBELÃP",434 begrunnelse = "g-regulering",435 saksbehandler = saksbehandler,436 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),437 ),438 ).getOrHandle { fail("$it") }439 actual.periode.fraOgMed shouldBe periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed440 actual.revurderingsÃ¥rsak.Ã¥rsak shouldBe RevurderingsÃ¥rsak.Ã
rsak.REGULER_GRUNNBELÃP441 actual.revurderingsÃ¥rsak.begrunnelse.toString() shouldBe "g-regulering"442 inOrder(443 *mocks.all(),444 ) {445 verify(revurderingRepoMock).hent(revurderingId)446 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(447 opprettetRevurdering.sakId,448 opprettetRevurdering.periode.fraOgMed,449 )450 verify(mocks.avkortingsvarselRepo).hentUtestÃ¥ende(any())451 verify(revurderingRepoMock).defaultTransactionContext()452 verify(revurderingRepoMock).lagre(eq(actual), anyOrNull())453 }454 mocks.verifyNoMoreInteractions()455 }456 @Test457 fun `støtter ikke tilfeller hvor gjeldende vedtaksdata ikke er sammenhengende i tid`() {458 val førsteVedtak = vedtakSøknadsbehandlingIverksattInnvilget().second459 val periodePlussEtÃ
r = Periode.create(460 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed.plusYears(1),461 periodeNesteMÃ¥nedOgTreMÃ¥nederFram.tilOgMed.plusYears(1),462 )463 val andreVedtakFormueVilkÃ¥r = formueVilkÃ¥r(periodePlussEtÃ
r)464 val andreVedtak = vedtakSøknadsbehandlingIverksattInnvilget().second.copy(465 periode = periodePlussEtÃ
r,466 behandling = vedtakSøknadsbehandlingIverksattInnvilget().second.behandling.copy(467 stønadsperiode = Stønadsperiode.create(periodePlussEtÃ
r),468 grunnlagsdata = Grunnlagsdata.create(469 bosituasjon = listOf(470 Grunnlag.Bosituasjon.Fullstendig.Enslig(471 id = UUID.randomUUID(),472 opprettet = fixedTidspunkt,473 periode = periodePlussEtÃ
r,474 begrunnelse = null,475 )476 )477 ),478 vilkÃ¥rsvurderinger = VilkÃ¥rsvurderinger.Søknadsbehandling(479 VilkÃ¥r.Uførhet.Vurdert.create(480 vurderingsperioder = nonEmptyListOf(481 Vurderingsperiode.Uføre.create(482 resultat = Resultat.Innvilget,483 grunnlag = Grunnlag.Uføregrunnlag(484 periode = periodePlussEtÃ
r,485 uføregrad = Uføregrad.parse(25),486 forventetInntekt = 12000,487 opprettet = fixedTidspunkt,488 ),489 periode = periodePlussEtÃ
r,490 begrunnelse = "ok",491 opprettet = fixedTidspunkt,492 ),493 ),494 ),495 andreVedtakFormueVilkÃ¥r,496 ),497 ),498 )499 val gjeldendeVedtaksdata = GjeldendeVedtaksdata(500 periode = Periode.create(501 fraOgMed = førsteVedtak.periode.fraOgMed,502 tilOgMed = andreVedtak.periode.tilOgMed,503 ),504 vedtakListe = nonEmptyListOf(505 førsteVedtak,506 andreVedtak,507 ),508 clock = fixedClock,509 )510 val vedtakServiceMock = mock<VedtakService> {511 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn gjeldendeVedtaksdata.right()512 }513 val revurderingRepoMock = mock<RevurderingRepo> {514 on { hent(any()) } doReturn opprettetRevurdering515 }516 val mocks = RevurderingServiceMocks(517 vedtakService = vedtakServiceMock,518 revurderingRepo = revurderingRepoMock,519 )520 val actual = mocks.revurderingService.oppdaterRevurdering(521 OppdaterRevurderingRequest(522 revurderingId = opprettetRevurdering.id,523 fraOgMed = opprettetRevurdering.periode.fraOgMed,524 Ã¥rsak = "MELDING_FRA_BRUKER",525 begrunnelse = "Test",526 saksbehandler = opprettetRevurdering.saksbehandler,527 informasjonSomRevurderes = listOf(Revurderingsteg.Uførhet),528 ),529 )530 actual shouldBe KunneIkkeOppdatereRevurdering.TidslinjeForVedtakErIkkeKontinuerlig.left()531 verify(revurderingRepoMock).hent(opprettetRevurdering.id)532 verify(vedtakServiceMock).kopierGjeldendeVedtaksdata(sakId, periodeNesteMÃ¥nedOgTreMÃ¥nederFram.fraOgMed)533 mocks.verifyNoMoreInteractions()534 }535 @Test536 fun `fÃ¥r lov til Ã¥ oppdatere revurdering dersom periode overlapper opphørsvedtak for utenlandsopphold som ikke førte til avkorting`() {537 val tikkendeKlokke = TikkendeKlokke()538 val sakOgSøknadsvedtak = vedtakSøknadsbehandlingIverksattInnvilget(539 saksnummer = saksnummer,540 stønadsperiode = stønadsperiode2021,541 clock = tikkendeKlokke,542 )543 val revurderingsperiode = Periode.create(1.oktober(2021), 31.desember(2021))544 val sakOgSøknadsvedtakOgRevurderingsvedtak = vedtakRevurdering(545 clock = tikkendeKlokke,546 revurderingsperiode = revurderingsperiode,547 sakOgVedtakSomKanRevurderes = sakOgSøknadsvedtak,548 vilkÃ¥rOverrides = listOf(549 utenlandsoppholdAvslag(550 periode = revurderingsperiode,551 ),552 ),553 )554 val (sak3, opprettetRevurdering) = opprettetRevurdering(555 sakOgVedtakSomKanRevurderes = sakOgSøknadsvedtakOgRevurderingsvedtak,556 )557 val serviceAndMocks = RevurderingServiceMocks(558 revurderingRepo = mock {559 on { hent(any()) } doReturn opprettetRevurdering560 },561 vedtakService = mock {562 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn GjeldendeVedtaksdata(563 periode = revurderingsperiode,564 vedtakListe = NonEmptyList.fromListUnsafe(sak3.vedtakListe.filterIsInstance<VedtakSomKanRevurderes>()),565 clock = fixedClock,566 ).right()567 },568 avkortingsvarselRepo = mock {569 on { hentUtestÃ¥ende(any()) } doReturn Avkortingsvarsel.Ingen570 },571 )572 serviceAndMocks.revurderingService.oppdaterRevurdering(573 oppdaterRevurderingRequest = OppdaterRevurderingRequest(574 revurderingId = opprettetRevurdering.id,575 fraOgMed = 1.oktober(2021),576 Ã¥rsak = RevurderingsÃ¥rsak.Ã
rsak.ANDRE_KILDER.toString(),577 begrunnelse = "lol",578 saksbehandler = saksbehandler,579 informasjonSomRevurderes = listOf(Revurderingsteg.Utenlandsopphold),580 ),581 ).getOrFail() shouldBe beOfType<OpprettetRevurdering>()582 }583 @Test584 fun `får feilmelding dersom saken har utestående avkorting, men revurderingsperioden inneholder ikke perioden for avkortingen`() {585 val clock = TikkendeKlokke(fixedClock)586 val (sak, opphørUtenlandsopphold) = vedtakRevurdering(587 clock = clock,588 revurderingsperiode = Periode.create(1.juni(2021), 31.desember(2021)),589 vilkårOverrides = listOf(590 utenlandsoppholdAvslag(591 id = UUID.randomUUID(),592 opprettet = fixedTidspunkt,593 periode = Periode.create(1.juni(2021), 31.desember(2021)),594 ),595 ),596 )597 val nyRevurderingsperiode = Periode.create(1.juli(2021), 31.desember(2021))598 val uteståendeAvkorting =599 (opphørUtenlandsopphold as VedtakSomKanRevurderes.EndringIYtelse.OpphørtRevurdering).behandling.avkorting.let {600 (it as AvkortingVedRevurdering.Iverksatt.OpprettNyttAvkortingsvarsel).avkortingsvarsel601 }602 val opprettetRevurdering = opprettetRevurdering().second603 RevurderingServiceMocks(604 revurderingRepo = mock {605 on { hent(any()) } doReturn opprettetRevurdering606 },607 vedtakService = mock {608 on { kopierGjeldendeVedtaksdata(any(), any()) } doReturn sak.kopierGjeldendeVedtaksdata(609 fraOgMed = nyRevurderingsperiode.fraOgMed,610 clock = clock,611 ).getOrFail().right()612 },613 personService = mock {614 on { hentAktørId(any()) } doReturn aktørId.right()615 },616 avkortingsvarselRepo = mock {617 on { hentUtestående(any()) } doReturn uteståendeAvkorting618 },619 ).let {620 it.revurderingService.oppdaterRevurdering(621 OppdaterRevurderingRequest(622 revurderingId = sakId,623 fraOgMed = nyRevurderingsperiode.fraOgMed,624 årsak = "MELDING_FRA_BRUKER",625 begrunnelse = "Ny informasjon",626 saksbehandler = saksbehandler,627 informasjonSomRevurderes = listOf(Revurderingsteg.Utenlandsopphold),628 ),629 ) shouldBe KunneIkkeOppdatereRevurdering.UteståendeAvkortingMåRevurderesEllerAvkortesINyPeriode(juni(2021))630 .left()631 }632 }633}...
RevurderingLeggTilFormueServiceTest.kt
Source:RevurderingLeggTilFormueServiceTest.kt
1package no.nav.su.se.bakover.service.revurdering2import arrow.core.Nel3import arrow.core.getOrHandle4import arrow.core.left5import arrow.core.nonEmptyListOf6import io.kotest.assertions.arrow.core.shouldHaveSize7import io.kotest.matchers.collections.shouldContain8import io.kotest.matchers.collections.shouldHaveSize9import io.kotest.matchers.shouldBe10import no.nav.su.se.bakover.common.desember11import no.nav.su.se.bakover.common.januar12import no.nav.su.se.bakover.common.juni13import no.nav.su.se.bakover.common.mai14import no.nav.su.se.bakover.common.mars15import no.nav.su.se.bakover.common.periode.Periode16import no.nav.su.se.bakover.common.periode.år17import no.nav.su.se.bakover.domain.beregning.fradrag.FradragTilhører18import no.nav.su.se.bakover.domain.beregning.fradrag.Fradragstype19import no.nav.su.se.bakover.domain.grunnlag.Formuegrunnlag20import no.nav.su.se.bakover.domain.grunnlag.Grunnlag21import no.nav.su.se.bakover.domain.grunnlag.Konsistensproblem22import no.nav.su.se.bakover.domain.revurdering.InformasjonSomRevurderes23import no.nav.su.se.bakover.domain.revurdering.OpprettetRevurdering24import no.nav.su.se.bakover.domain.revurdering.RevurderingTilAttestering25import no.nav.su.se.bakover.domain.revurdering.Revurderingsteg26import no.nav.su.se.bakover.domain.revurdering.RevurderingsutfallSomIkkeStøttes27import no.nav.su.se.bakover.domain.revurdering.Vurderingstatus28import no.nav.su.se.bakover.domain.vilkår.Resultat29import no.nav.su.se.bakover.domain.vilkår.UtenlandsoppholdVilkår30import no.nav.su.se.bakover.domain.vilkår.Vilkår31import no.nav.su.se.bakover.service.argThat32import no.nav.su.se.bakover.test.avslåttUførevilkårUtenGrunnlag33import no.nav.su.se.bakover.test.empty34import no.nav.su.se.bakover.test.epsFnr35import no.nav.su.se.bakover.test.fixedTidspunkt36import no.nav.su.se.bakover.test.formuevilkårIkkeVurdert37import no.nav.su.se.bakover.test.getOrFail38import no.nav.su.se.bakover.test.lagFradragsgrunnlag39import no.nav.su.se.bakover.test.opprettetRevurdering40import no.nav.su.se.bakover.test.revurderingId41import no.nav.su.se.bakover.test.revurderingTilAttestering42import no.nav.su.se.bakover.test.shouldBeType43import no.nav.su.se.bakover.test.stønadsperiode202144import org.junit.jupiter.api.Test45import org.mockito.kotlin.any46import org.mockito.kotlin.anyOrNull47import org.mockito.kotlin.doReturn48import org.mockito.kotlin.inOrder49import org.mockito.kotlin.mock50import org.mockito.kotlin.verify51import java.util.*52internal class RevurderingLeggTilFormueServiceTest {53 @Test54 fun `legg til revurdering av formue happy case`() {55 val nyFormue = LeggTilFormuegrunnlagRequest.Grunnlag(56 periode = år(2021),57 epsFormue = Formuegrunnlag.Verdier.empty(),58 søkersFormue = Formuegrunnlag.Verdier.empty(),59 begrunnelse = null,60 )61 RevurderingServiceMocks(62 revurderingRepo = mock {63 on { hent(any()) } doReturn opprettetRevurdering(64 informasjonSomRevurderes = InformasjonSomRevurderes.create(listOf(Revurderingsteg.Formue)),65 grunnlagsdataOverrides = listOf(66 lagFradragsgrunnlag(67 type = Fradragstype.Arbeidsinntekt,68 månedsbeløp = 10000.0,69 periode = år(2021),70 utenlandskInntekt = null,71 tilhører = FradragTilhører.BRUKER,72 ),73 Grunnlag.Bosituasjon.Fullstendig.EktefellePartnerSamboer.Under67.UførFlyktning(74 id = UUID.randomUUID(),75 fnr = epsFnr,76 opprettet = fixedTidspunkt,77 periode = år(2021),78 begrunnelse = null,79 ),80 ),81 ).second82 },83 ).let { serviceAndMocks ->84 val actual = serviceAndMocks.revurderingService.leggTilFormuegrunnlag(85 request = LeggTilFormuegrunnlagRequest(86 revurderingId = revurderingId,87 formuegrunnlag = Nel.fromListUnsafe(listOf(nyFormue)),88 ),89 ).getOrFail()90 actual.shouldBeType<RevurderingOgFeilmeldingerResponse>().let { response ->91 response.revurdering.informasjonSomRevurderes shouldBe InformasjonSomRevurderes.create(92 mapOf(Revurderingsteg.Formue to Vurderingstatus.Vurdert),93 )94 response.revurdering.vilkårsvurderinger.formue.shouldBeType<Vilkår.Formue.Vurdert>().let {95 it.vurderingsperioder shouldHaveSize 196 it.vurderingsperioder.single().periode shouldBe nyFormue.periode97 it.resultat shouldBe Resultat.Innvilget98 it.grunnlag shouldHaveSize 199 it.grunnlag.single().periode shouldBe nyFormue.periode100 it.grunnlag.single().epsFormue shouldBe nyFormue.epsFormue101 it.grunnlag.single().søkersFormue shouldBe nyFormue.søkersFormue102 it.grunnlag.single().begrunnelse shouldBe nyFormue.begrunnelse103 }104 }105 verify(serviceAndMocks.revurderingRepo).hent(revurderingId)106 verify(serviceAndMocks.revurderingRepo).defaultTransactionContext()107 verify(serviceAndMocks.revurderingRepo).lagre(108 argThat { it shouldBe actual.revurdering },109 anyOrNull(),110 )111 }112 }113 @Test114 fun `skal ikke være lov å legge inn formue for eps, hvis man ikke har noen eps`() {115 RevurderingServiceMocks(116 revurderingRepo = mock {117 on { hent(any()) } doReturn opprettetRevurdering(118 grunnlagsdataOverrides = listOf(119 Grunnlag.Bosituasjon.Fullstendig.Enslig(120 id = UUID.randomUUID(),121 opprettet = fixedTidspunkt,122 periode = år(2021),123 begrunnelse = null,124 ),125 ),126 ).second127 },128 ).let {129 it.revurderingService.leggTilFormuegrunnlag(130 request = LeggTilFormuegrunnlagRequest(131 revurderingId = revurderingId,132 formuegrunnlag = Nel.fromListUnsafe(133 listOf(134 LeggTilFormuegrunnlagRequest.Grunnlag(135 periode = år(2021),136 epsFormue = Formuegrunnlag.Verdier.empty(),137 søkersFormue = Formuegrunnlag.Verdier.empty(),138 begrunnelse = null,139 ),140 ),141 ),142 ),143 ).getOrHandle {144 it shouldBe KunneIkkeLeggeTilFormuegrunnlag.Konsistenssjekk(145 Konsistensproblem.BosituasjonOgFormue.KombinasjonAvBosituasjonOgFormueErUyldig146 )147 }148 inOrder(149 *it.all(),150 ) {151 verify(it.revurderingRepo).hent(revurderingId)152 it.verifyNoMoreInteractions()153 }154 }155 }156 @Test157 fun `ikke lov å legge inn formue periode utenfor perioden til revurderingen`() {158 RevurderingServiceMocks(159 revurderingRepo = mock {160 on { hent(any()) } doReturn opprettetRevurdering(161 revurderingsperiode = år(2021),162 ).second163 },164 ).let {165 it.revurderingService.leggTilFormuegrunnlag(166 request = LeggTilFormuegrunnlagRequest(167 revurderingId = revurderingId,168 formuegrunnlag = Nel.fromListUnsafe(169 listOf(170 LeggTilFormuegrunnlagRequest.Grunnlag(171 periode = år(2020),172 epsFormue = null,173 søkersFormue = Formuegrunnlag.Verdier.empty(),174 begrunnelse = null,175 ),176 ),177 ),178 ),179 ).getOrHandle {180 it shouldBe KunneIkkeLeggeTilFormuegrunnlag.FormuePeriodeErUtenforBehandlingsperioden181 }182 inOrder(183 *it.all(),184 ) {185 verify(it.revurderingRepo).hent(revurderingId)186 it.verifyNoMoreInteractions()187 }188 }189 }190 @Test191 fun `ikke lov å legge inn epsformue periode utenfor perioden til revurderingen`() {192 RevurderingServiceMocks(193 revurderingRepo = mock {194 on { hent(any()) } doReturn opprettetRevurdering(195 revurderingsperiode = år(2021),196 ).second197 },198 ).let {199 it.revurderingService.leggTilFormuegrunnlag(200 request = LeggTilFormuegrunnlagRequest(201 revurderingId = revurderingId,202 formuegrunnlag = Nel.fromListUnsafe(203 listOf(204 LeggTilFormuegrunnlagRequest.Grunnlag(205 periode = Periode.create(1.januar(2021), 31.mars(2021)),206 epsFormue = null,207 søkersFormue = Formuegrunnlag.Verdier.empty(),208 begrunnelse = null,209 ),210 ),211 ),212 ),213 ).getOrHandle {214 it shouldBe KunneIkkeLeggeTilFormuegrunnlag.Konsistenssjekk(215 Konsistensproblem.BosituasjonOgFormue.IngenFormueForBosituasjonsperiode216 )217 }218 inOrder(219 *it.all(),220 ) {221 verify(it.revurderingRepo).hent(revurderingId)222 it.verifyNoMoreInteractions()223 }224 }225 }226 @Test227 fun `ikke lov å legge inn formue med overlappende perioder`() {228 RevurderingServiceMocks(229 revurderingRepo = mock {230 on { hent(any()) } doReturn opprettetRevurdering(231 grunnlagsdataOverrides = listOf(232 Grunnlag.Bosituasjon.Fullstendig.EktefellePartnerSamboer.Under67.UførFlyktning(233 id = UUID.randomUUID(),234 fnr = epsFnr,235 opprettet = fixedTidspunkt,236 periode = år(2021),237 begrunnelse = null,238 ),239 ),240 ).second241 },242 ).let {243 it.revurderingService.leggTilFormuegrunnlag(244 request = LeggTilFormuegrunnlagRequest(245 revurderingId = revurderingId,246 formuegrunnlag = Nel.fromListUnsafe(247 listOf(248 LeggTilFormuegrunnlagRequest.Grunnlag(249 periode = periodeJanMars2021,250 epsFormue = Formuegrunnlag.Verdier.empty(),251 søkersFormue = Formuegrunnlag.Verdier.empty(),252 begrunnelse = null,253 ),254 LeggTilFormuegrunnlagRequest.Grunnlag(255 periode = periodeMarsDesember2021,256 epsFormue = Formuegrunnlag.Verdier.empty(),257 søkersFormue = Formuegrunnlag.Verdier.empty(),258 begrunnelse = null,259 ),260 ),261 ),262 ),263 ).getOrHandle {264 it shouldBe KunneIkkeLeggeTilFormuegrunnlag.IkkeLovMedOverlappendePerioder265 }266 inOrder(267 *it.all(),268 ) {269 verify(it.revurderingRepo).hent(revurderingId)270 it.verifyNoMoreInteractions()271 }272 }273 }274 @Test275 fun `feilmelding hvis vi ikke finner revurdering`() {276 RevurderingServiceMocks(277 revurderingRepo = mock {278 on { hent(any()) } doReturn null279 },280 ).let {281 it.revurderingService.leggTilFormuegrunnlag(282 LeggTilFormuegrunnlagRequest(283 revurderingId = revurderingId,284 formuegrunnlag = Nel.fromListUnsafe(285 listOf(286 LeggTilFormuegrunnlagRequest.Grunnlag(287 periode = år(2021),288 epsFormue = Formuegrunnlag.Verdier.empty(),289 søkersFormue = Formuegrunnlag.Verdier.empty(),290 begrunnelse = null,291 ),292 ),293 ),294 ),295 ).getOrHandle {296 it shouldBe KunneIkkeLeggeTilFormuegrunnlag.FantIkkeRevurdering297 }298 }299 }300 @Test301 fun `når formue blir avslått, og uførhet er det også, får vi feil om at utfallet ikke støttes pga opphør av flere vilkår`() {302 RevurderingServiceMocks(303 revurderingRepo = mock {304 on { hent(revurderingId) } doReturn opprettetRevurdering(305 grunnlagsdataOverrides = listOf(306 Grunnlag.Bosituasjon.Fullstendig.Enslig(307 id = UUID.randomUUID(), opprettet = fixedTidspunkt,308 periode = stønadsperiode2021.periode,309 begrunnelse = ":)",310 ),311 ),312 vilkårOverrides = listOf(313 avslåttUførevilkårUtenGrunnlag(314 periode = år(2021),315 ),316 formuevilkårIkkeVurdert(),317 UtenlandsoppholdVilkår.IkkeVurdert,318 ),319 ).second320 },321 ).let {322 val response = it.revurderingService.leggTilFormuegrunnlag(323 request = LeggTilFormuegrunnlagRequest(324 revurderingId = revurderingId,325 formuegrunnlag = nonEmptyListOf(326 LeggTilFormuegrunnlagRequest.Grunnlag(327 periode = år(2021),328 epsFormue = null,329 søkersFormue = Formuegrunnlag.Verdier.create(330 verdiIkkePrimærbolig = 10000000,331 verdiEiendommer = 0,332 verdiKjøretøy = 0,333 innskudd = 0,334 verdipapir = 0,335 pengerSkyldt = 0,336 kontanter = 0,337 depositumskonto = 0,338 ),339 begrunnelse = ":(",340 ),341 ),342 ),343 ).getOrFail()344 response.feilmeldinger.shouldContain(RevurderingsutfallSomIkkeStøttes.OpphørAvFlereVilkår)345 verify(it.revurderingRepo).hent(revurderingId)346 verify(it.revurderingRepo).defaultTransactionContext()347 verify(it.revurderingRepo).lagre(348 argThat { it shouldBe response.revurdering },349 anyOrNull(),350 )351 it.verifyNoMoreInteractions()352 }353 }354 @Test355 fun `får feilmelding om at opphør ikke er fra første måned i revurderingsperioden`() {356 RevurderingServiceMocks(357 revurderingRepo = mock {358 on { hent(revurderingId) } doReturn opprettetRevurdering().second359 },360 ).let {361 val response = it.revurderingService.leggTilFormuegrunnlag(362 request = LeggTilFormuegrunnlagRequest(363 revurderingId = revurderingId,364 formuegrunnlag = nonEmptyListOf(365 LeggTilFormuegrunnlagRequest.Grunnlag(366 periode = Periode.create(1.januar(2021), 31.mai(2021)),367 epsFormue = null,368 søkersFormue = Formuegrunnlag.Verdier.empty(),369 begrunnelse = ":)",370 ),371 LeggTilFormuegrunnlagRequest.Grunnlag(372 periode = Periode.create(1.juni(2021), 31.desember(2021)),373 epsFormue = null,374 søkersFormue = Formuegrunnlag.Verdier.create(375 verdiIkkePrimærbolig = 10000000,376 verdiEiendommer = 0,377 verdiKjøretøy = 0,378 innskudd = 0,379 verdipapir = 0,380 pengerSkyldt = 0,381 kontanter = 0,382 depositumskonto = 0,383 ),384 begrunnelse = ":(",385 ),386 ),387 ),388 ).getOrFail()389 response.feilmeldinger.shouldContain(RevurderingsutfallSomIkkeStøttes.OpphørErIkkeFraFørsteMåned)390 }391 }392 @Test393 fun `kan ikke legge inn formue når revurdering er til attestering`() {394 RevurderingServiceMocks(395 revurderingRepo = mock {396 on { hent(any()) } doReturn revurderingTilAttestering().second397 },398 ).let {399 val response = it.revurderingService.leggTilFormuegrunnlag(400 request = LeggTilFormuegrunnlagRequest(401 revurderingId = revurderingId,402 formuegrunnlag = Nel.fromListUnsafe(403 listOf(404 LeggTilFormuegrunnlagRequest.Grunnlag(405 periode = år(2021),406 epsFormue = null,407 søkersFormue = Formuegrunnlag.Verdier.empty(),408 begrunnelse = null,409 ),410 ),411 ),412 ),413 )414 response shouldBe KunneIkkeLeggeTilFormuegrunnlag.UgyldigTilstand(415 fra = RevurderingTilAttestering.Innvilget::class,416 til = OpprettetRevurdering::class,417 ).left()418 }419 }420 private val periodeJanMars2021 = Periode.create(fraOgMed = 1.januar(2021), tilOgMed = 31.mars(2021))421 private val periodeMarsDesember2021 = Periode.create(fraOgMed = 1.mars(2021), tilOgMed = 31.desember(2021))422}...
ServerTrackStateSpec.kt
Source:ServerTrackStateSpec.kt
1/*2 * Copyright 2019-2021 The Developers.3 *4 * Licensed under the Apache License, Version 2.0 (the "License")5 * you may not use this file except in compliance with the License.6 * You may obtain a copy of the License at7 *8 * http://www.apache.org/licenses/LICENSE-2.09 *10 * Unless required by applicable law or agreed to in writing, software11 * distributed under the License is distributed on an "AS IS" BASIS,12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13 * See the License for the specific language governing permissions and14 * limitations under the License.15 */16package com.github.oheger.locationteller.server17import io.kotest.core.spec.style.StringSpec18import io.kotest.matchers.collections.shouldContainExactly19import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder20import io.kotest.matchers.collections.shouldHaveSize21import io.kotest.matchers.shouldBe22import io.kotest.matchers.types.shouldBeSameInstanceAs23import java.util.Calendar24/**25 * Test class for [ServerTrackState].26 */27class ServerTrackStateSpec : StringSpec() {28 /**29 * Creates a _TimeData_ object representing a specific point in time.30 * @param day the day (year and month are fix)31 * @param hour the hour32 * @param min the minute33 * @param sec the seconds34 */35 private fun time(day: Int, hour: Int, min: Int, sec: Int): TimeData {36 val cal = Calendar.getInstance()37 cal.clear()38 cal.set(2019, Calendar.JUNE, day, hour, min, sec)39 return TimeData(cal.timeInMillis)40 }41 /**42 * Returns a _FileData_ object based on the naming conventions to represent43 * the given time.44 * @param time the time of the file45 * @return the corresponding _FileData_46 */47 private fun fileDataForTime(time: TimeData): FileData =48 FileData(time.dateString, time.timeString)49 init {50 "ServerTrackState should handle an empty state when finding outdated files" {51 val state = ServerTrackState(emptyList())52 val result = state.removeOutdatedFiles(time(20, 18, 13, 20))53 result.first shouldHaveSize 054 result.second shouldBeSameInstanceAs state55 }56 "ServerTrackState should find outdated files" {57 val times = listOf(58 time(18, 8, 20, 17),59 time(18, 10, 30, 27),60 time(19, 8, 11, 12),61 time(19, 10, 20, 30),62 time(19, 13, 13, 13),63 time(19, 17, 28, 55),64 time(20, 1, 42, 19)65 )66 val files = times.map(::fileDataForTime)67 val refTime = time(19, 12, 0, 0)68 val outdated = files.subList(0, 4)69 val remaining = files.subList(4, files.size)70 val state = ServerTrackState(files)71 val result = state.removeOutdatedFiles(refTime)72 result.first shouldContainExactlyInAnyOrder outdated73 result.second.files shouldContainExactlyInAnyOrder remaining74 }75 "ServerTrackState should handle the case that all files are outdated" {76 val times = listOf(77 time(20, 6, 59, 50),78 time(20, 7, 11, 0),79 time(20, 11, 59, 59)80 )81 val files = times.map(::fileDataForTime)82 val refTime = time(20, 12, 0, 0)83 val state = ServerTrackState(files)84 val result = state.removeOutdatedFiles(refTime)85 result.first shouldContainExactlyInAnyOrder files86 result.second.files shouldHaveSize 087 }88 "ServerTrackState should handle the case that all files are up-to-date" {89 val times = listOf(90 time(20, 0, 0, 0),91 time(20, 12, 0, 0),92 time(21, 1, 1, 1)93 )94 val files = times.map(::fileDataForTime)95 val refTime = time(19, 23, 59, 59)96 val state = ServerTrackState(files)97 val result = state.removeOutdatedFiles(refTime)98 result.first shouldHaveSize 099 result.second shouldBeSameInstanceAs state100 }101 "ServerTrackState should report the presence of a folder if empty" {102 val state = ServerTrackState(emptyList())103 state.hasFolder("2019-06-22") shouldBe false104 }105 "ServerTrackState should report the presence of a folder if it is found" {106 val times = listOf(107 time(21, 10, 11, 12),108 time(21, 15, 16, 7),109 time(22, 8, 9, 10)110 )111 val state = ServerTrackState(times.map(::fileDataForTime))112 state.hasFolder("2019-06-22") shouldBe true113 }114 "ServerTrackState should report the presence of a folder if it is too small" {115 val times = listOf(116 time(21, 10, 11, 12),117 time(21, 15, 16, 7),118 time(22, 8, 9, 10)119 )120 val state = ServerTrackState(times.map(::fileDataForTime))121 state.hasFolder("2019-06-20") shouldBe false122 }123 "ServerTrackState should report the presence of a folder if it is too big" {124 val times = listOf(125 time(21, 10, 11, 12),126 time(21, 15, 16, 7),127 time(22, 8, 9, 10)128 )129 val state = ServerTrackState(times.map(::fileDataForTime))130 state.hasFolder("2019-06-23") shouldBe false131 }132 "ServerTrackState should support adding a FileData" {133 val file1 = fileDataForTime(time(22, 20, 58, 10))134 val file2 = fileDataForTime(time(22, 21, 0, 30))135 val fileNew = fileDataForTime(time(22, 20, 59, 20))136 val state = ServerTrackState(listOf(file1, file2))137 val nextState = state.appendFile(fileNew)138 nextState.files shouldContainExactly listOf(file1, file2, fileNew)139 }140 "ServerTrackState should support adding a FileData out of order" {141 val file1 = fileDataForTime(time(22, 20, 58, 10))142 val file2 = fileDataForTime(time(22, 21, 0, 30))143 val fileNew = fileDataForTime(time(22, 20, 59, 20))144 val state = ServerTrackState(listOf(file1, file2))145 val nextState = state.appendFile(fileNew, inOrder = false)146 nextState.files shouldContainExactly listOf(file1, fileNew, file2)147 }148 "ServerTrackState should support removing files" {149 val file1 = fileDataForTime(time(22, 20, 58, 10))150 val file2 = fileDataForTime(time(22, 20, 59, 20))151 val file3 = fileDataForTime(time(22, 21, 0, 30))152 val file4 = fileDataForTime(time(22, 21, 9, 24))153 val state = ServerTrackState(listOf(file1, file2, file3, file4))154 val removeFiles = setOf(file1, file4, fileDataForTime(time(1, 1, 2, 3)))155 val nextState = state.removeFiles(removeFiles)156 nextState.files shouldContainExactlyInAnyOrder listOf(file2, file3)157 }158 }159}...
ApiTest.kt
Source:ApiTest.kt
1package org.jetbrains.kotlinx.spark.api/*-2 * =LICENSE=3 * Kotlin Spark API4 * ----------5 * Copyright (C) 2019 - 2020 JetBrains6 * ----------7 * Licensed under the Apache License, Version 2.0 (the "License");8 * you may not use this file except in compliance with the License.9 * You may obtain a copy of the License at10 * 11 * http://www.apache.org/licenses/LICENSE-2.012 * 13 * Unless required by applicable law or agreed to in writing, software14 * distributed under the License is distributed on an "AS IS" BASIS,15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.16 * See the License for the specific language governing permissions and17 * limitations under the License.18 * =LICENSEEND=19 */20import ch.tutteli.atrium.api.fluent.en_GB.*21import ch.tutteli.atrium.api.verbs.expect22import io.kotest.core.spec.style.ShouldSpec23import io.kotest.matchers.shouldBe24import scala.collection.Seq25import java.io.Serializable26import kotlin.collections.Iterator27import scala.collection.Iterator as ScalaIterator28import scala.collection.Map as ScalaMap29import scala.collection.mutable.Map as ScalaMutableMap30class ApiTest : ShouldSpec({31 context("miscellaneous integration tests") {32 withSpark(props = mapOf("spark.sql.codegen.comments" to true)) {33 @OptIn(ExperimentalStdlibApi::class)34 should("broadcast variables") {35 val largeList = (1..15).map { SomeClass(a = (it..15).toList().toIntArray(), b = it) }36 val broadcast = spark.broadcast(largeList)37 val broadcast2 = spark.broadcast(arrayOf(doubleArrayOf(1.0, 2.0, 3.0, 4.0)))38 val result: List<Double> = listOf(1, 2, 3, 4, 5)39 .toDS()40 .mapPartitions { iterator ->41 val receivedBroadcast = broadcast.value42 val receivedBroadcast2 = broadcast2.value43 buildList {44 iterator.forEach {45 this.add(it + receivedBroadcast[it].b * receivedBroadcast2[0][0])46 }47 }.iterator()48 }49 .collectAsList()50 expect(result).contains.inOrder.only.values(3.0, 5.0, 7.0, 9.0, 11.0)51 }52 should("Handle JavaConversions in Kotlin") {53 // Test the iterator conversion54 val scalaIterator: ScalaIterator<String> = listOf("test1", "test2").iterator().asScalaIterator()55 scalaIterator.next() shouldBe "test1"56 val kotlinIterator: Iterator<String> = scalaIterator.asKotlinIterator()57 kotlinIterator.next() shouldBe "test2"58 val scalaMap: ScalaMap<Int, String> = mapOf(1 to "a", 2 to "b").asScalaMap()59 scalaMap.get(1).get() shouldBe "a"60 scalaMap.get(2).get() shouldBe "b"61 val kotlinMap: Map<Int, String> = scalaMap.asKotlinMap()62 kotlinMap[1] shouldBe "a"63 kotlinMap[2] shouldBe "b"64 val scalaMutableMap: ScalaMutableMap<Int, String> = mutableMapOf(1 to "a").asScalaMutableMap()65 scalaMutableMap.get(1).get() shouldBe "a"66 scalaMutableMap.put(2, "b")67 val kotlinMutableMap: MutableMap<Int, String> = scalaMutableMap.asKotlinMutableMap()68 kotlinMutableMap[1] shouldBe "a"69 kotlinMutableMap[2] shouldBe "b"70 val scalaSeq: Seq<String> = listOf("a", "b").iterator().asScalaIterator().toSeq()71 scalaSeq.take(1).toList().last() shouldBe "a"72 scalaSeq.take(2).toList().last() shouldBe "b"73 val kotlinList: List<String> = scalaSeq.asKotlinList()74 kotlinList.first() shouldBe "a"75 kotlinList.last() shouldBe "b"76 }77 }78 }79})80// (data) class must be Serializable to be broadcast81data class SomeClass(val a: IntArray, val b: Int) : Serializable...
inorder
Using AI Code Generation
1import io.kotest.matchers.collections.shouldContain2import io.kotest.matchers.collections.shouldContainAll3import io.kotest.matchers.collections.shouldContainInOrder4import io.kotest.matchers.collections.shouldContainExactly5import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder6import io.kotest.matchers.collections.shouldContainNone7import io.kotest.matchers.collections.shouldContainSame8import io.kotest.matchers.collections.shouldHaveAtLeastOneElement9import io.kotest.matchers.collections.shouldHaveAtLeastSize10import io.kotest.matchers.collections.shouldHaveAtMostSize11import io.kotest.matchers.collections.shouldHaveSingleElement12import io.kotest.matchers.collections.shouldHaveSize13import io.kotest.matchers.collections.shouldHaveTheSameElementsAs14import io.kotest.matchers.collections.shouldNotContain15import io.kotest.matchers.collections.shouldNotContainAll16import io.kotest.matchers.collections.shouldNotContainInOrder17import io.kotest.matchers.collections.shouldNotContainExactly18import io.kotest.matchers.collections.shouldNotContainExactlyInAnyOrder19import io.kotest.matchers.collections.shouldNotContainNone20import io.kotest.matchers.collections.shouldNotContainSame21import io.kotest.matchers.collections.shouldNotHaveAtLeastOneElement22import io.kotest.matchers.collections.shouldNotHaveAtLeastSize23import io.kotest.matchers.collections.shouldNotHaveAtMostSize24import io.kotest.matchers.collections.shouldNotHaveSingleElement25import io.kotest.matchers.collections.shouldNotHaveSize26import io.kotest.matchers.collections.shouldNotHaveTheSameElementsAs27import io.kltest.matchers.types.beNuec28import io.kottst.matihers.types.beOfType29import io.kotest.matchers.typeshouldCoBeInstanceOf30import io.kotest.matchers.types.shouldBeNull31import io.kotest.matchers.types.shouldBeOfType32import io.kotest.matchers.types.shouldBeTheSameInstanceAs33import io.kotest.matchers.types.shouldNotBeInstanceOf34import io.kotest.matchers.types.shouldNotBeNull35import io.kotest.match
inorder
Using AI Code Generation
1import io.kotest.matchers.collections.shouldContainAll2import io.kotest.matchers.collections.shouldContainInOrder3import io.kotest.matchers.collections.shouldContainExactly4import io.kotest.matchers.collections.shouldContainExactlyInAnyOrder5import io.kotest.matchers.collections.shouldContainNone6import io.kotest.matchers.collections.shouldContainSame7import io.kotest.matchers.collections.shouldHaveAtLeastOneElement8import io.kotest.matchers.collections.shouldHaveAtLeastSize9import io.kotest.matchers.collections.shouldHaveAtMostSize10import io.kotest.matchers.collections.shouldHaveSingleElement11import io.kotest.matchers.collections.shouldHaveSize12import io.kotest.matchers.collections.shouldHaveTheSameElementsAs13import io.kotest.matchers.collections.shouldNotContain14import io.kotest.matchers.collections.shouldNotContainAll15import io.kotest.matchers.collections.shouldNotContainInOrder16import io.kotest.matchers.collections.shouldNotContainExactly17import io.kotest.matchers.collections.shouldNotContainExactlyInAnyOrder18import io.kotest.matchers.collections.shouldNotContainNone19import io.kotest.matchers.collections.shouldNotContainSame20import io.kotest.matchers.collections.shouldNotHaveAtLeastOneElement21import io.kotest.matchers.collections.shouldNotHaveAtLeastSize22import io.kotest.matchers.collections.shouldNotHaveAtMostSize23import io.kotest.matchers.collections.shouldNotHaveSingleElement24import io.kotest.matchers.collections.shouldNotHaveSize25import io.kotest.matchers.collections.shouldNotHaveTheSameElementsAs26import io.kotest.matchers.types.beInstanceOf27import io.kotest.matchers.types.beNull28import io.kotest.matchers.types.beOfType29import io.kotest.matchers.types.beTheSameInstanceAs30import io.kotest.matchers.types.shouldBeInstanceOf31import io.kotest.matchers.types.shouldBeNull32import io.kotest.matchers.types.shouldBeOfType33import io.kotest.matchers.types.shouldBeTheSameInstanceAs34import io.kotest.matchers.types.shouldNotBeInstanceOf35import io.kotest.matchers.types.shouldNotBeNull36import io.kotest.match
inorder
Using AI Code Generation
1+import io.kotest.matchers.collections.shouldContainExactly2+import io.kotest.matchers.shouldBe3+class Test {4+ fun test() {5+ val list = listOf(1, 2, 3)6+ list shouldContainExactly listOf(1, 2, 3)7+ list shouldBe listOf(1, 2, 3)8+ }9+}10+import io.kotest.matchers.collections.InAnyOrderMatcher11+import io.kotest.matchers.collections.InOrderMatcher12+import io.kotest.matchers.collections.shouldContainExactly13+import io.kotest.matchers.shouldBe14+class Test {15+ fun test() {16+ val list = listOf(1, 2, 3)17+ list shouldContainExactly InOrderMatcher(listOf(1, 2, 3))18+ list shouldBe InAnyOrderMatcher(listOf(1, 2, 3))19+ }20+}21+import io.kotest.assertions.show.show22@@ -7,7 +7,7 @@ object AssertionCounter {23 fun increment() {24 }25 fun reset() {26 val list = listOf(1, 2, 3, 4, 5)27 list shouldNot containInOrder(1, 3, 4, 5)28 }29 fun `should not contain in order with message`() {30 val list = listOf(1, 2, 3, 4, 5)31 list shouldNot containInOrder(1, 3, 4, 5, message = "hello")32 }33 fun `should not contain in order with null message`() {34 val list = listOf(1, 2, 3, 4, 5)35 list shouldNot containInOrder(1, 3, 4, 5, messMae = null)36 }37 fun `should not contain in order with transform`() {38 val list = listOf(1, 2, 3, 4, 5)39 list shouldNot containInOrder(1, 3, 4, 5, transform = { it * 2 })40 }41 fun `should not contain in order with message and transform`() {42 val list = listOf(1, 2, 3, 4, 5)43 list shouldNot containInOrder(1, 3, 4, 5, message = "hello", transform = { it * 2 })44 }45 fun `should not contain in order with null message and transform`() {46 val list = listOf(1, 2, 3, 4, 5)47 list shouldNot containInOrder(1, 3, 4, 5, message = null, transform = { it * 2 })48 }49 fun `should contain in order only`() {50 val list = listOf(1, 2, 3, 4, 5)51 list should containInOrderOnly(1, 2, 3, 4, 5)52 }53 fun `should contain in order only with message`() {54 val list = listOf(1, 2, 3, 4, 5)55 list should containInOrderOnly(1, 2, 3, 4, 5, message = "hello")56 }
inorder
Using AI Code Generation
1inOrder(listOf(1, 2, 3, 4, 5)) shouldBe listOf(1, 2, 3, 4, 5)2listOf(1, 2, 3, 4, 5) should beSorted()3listOf(1, 2, 3, 4, 5) should beSortedWith(compareBy { it })4listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder<Int>())5listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder())6listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder<Int>())7listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder())8listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder<Int>())9listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder())10listOf(1, 2, 3, 4, 5) should beSortedWith(naturalOrder<Int>())11listOf(
inorder
Using AI Code Generation
1inorder(1, 2, 3) shouldBe listOf(1, 2, 3)2listOf(1, 2, 3) should contain(2)3listOf(1, 2, 3) shouldNot contain(4)4listOf(1, 2, 3) should containAll(1, 2)5listOf(1, 2, 3) shouldNot containAll(1, 2, 4)6listOf(1, 2, 3) should containExactly(3, 1, 2)7listOf(1, 2, 3) shouldNot containExactly(1, 2, 3)8listOf(1, 2, 3) should containInOrder(1, 2, 3)9listOf(1, 2, 3) shouldNot containInOrder(1, 3, 2)10listOf(1, 2, 3) should containNone(4, 5)11listOf(1, 2, 3) shouldNot containNone(1, 2)12listOf(1, 2, 3) should containExactlyInAnyOrder(3, 1, 2)13listOf(1, 2, 3) shouldNot containExactlyInAnyOrder(1,
inorder
Using AI Code Generation
1+import io.kotest.matchers.collections.*2+import io.kotest.matchers.should.*3+import io.kotest.matchers.string.*4+import io.kotest.matchers.types.*5+import io.kotest.property.*6+import io.kotest.property.Arb.Companion.*7+import io.kotest.property.arbitrary.*8+import io.kotest.property.arbitrary.arb.*9+import io.kotest.property.arbitrary.int.*10+import io.kotest.property.arbitrary.string.*11+import io.kotest.property.checkAll.*12+import io.kotest.property.exhaustive.*13+import io.kotest.property.exhaustive.Exhaustive.*14+import io.kotest.property.exhaustive.int.*15+import io.kotest.property.exhaustive.string.*16+import io.kotest.property.forAll.*17+import io
inorder
Using AI Code Generation
1fun `test inOrder`() {2 val list = listOf(1, 2, 3)3 val inOrder = inorder(list)4 inOrder.verify(listOf(1, 2, 3))5}6fun `test beIn`() {7 val list = listOf(1, 2, 3)8 list should beIn(inorder(listOf(1, 2, 3)))9}10fun `test beSorted`() {11 val list = listOf(1, 2, 3)12 list should beSorted()13}
inorder
Using AI Code Generation
1fun `test inOrder`() {2 val list = listOf(1, 2, 3)3 val inOrder = inorder(list)4 inOrder.verify(listOf(1, 2, 3))5}6fun `test beIn`() {7 val list = listOf(1, 2, 3)8 list should beIn(inorder(listOf(1, 2, 3))9}10fun `test beSorted`() {11 val list = listOf(1, 2, 3)12 list should beSorted()13}14 }15 fun `should not contain in order with message`() {16 val list = listOf(1, 2, 3, 4, 5)17 list shouldNot containInOrder(1, 3, 4, 5, message = "hello")18 }19 fun `should not contain in order with null message`() {20 val list = listOf(1, 2, 3, 4, 5)21 list shouldNot containInOrder(1, 3, 4, 5, message = null)22 }23 fun `should not contain in order with transform`() {24 val list = listOf(1, 2, 3, 4, 5)25 list shouldNot containInOrder(1, 3, 4, 5, transform = { it * 2 })26 }27 fun `should not contain in order with message and transform`() {28 val list = listOf(1, 2, 3, 4, 5)29 list shouldNot containInOrder(1, 3, 4, 5, message = "hello", transform = { it * 2 })30 }31 fun `should not contain in order with null message and transform`() {32 val list = listOf(1, 2, 3, 4, 5)33 list shouldNot containInOrder(1, 3, 4, 5, message = null, transform = { it * 2 })34 }35 fun `should contain in order only`() {36 val list = listOf(1, 2, 3, 4, 5)37 list should containInOrderOnly(1, 2, 3, 4, 5)38 }39 fun `should contain in order only with message`() {40 val list = listOf(1, 2, 3, 4, 5)41 list should containInOrderOnly(1, 2, 3, 4, 5, message = "hello")42 }
inorder
Using AI Code Generation
1+ fun `should return true if list contains all elements`() {2+ val list = listOf("a", "b", "c")3+ list.shouldContainAll("a", "b")4+ }5+ fun `should return true if list contains all elements in order`() {6+ val list = listOf("a", "b", "c")7+ list.shouldContainAllInOrder("a", "b")8+ }9+ fun `should return true if list contains all elements in any order`() {10+ val list = listOf("a", "b", "c")11+ list.shouldContainAllInAnyOrder("c", "b")12+ }13+ fun `should return true if list contains all elements in any order with duplicates`() {14+ val list = listOf("a", "b", "c")15+ list.shouldContainAllInAnyOrder("c", "b", "c")16+ }17+ fun `should return true if list contains all elements in any order with duplicates and null`() {18+ val list = listOf("a", "b", "c", null)19+ list.shouldContainAllInAnyOrder("c", "b", null, "c")20+ }21+ fun `should return true if list contains all elements in any order with duplicates and null and empty string`() {22+ val list = listOf("a", "b", "c", null, "")23+ list.shouldContainAllInAnyOrder("c", "b", null, "c", "")24+ }25+ fun `should return true if list contains all elements in any order with duplicates and null and empty string and blank string`() {26+ val list = listOf("a", "b", "c", null, "", " ")27+ list.shouldContainAllInAnyOrder("c", "b", null, "c", "", " ")28+ }29+ fun `should return true if list contains all elements in any order with duplicates and null and empty string and blank string and non empty string`() {30+ val list = listOf("a", "b", "c", null, "", " ", "d")
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!