Best Kotest code snippet using io.kotest.matchers.bigdecimal.matchers.BigDecimal.shouldBeZero
TilbakekrevingsberegningServiceTest.kt
Source:TilbakekrevingsberegningServiceTest.kt  
1package no.nav.familie.tilbake.beregning2import io.kotest.assertions.throwables.shouldThrow3import io.kotest.matchers.bigdecimal.shouldBeZero4import io.kotest.matchers.collections.shouldHaveSize5import io.kotest.matchers.nulls.shouldNotBeNull6import io.kotest.matchers.shouldBe7import no.nav.familie.tilbake.OppslagSpringRunnerTest8import no.nav.familie.tilbake.api.dto.PeriodeDto9import no.nav.familie.tilbake.behandling.BehandlingRepository10import no.nav.familie.tilbake.behandling.FagsakRepository11import no.nav.familie.tilbake.beregning.modell.Beregningsresultat12import no.nav.familie.tilbake.beregning.modell.Beregningsresultatsperiode13import no.nav.familie.tilbake.beregning.modell.Vedtaksresultat14import no.nav.familie.tilbake.common.Periode15import no.nav.familie.tilbake.data.Testdata16import no.nav.familie.tilbake.foreldelse.VurdertForeldelseRepository17import no.nav.familie.tilbake.foreldelse.domain.Foreldelsesperiode18import no.nav.familie.tilbake.foreldelse.domain.Foreldelsesvurderingstype19import no.nav.familie.tilbake.foreldelse.domain.VurdertForeldelse20import no.nav.familie.tilbake.kravgrunnlag.KravgrunnlagRepository21import no.nav.familie.tilbake.kravgrunnlag.domain.Klassekode22import no.nav.familie.tilbake.kravgrunnlag.domain.Klassetype23import no.nav.familie.tilbake.kravgrunnlag.domain.Kravgrunnlag43124import no.nav.familie.tilbake.kravgrunnlag.domain.Kravgrunnlagsbeløp43325import no.nav.familie.tilbake.kravgrunnlag.domain.Kravgrunnlagsperiode43226import no.nav.familie.tilbake.vilkÃ¥rsvurdering.VilkÃ¥rsvurderingRepository27import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.Aktsomhet28import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.AnnenVurdering29import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurdering30import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingAktsomhet31import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingsperiode32import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingsresultat33import org.junit.jupiter.api.BeforeEach34import org.junit.jupiter.api.Test35import org.springframework.beans.factory.annotation.Autowired36import java.math.BigDecimal37import java.time.LocalDate38import java.time.YearMonth39import java.util.UUID40class TilbakekrevingsberegningServiceTest : OppslagSpringRunnerTest() {41    @Autowired42    private lateinit var tilbakekrevingsberegningService: TilbakekrevingsberegningService43    @Autowired44    private lateinit var kravgrunnlagRepository: KravgrunnlagRepository45    @Autowired46    private lateinit var vurdertForeldelseRepository: VurdertForeldelseRepository47    @Autowired48    private lateinit var vilkÃ¥rsvurderingRepository: VilkÃ¥rsvurderingRepository49    @Autowired50    private lateinit var behandlingRepository: BehandlingRepository51    @Autowired52    private lateinit var fagsakRepository: FagsakRepository53    @BeforeEach54    fun init() {55        fagsakRepository.insert(Testdata.fagsak)56        behandlingRepository.insert(Testdata.behandling)57    }58    @Test59    fun `beregn skalberegne tilbakekrevingsbeløp for periode som ikke er foreldet`() {60        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))61        lagKravgrunnlag(periode, BigDecimal.ZERO)62        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.IKKE_FORELDET, null)63        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, periode)64        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)65        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder66        resultat.shouldHaveSize(1)67        val r: Beregningsresultatsperiode = resultat[0]68        r.periode shouldBe periode69        r.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)70        r.vurdering shouldBe Aktsomhet.FORSETT71        r.renteprosent shouldBe BigDecimal.valueOf(10)72        r.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)73        r.manueltSattTilbakekrevingsbeløp shouldBe null74        r.andelAvBeløp shouldBe BigDecimal.valueOf(100)75        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.FULL_TILBAKEBETALING76    }77    @Test78    fun `hentBeregningsresultat skal hente beregningsresultat for periode som ikke er foreldet`() {79        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))80        lagKravgrunnlag(periode, BigDecimal.ZERO)81        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.IKKE_FORELDET, null)82        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, periode)83        val beregningsresultat = tilbakekrevingsberegningService.hentBeregningsresultat(Testdata.behandling.id)84        beregningsresultat.beregningsresultatsperioder.size shouldBe 185        val beregningsresultatsperiode = beregningsresultat.beregningsresultatsperioder[0]86        beregningsresultatsperiode.periode shouldBe PeriodeDto(periode)87        beregningsresultatsperiode.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)88        beregningsresultatsperiode.vurdering shouldBe Aktsomhet.FORSETT89        beregningsresultatsperiode.renteprosent shouldBe BigDecimal.valueOf(10)90        beregningsresultatsperiode.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)91        beregningsresultatsperiode.andelAvBeløp shouldBe BigDecimal.valueOf(100)92        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.FULL_TILBAKEBETALING93    }94    @Test95    fun `beregn skalberegne tilbakekrevingsbeløp for periode som er foreldet`() {96        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))97        lagKravgrunnlag(periode, BigDecimal.ZERO)98        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.FORELDET, periode.fom.plusMonths(8).atDay(1))99        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)100        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder101        resultat.shouldHaveSize(1)102        val r: Beregningsresultatsperiode = resultat[0]103        r.periode shouldBe periode104        r.tilbakekrevingsbeløp.shouldBeZero()105        r.vurdering shouldBe AnnenVurdering.FORELDET106        r.renteprosent shouldBe null107        r.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)108        r.manueltSattTilbakekrevingsbeløp shouldBe null109        r.andelAvBeløp shouldBe BigDecimal.ZERO110        r.rentebeløp.shouldBeZero()111        r.tilbakekrevingsbeløpUtenRenter.shouldBeZero()112        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.INGEN_TILBAKEBETALING113    }114    @Test115    fun `hentBeregningsresultat skal hente beregningsresultat for periode som er foreldet`() {116        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))117        lagKravgrunnlag(periode, BigDecimal.ZERO)118        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.FORELDET, periode.fom.plusMonths(8).atDay(1))119        val beregningsresultat = tilbakekrevingsberegningService.hentBeregningsresultat(Testdata.behandling.id)120        beregningsresultat.beregningsresultatsperioder.size shouldBe 1121        val beregningsresultatsperiode = beregningsresultat.beregningsresultatsperioder[0]122        beregningsresultatsperiode.periode shouldBe PeriodeDto(periode)123        beregningsresultatsperiode.tilbakekrevingsbeløp.shouldNotBeNull()124        beregningsresultatsperiode.tilbakekrevingsbeløp!!.shouldBeZero()125        beregningsresultatsperiode.vurdering shouldBe AnnenVurdering.FORELDET126        beregningsresultatsperiode.renteprosent shouldBe null127        beregningsresultatsperiode.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)128        beregningsresultatsperiode.andelAvBeløp shouldBe BigDecimal.ZERO129        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.INGEN_TILBAKEBETALING130    }131    @Test132    fun `beregn skalberegne tilbakekrevingsbeløp for periode som ikke er foreldet med skattProsent`() {133        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))134        lagKravgrunnlag(periode, BigDecimal.valueOf(10))135        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.IKKE_FORELDET, null)136        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, periode)137        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)138        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder139        resultat.shouldHaveSize(1)140        val r: Beregningsresultatsperiode = resultat[0]141        r.periode shouldBe periode142        r.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)143        r.vurdering shouldBe Aktsomhet.FORSETT144        r.renteprosent shouldBe BigDecimal.valueOf(10)145        r.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)146        r.manueltSattTilbakekrevingsbeløp shouldBe null147        r.andelAvBeløp shouldBe BigDecimal.valueOf(100)148        r.skattebeløp shouldBe BigDecimal.valueOf(1000)149        r.tilbakekrevingsbeløpEtterSkatt shouldBe BigDecimal.valueOf(10000)150        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.FULL_TILBAKEBETALING151    }152    @Test153    fun `hentBeregningsresultat skal hente beregningsresultat for periode som ikke er foreldet med skattProsent`() {154        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))155        lagKravgrunnlag(periode, BigDecimal.valueOf(10))156        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.IKKE_FORELDET, null)157        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, periode)158        val beregningsresultat = tilbakekrevingsberegningService.hentBeregningsresultat(Testdata.behandling.id)159        beregningsresultat.beregningsresultatsperioder.size shouldBe 1160        val beregningsresultatsperiode = beregningsresultat.beregningsresultatsperioder[0]161        beregningsresultatsperiode.periode shouldBe PeriodeDto(periode)162        beregningsresultatsperiode.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)163        beregningsresultatsperiode.vurdering shouldBe Aktsomhet.FORSETT164        beregningsresultatsperiode.renteprosent shouldBe BigDecimal.valueOf(10)165        beregningsresultatsperiode.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)166        beregningsresultatsperiode.andelAvBeløp shouldBe BigDecimal.valueOf(100)167        beregningsresultatsperiode.tilbakekrevesBeløpEtterSkatt shouldBe BigDecimal.valueOf(10000)168        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.FULL_TILBAKEBETALING169    }170    @Test171    fun `beregn skalberegne riktig beløp og utbetalt beløp for periode`() {172        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))173        lagKravgrunnlag(periode, BigDecimal.valueOf(10))174        lagForeldelse(Testdata.behandling.id, periode, Foreldelsesvurderingstype.IKKE_FORELDET, null)175        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, periode)176        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)177        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder178        resultat.shouldHaveSize(1)179        val r: Beregningsresultatsperiode = resultat[0]180        r.utbetaltYtelsesbeløp shouldBe BigDecimal.valueOf(10000)181        r.riktigYtelsesbeløp shouldBe BigDecimal.ZERO182    }183    @Test184    fun `beregn skal beregne riktige beløp ved delvis feilutbetaling for perioder sammenslÃ¥tt til en logisk periode`() {185        val skatteprosent = BigDecimal.valueOf(10)186        val periode1 = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))187        val periode2 = Periode(LocalDate.of(2019, 5, 4), LocalDate.of(2019, 5, 6))188        val logiskPeriode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 6))189        val utbetalt1 = BigDecimal.valueOf(10000)190        val nyttBeløp1 = BigDecimal.valueOf(5000)191        val utbetalt2 = BigDecimal.valueOf(10000)192        val nyttBeløp2 = BigDecimal.valueOf(100)193        val feilutbetalt2 = utbetalt2.subtract(nyttBeløp2)194        val feilutbetalt1 = utbetalt1.subtract(nyttBeløp1)195        val grunnlagPeriode1: Kravgrunnlagsperiode432 =196                lagGrunnlagPeriode(periode1, 1000, setOf(lagYtelBeløp(utbetalt1, nyttBeløp1, skatteprosent),197                                                         lagFeilBeløp(feilutbetalt1)))198        val grunnlagPeriode2: Kravgrunnlagsperiode432 =199                lagGrunnlagPeriode(periode2, 1000, setOf(lagYtelBeløp(utbetalt2, nyttBeløp2, skatteprosent),200                                                         lagFeilBeløp(feilutbetalt2)))201        val grunnlag: Kravgrunnlag431 = lagGrunnlag(setOf(grunnlagPeriode1, grunnlagPeriode2))202        kravgrunnlagRepository.insert(grunnlag)203        lagForeldelse(Testdata.behandling.id, logiskPeriode, Foreldelsesvurderingstype.IKKE_FORELDET, null)204        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, logiskPeriode)205        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)206        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder207        resultat.shouldHaveSize(1)208        val r: Beregningsresultatsperiode = resultat[0]209        r.periode shouldBe logiskPeriode210        r.utbetaltYtelsesbeløp shouldBe utbetalt1.add(utbetalt2)211        r.riktigYtelsesbeløp shouldBe nyttBeløp1.add(nyttBeløp2)212    }213    @Test214    fun `beregn skal beregne tilbakekrevingsbeløp for ikkeForeldetPeriode nÃ¥r beregnetPeriode er pÃ¥ tvers av grunnlagPeriode`() {215        val periode = Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 31))216        val periode1 = Periode(LocalDate.of(2019, 6, 1), LocalDate.of(2019, 6, 30))217        val logiskPeriode = Periode(LocalDate.of(2019, 5, 1),218                                    LocalDate.of(2019, 6, 30))219        val grunnlagPeriode: Kravgrunnlagsperiode432 =220                lagGrunnlagPeriode(periode,221                                   1000,222                                   setOf(lagYtelBeløp(BigDecimal.valueOf(10000), BigDecimal.valueOf(10)),223                                         lagFeilBeløp(BigDecimal.valueOf(10000))))224        val grunnlagPeriode1: Kravgrunnlagsperiode432 =225                lagGrunnlagPeriode(periode1,226                                   1000,227                                   setOf(lagYtelBeløp(BigDecimal.valueOf(10000),228                                                      BigDecimal.valueOf(10)),229                                         lagFeilBeløp(BigDecimal.valueOf(10000))))230        val grunnlag: Kravgrunnlag431 = lagGrunnlag(setOf(grunnlagPeriode, grunnlagPeriode1))231        kravgrunnlagRepository.insert(grunnlag)232        lagForeldelse(Testdata.behandling.id, logiskPeriode, Foreldelsesvurderingstype.IKKE_FORELDET, null)233        lagVilkÃ¥rsvurderingMedForsett(Testdata.behandling.id, logiskPeriode)234        val beregningsresultat: Beregningsresultat = tilbakekrevingsberegningService.beregn(Testdata.behandling.id)235        val resultat: List<Beregningsresultatsperiode> = beregningsresultat.beregningsresultatsperioder236        resultat.shouldHaveSize(1)237        val r: Beregningsresultatsperiode = resultat[0]238        r.periode shouldBe logiskPeriode239        r.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(22000)240        r.vurdering shouldBe Aktsomhet.FORSETT241        r.renteprosent shouldBe BigDecimal.valueOf(10)242        r.feilutbetaltBeløp shouldBe BigDecimal.valueOf(20000)243        r.manueltSattTilbakekrevingsbeløp shouldBe null244        r.andelAvBeløp shouldBe BigDecimal.valueOf(100)245        r.skattebeløp shouldBe BigDecimal.valueOf(2000)246        r.tilbakekrevingsbeløpEtterSkatt shouldBe BigDecimal.valueOf(20000)247        beregningsresultat.vedtaksresultat shouldBe Vedtaksresultat.FULL_TILBAKEBETALING248    }249    @Test250    fun `beregnBeløp skal beregne feilutbetaltBeløp nÃ¥r saksbehandler deler opp periode`() {251        val kravgrunnlag431 = Testdata.kravgrunnlag431252        val feilkravgrunnlagsbeløp = Testdata.feilKravgrunnlagsbeløp433253        val yteseskravgrunnlagsbeløp = Testdata.ytelKravgrunnlagsbeløp433254        val førsteKravgrunnlagsperiode = Testdata.kravgrunnlagsperiode432255                .copy(periode = Periode(YearMonth.of(2017, 1), YearMonth.of(2017, 1)),256                      beløp = setOf(feilkravgrunnlagsbeløp.copy(id = UUID.randomUUID()),257                                    yteseskravgrunnlagsbeløp.copy(id = UUID.randomUUID())))258        val andreKravgrunnlagsperiode = Testdata.kravgrunnlagsperiode432259                .copy(id = UUID.randomUUID(),260                      periode = Periode(YearMonth.of(2017, 2), YearMonth.of(2017, 2)),261                      beløp = setOf(feilkravgrunnlagsbeløp.copy(id = UUID.randomUUID()),262                                    yteseskravgrunnlagsbeløp.copy(id = UUID.randomUUID())))263        kravgrunnlagRepository.insert(kravgrunnlag431.copy(perioder = setOf(førsteKravgrunnlagsperiode,264                                                                            andreKravgrunnlagsperiode)))265        val beregnetPerioderDto = tilbakekrevingsberegningService.beregnBeløp(behandlingId = Testdata.behandling.id,266                                                                              perioder = listOf(PeriodeDto(LocalDate.of(2017,267                                                                                                                        1,268                                                                                                                        1),269                                                                                                           LocalDate.of(2017,270                                                                                                                        1,271                                                                                                                        31)),272                                                                                                PeriodeDto(LocalDate.of(2017,273                                                                                                                        2,274                                                                                                                        1),275                                                                                                           LocalDate.of(2017,276                                                                                                                        2,277                                                                                                                        28))))278        beregnetPerioderDto.beregnetPerioder.size shouldBe 2279        beregnetPerioderDto.beregnetPerioder[0].periode shouldBe PeriodeDto(LocalDate.of(2017, 1, 1), LocalDate.of(2017, 1, 31))280        beregnetPerioderDto.beregnetPerioder[0].feilutbetaltBeløp shouldBe BigDecimal("10000")281        beregnetPerioderDto.beregnetPerioder[1].periode shouldBe PeriodeDto(LocalDate.of(2017, 2, 1), LocalDate.of(2017, 2, 28))282        beregnetPerioderDto.beregnetPerioder[1].feilutbetaltBeløp shouldBe BigDecimal("10000")283    }284    @Test285    fun `beregnBeløp skal ikke beregne feilutbetaltBeløp nÃ¥r saksbehandler deler opp periode som ikke starter første dato`() {286        val exception = shouldThrow<RuntimeException> {287            tilbakekrevingsberegningService.beregnBeløp(behandlingId = Testdata.behandling.id,288                                                        perioder = listOf(PeriodeDto(LocalDate.of(2017, 1, 1),289                                                                                     LocalDate.of(2017, 1, 31)),290                                                                          PeriodeDto(LocalDate.of(2017, 2, 16),291                                                                                     LocalDate.of(2017, 2, 28))))292        }293        exception.message shouldBe "Periode med ${294            PeriodeDto(LocalDate.of(2017, 2, 16),295                       LocalDate.of(2017, 2, 28))296        } er ikke i hele mÃ¥neder"297    }298    @Test299    fun `beregnBeløp skal ikke beregne feilutbetaltBeløp nÃ¥r saksbehandler deler opp periode som ikke slutter siste dato`() {300        val exception = shouldThrow<RuntimeException> {301            tilbakekrevingsberegningService.beregnBeløp(behandlingId = Testdata.behandling.id,302                                                        perioder = listOf(PeriodeDto(LocalDate.of(2017, 1, 1),303                                                                                     LocalDate.of(2017, 1, 27)),304                                                                          PeriodeDto(LocalDate.of(2017, 2, 1),305                                                                                     LocalDate.of(2017, 2, 28))))306        }307        exception.message shouldBe "Periode med ${308            PeriodeDto(LocalDate.of(2017, 1, 1),309                       LocalDate.of(2017, 1, 27))310        } er ikke i hele mÃ¥neder"311    }312    private fun lagVilkÃ¥rsvurderingMedForsett(behandlingId: UUID, vararg perioder: Periode) {313        val vurderingsperioder = perioder.map {314            VilkÃ¥rsvurderingsperiode(periode = Periode(it.fom, it.tom),315                                     begrunnelse = "foo",316                                     vilkÃ¥rsvurderingsresultat = VilkÃ¥rsvurderingsresultat.FEIL_OPPLYSNINGER_FRA_BRUKER,317                                     aktsomhet = VilkÃ¥rsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,318                                                                           begrunnelse = "foo"))319        }.toSet()320        val vurdering = VilkÃ¥rsvurdering(behandlingId = behandlingId,321                                         perioder = vurderingsperioder)322        vilkÃ¥rsvurderingRepository.insert(vurdering)323    }324    private fun lagForeldelse(behandlingId: UUID,325                              periode: Periode,326                              resultat: Foreldelsesvurderingstype,327                              foreldelsesFrist: LocalDate?) {328        val vurdertForeldelse =329                VurdertForeldelse(behandlingId = behandlingId,330                                  foreldelsesperioder = setOf(Foreldelsesperiode(periode = periode,331                                                                                 begrunnelse = "foo",332                                                                                 foreldelsesvurderingstype = resultat,333                                                                                 foreldelsesfrist = foreldelsesFrist)))334        vurdertForeldelseRepository.insert(vurdertForeldelse)335    }336    private fun lagKravgrunnlag(periode: Periode, skattProsent: BigDecimal) {337        val p = Testdata.kravgrunnlagsperiode432.copy(id = UUID.randomUUID(),338                                                      periode = periode,339                                                      beløp = setOf(lagFeilBeløp(BigDecimal.valueOf(10000)),340                                                                    lagYtelBeløp(BigDecimal.valueOf(10000), skattProsent)))341        val grunnlag: Kravgrunnlag431 = Testdata.kravgrunnlag431.copy(perioder = setOf(p))342        kravgrunnlagRepository.insert(grunnlag)343    }344    private fun lagFeilBeløp(feilutbetaling: BigDecimal): Kravgrunnlagsbeløp433 {345        return Kravgrunnlagsbeløp433(klassekode = Klassekode.KL_KODE_FEIL_BA,346                                     klassetype = Klassetype.FEIL,347                                     nyttBeløp = feilutbetaling,348                                     opprinneligUtbetalingsbeløp = BigDecimal.ZERO,349                                     tilbakekrevesBeløp = BigDecimal.ZERO,350                                     uinnkrevdBeløp = BigDecimal.ZERO,351                                     skatteprosent = BigDecimal.ZERO)352    }353    private fun lagYtelBeløp(utbetalt: BigDecimal, skatteprosent: BigDecimal): Kravgrunnlagsbeløp433 {354        return Kravgrunnlagsbeløp433(klassekode = Klassekode.BATR,355                                     klassetype = Klassetype.YTEL,356                                     tilbakekrevesBeløp = BigDecimal("10000"),357                                     opprinneligUtbetalingsbeløp = utbetalt,358                                     nyttBeløp = BigDecimal.ZERO,359                                     skatteprosent = skatteprosent)360    }361    private fun lagYtelBeløp(utbetalt: BigDecimal,362                             nyttBeløp: BigDecimal,363                             skatteprosent: BigDecimal): Kravgrunnlagsbeløp433 {364        return Kravgrunnlagsbeløp433(klassekode = Klassekode.BATR,365                                     klassetype = Klassetype.YTEL,366                                     tilbakekrevesBeløp = BigDecimal("10000"),367                                     opprinneligUtbetalingsbeløp = utbetalt,368                                     nyttBeløp = nyttBeløp,369                                     skatteprosent = skatteprosent,370                                     skyldkode = UUID.randomUUID()371                                             .toString()) // brukte skyldkode for Ã¥ fÃ¥ ulike Kravgrunnlagsbeløp433372    }373    private fun lagGrunnlagPeriode(periode: Periode,374                                   skattMnd: Int,375                                   beløp: Set<Kravgrunnlagsbeløp433> = setOf()): Kravgrunnlagsperiode432 {376        return Kravgrunnlagsperiode432(periode = periode,377                                       mÃ¥nedligSkattebeløp = BigDecimal.valueOf(skattMnd.toLong()),378                                       beløp = beløp)379    }380    private fun lagGrunnlag(perioder: Set<Kravgrunnlagsperiode432>): Kravgrunnlag431 {381        return Testdata.kravgrunnlag431.copy(perioder = perioder)382    }383}...TilbakekrevingsberegningVilkårTest.kt
Source:TilbakekrevingsberegningVilkårTest.kt  
1package no.nav.familie.tilbake.beregning2import com.google.common.collect.Lists3import io.kotest.matchers.bigdecimal.shouldBeZero4import io.kotest.matchers.shouldBe5import no.nav.familie.tilbake.beregning.modell.Beregningsresultatsperiode6import no.nav.familie.tilbake.beregning.modell.FordeltKravgrunnlagsbeløp7import no.nav.familie.tilbake.beregning.modell.GrunnlagsperiodeMedSkatteprosent8import no.nav.familie.tilbake.common.Periode9import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.Aktsomhet10import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.AnnenVurdering11import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingAktsomhet12import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingGodTro13import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingsperiode14import no.nav.familie.tilbake.vilkÃ¥rsvurdering.domain.VilkÃ¥rsvurderingsresultat15import org.junit.jupiter.api.BeforeEach16import org.junit.jupiter.api.Test17import java.math.BigDecimal18import java.time.LocalDate19class TilbakekrevingsberegningVilkÃ¥rTest {20    private lateinit var vurdering: VilkÃ¥rsvurderingsperiode21    private lateinit var grunnlagsperiodeMedSkatteprosent: GrunnlagsperiodeMedSkatteprosent22    private lateinit var forstoBurdeForstattVurdering: VilkÃ¥rsvurderingsperiode23    @BeforeEach24    fun setup() {25        vurdering =26                VilkÃ¥rsvurderingsperiode(vilkÃ¥rsvurderingsresultat = VilkÃ¥rsvurderingsresultat.FEIL_OPPLYSNINGER_FRA_BRUKER,27                                         periode = Periode(LocalDate.of(2019, 5, 1),28                                                           LocalDate.of(2019, 5, 3)),29                                         begrunnelse = "foo")30        forstoBurdeForstattVurdering =31                VilkÃ¥rsvurderingsperiode(vilkÃ¥rsvurderingsresultat = VilkÃ¥rsvurderingsresultat.FORSTO_BURDE_FORSTÃ
TT,32                                         periode = Periode(LocalDate.of(2019, 5, 1),33                                                           LocalDate.of(2019, 5, 3)),34                                         begrunnelse = "foo")35        grunnlagsperiodeMedSkatteprosent =36                GrunnlagsperiodeMedSkatteprosent(vurdering.periode, BigDecimal.valueOf(10000), BigDecimal.ZERO)37    }38    @Test39    fun `beregn skal kreve tilbake alt med renter ved forsett og illeggRenter ikke satt`() {40        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,41                                                                         begrunnelse = "foo"))42        //act43        val resultat: Beregningsresultatsperiode =44                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)45        //assert46        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)47        resultat.tilbakekrevingsbeløpUtenRenter shouldBe BigDecimal.valueOf(10000)48        resultat.rentebeløp shouldBe BigDecimal.valueOf(1000)49        resultat.renteprosent shouldBe BigDecimal.valueOf(10)50        resultat.andelAvBeløp shouldBe BigDecimal.valueOf(100)51        resultat.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)52        resultat.vurdering shouldBe Aktsomhet.FORSETT53        resultat.periode shouldBe Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))54        resultat.manueltSattTilbakekrevingsbeløp shouldBe null55    }56    @Test57    fun `beregn skal kreve tilbake alt med renter ved forsett og illeggRenter satt true`() {58        forstoBurdeForstattVurdering =59                forstoBurdeForstattVurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,60                                                                                        begrunnelse = "foo",61                                                                                        ileggRenter = true))62        //act63        val resultat: Beregningsresultatsperiode = beregn(forstoBurdeForstattVurdering,64                                                          BigDecimal.valueOf(10000),65                                                          Lists.newArrayList(grunnlagsperiodeMedSkatteprosent),66                                                          true)67        //assert68        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)69        resultat.tilbakekrevingsbeløpUtenRenter shouldBe BigDecimal.valueOf(10000)70        resultat.rentebeløp shouldBe BigDecimal.valueOf(1000)71        resultat.renteprosent shouldBe BigDecimal.valueOf(10)72        resultat.andelAvBeløp shouldBe BigDecimal.valueOf(100)73        resultat.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)74        resultat.vurdering shouldBe Aktsomhet.FORSETT75        resultat.periode shouldBe Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))76        resultat.manueltSattTilbakekrevingsbeløp shouldBe null77    }78    @Test79    fun `beregn skalkreve tilbake alt uten renter ved forsett og illeggRenter satt false`() {80        forstoBurdeForstattVurdering =81                forstoBurdeForstattVurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,82                                                                                        begrunnelse = "foo",83                                                                                        ileggRenter = false))84        //act85        val resultat: Beregningsresultatsperiode = beregn(forstoBurdeForstattVurdering,86                                                          BigDecimal.valueOf(10000),87                                                          Lists.newArrayList(grunnlagsperiodeMedSkatteprosent),88                                                          true)89        //assert90        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(10000)91        resultat.tilbakekrevingsbeløpUtenRenter shouldBe BigDecimal.valueOf(10000)92        resultat.rentebeløp shouldBe BigDecimal.valueOf(0)93        resultat.renteprosent shouldBe null94        resultat.andelAvBeløp shouldBe BigDecimal.valueOf(100)95        resultat.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)96        resultat.vurdering shouldBe Aktsomhet.FORSETT97        resultat.periode shouldBe Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))98        resultat.manueltSattTilbakekrevingsbeløp shouldBe null99    }100    @Test101    fun `beregn skalkreve tilbake alt ved grov uaktsomhet når ikke annet er valgt`() {102        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,103                                                                         begrunnelse = "foo",104                                                                         særligeGrunnerTilReduksjon = false,105                                                                         ileggRenter = true))106        //assert107        val resultat: Beregningsresultatsperiode =108                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)109        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)110        resultat.renteprosent shouldBe BigDecimal.valueOf(10)111        resultat.vurdering shouldBe Aktsomhet.GROV_UAKTSOMHET112    }113    @Test114    fun `beregn skalikke kreve noe når sjette ledd benyttes for å ikke gjøre innkreving av småbeløp`() {115        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.SIMPEL_UAKTSOMHET,116                                                                         begrunnelse = "foo",117                                                                         særligeGrunnerTilReduksjon = false,118                                                                         tilbakekrevSmåbeløp = false))119        //assert120        val resultat: Beregningsresultatsperiode =121                beregn(vurdering, BigDecimal.valueOf(522), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)122        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.ZERO123        resultat.vurdering shouldBe Aktsomhet.SIMPEL_UAKTSOMHET124    }125    @Test126    fun `beregn skalkreve tilbake deler ved grov uaktsomhet når særlige grunner er valgt og ilegge renter når det er valgt`() {127        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,128                                                                         begrunnelse = "foo",129                                                                         særligeGrunnerTilReduksjon = true,130                                                                         ileggRenter = true,131                                                                         andelTilbakekreves = BigDecimal.valueOf(70)))132        //assert133        val resultat: Beregningsresultatsperiode =134                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)135        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(7700)136        resultat.renteprosent shouldBe BigDecimal.valueOf(10)137    }138    @Test139    fun `beregn skal kreve tilbake deler ved grov uaktsomhet ved når særlige grunner og ikke ilegge renter når det er false`() {140        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,141                                                                         begrunnelse = "foo",142                                                                         særligeGrunnerTilReduksjon = true,143                                                                         ileggRenter = false,144                                                                         andelTilbakekreves = BigDecimal.valueOf(70)))145        //assert146        val resultat: Beregningsresultatsperiode =147                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)148        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(7000)149        resultat.renteprosent shouldBe null150        resultat.rentebeløp.shouldBeZero()151    }152    @Test153    fun `beregn skaltakle desimaler på prosenter som tilbakekreves`() {154        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,155                                                                         begrunnelse = "foo",156                                                                         særligeGrunnerTilReduksjon = true,157                                                                         ileggRenter = false,158                                                                         andelTilbakekreves = BigDecimal("0.01")))159        //assert160        val resultat: Beregningsresultatsperiode =161                beregn(vurdering, BigDecimal.valueOf(70000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)162        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(7)163        resultat.renteprosent shouldBe null164        resultat.rentebeløp.shouldBeZero()165    }166    @Test167    fun `beregn skalkreve tilbake manuelt beløp når det er satt`() {168        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,169                                                                         begrunnelse = "foo",170                                                                         særligeGrunnerTilReduksjon = true,171                                                                         ileggRenter = false,172                                                                         manueltSattBeløp = BigDecimal.valueOf(6556)))173        //assert174        val resultat: Beregningsresultatsperiode =175                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)176        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(6556)177        resultat.renteprosent shouldBe null178    }179    @Test180    fun `beregn skalkreve tilbake manuelt beløp med renter når det er satt`() {181        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.GROV_UAKTSOMHET,182                                                                         begrunnelse = "foo",183                                                                         særligeGrunnerTilReduksjon = true,184                                                                         ileggRenter = true,185                                                                         manueltSattBeløp = BigDecimal.valueOf(6000)))186        //assert187        val resultat: Beregningsresultatsperiode =188                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)189        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(6600)190        resultat.renteprosent shouldBe BigDecimal.valueOf(10)191    }192    @Test193    fun `beregn skalkreve tilbake beløp som er i_behold uten renter ved god tro`() {194        vurdering = vurdering.copy(godTro = VilkårsvurderingGodTro(beløpErIBehold = true,195                                                                   beløpTilbakekreves = BigDecimal.valueOf(8991),196                                                                   begrunnelse = "foo"))197        //assert198        val resultat: Beregningsresultatsperiode =199                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)200        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(8991)201        resultat.renteprosent shouldBe null202        resultat.andelAvBeløp shouldBe null203        resultat.vurdering shouldBe AnnenVurdering.GOD_TRO204        resultat.manueltSattTilbakekrevingsbeløp shouldBe BigDecimal.valueOf(8991)205    }206    @Test207    fun `beregn skalkreve tilbake ingenting når det er god tro og beløp ikke er i_behold`() {208        vurdering = vurdering.copy(godTro = VilkårsvurderingGodTro(beløpErIBehold = false,209                                                                   begrunnelse = "foo"))210        //assert211        val resultat: Beregningsresultatsperiode =212                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagsperiodeMedSkatteprosent), true)213        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.ZERO214        resultat.renteprosent shouldBe null215        resultat.andelAvBeløp!!.shouldBeZero()216        resultat.vurdering shouldBe AnnenVurdering.GOD_TRO217        resultat.manueltSattTilbakekrevingsbeløp shouldBe null218    }219    @Test220    fun `beregn skalkreve tilbake beløp som er i_behold uten renter ved god tro med skatt prosent`() {221        vurdering = vurdering.copy(godTro = VilkårsvurderingGodTro(beløpErIBehold = true,222                                                                   beløpTilbakekreves = BigDecimal.valueOf(8991),223                                                                   begrunnelse = "foo"))224        val grunnlagPeriodeMedSkattProsent =225                GrunnlagsperiodeMedSkatteprosent(vurdering.periode, BigDecimal.valueOf(10000), BigDecimal.valueOf(10))226        //assert227        val resultat: Beregningsresultatsperiode =228                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagPeriodeMedSkattProsent), true)229        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(8991)230        resultat.renteprosent shouldBe null231        resultat.andelAvBeløp shouldBe null232        resultat.vurdering shouldBe AnnenVurdering.GOD_TRO233        resultat.manueltSattTilbakekrevingsbeløp shouldBe BigDecimal.valueOf(8991)234        resultat.skattebeløp shouldBe BigDecimal.valueOf(899)235        resultat.tilbakekrevingsbeløpEtterSkatt shouldBe BigDecimal.valueOf(8092)236    }237    @Test238    fun `beregn skalkreve tilbake alt med renter ved forsett med skatt prosent`() {239        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,240                                                                         begrunnelse = "foo"))241        val grunnlagPeriodeMedSkattProsent =242                GrunnlagsperiodeMedSkatteprosent(vurdering.periode, BigDecimal.valueOf(10000), BigDecimal.valueOf(10))243        //act244        val resultat: Beregningsresultatsperiode =245                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagPeriodeMedSkattProsent), true)246        //assert247        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(11000)248        resultat.tilbakekrevingsbeløpUtenRenter shouldBe BigDecimal.valueOf(10000)249        resultat.rentebeløp shouldBe BigDecimal.valueOf(1000)250        resultat.renteprosent shouldBe BigDecimal.valueOf(10)251        resultat.andelAvBeløp shouldBe BigDecimal.valueOf(100)252        resultat.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)253        resultat.vurdering shouldBe Aktsomhet.FORSETT254        resultat.periode shouldBe Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))255        resultat.manueltSattTilbakekrevingsbeløp shouldBe null256        resultat.skattebeløp shouldBe BigDecimal.valueOf(1000)257        resultat.tilbakekrevingsbeløpEtterSkatt shouldBe BigDecimal.valueOf(10000)258    }259    @Test260    fun `beregn skalkreve tilbake alt uten renter ved forsett men frisinn med skatt prosent`() {261        vurdering = vurdering.copy(aktsomhet = VilkårsvurderingAktsomhet(aktsomhet = Aktsomhet.FORSETT,262                                                                         begrunnelse = "foo"))263        val grunnlagPeriodeMedSkattProsent =264                GrunnlagsperiodeMedSkatteprosent(vurdering.periode, BigDecimal.valueOf(10000), BigDecimal.valueOf(10))265        //act266        val resultat: Beregningsresultatsperiode =267                beregn(vurdering, BigDecimal.valueOf(10000), Lists.newArrayList(grunnlagPeriodeMedSkattProsent), false)268        //assert269        resultat.tilbakekrevingsbeløp shouldBe BigDecimal.valueOf(10000)270        resultat.tilbakekrevingsbeløpUtenRenter shouldBe BigDecimal.valueOf(10000)271        resultat.rentebeløp shouldBe BigDecimal.valueOf(0)272        resultat.renteprosent shouldBe null273        resultat.andelAvBeløp shouldBe BigDecimal.valueOf(100)274        resultat.feilutbetaltBeløp shouldBe BigDecimal.valueOf(10000)275        resultat.vurdering shouldBe Aktsomhet.FORSETT276        resultat.periode shouldBe Periode(LocalDate.of(2019, 5, 1), LocalDate.of(2019, 5, 3))277        resultat.manueltSattTilbakekrevingsbeløp shouldBe null278        resultat.skattebeløp shouldBe BigDecimal.valueOf(1000)279        resultat.tilbakekrevingsbeløpEtterSkatt shouldBe BigDecimal.valueOf(9000)280    }281    private fun beregn(vilkårVurdering: Vilkårsvurderingsperiode,282                       feilutbetalt: BigDecimal,283                       perioderMedSkatteprosent: List<GrunnlagsperiodeMedSkatteprosent>,284                       beregnRenter: Boolean): Beregningsresultatsperiode {285        val delresultat = FordeltKravgrunnlagsbeløp(feilutbetalt, feilutbetalt, BigDecimal.ZERO)286        return TilbakekrevingsberegningVilkår.beregn(vilkårVurdering, delresultat, perioderMedSkatteprosent, beregnRenter)287    }288}...BigDecimalMatchersTest.kt
Source:BigDecimalMatchersTest.kt  
1package com.sksamuel.kotest.matchers.bigdecimal2import io.kotest.matchers.bigdecimal.shouldBeGreaterThan3import io.kotest.matchers.bigdecimal.shouldBeGreaterThanOrEquals4import io.kotest.matchers.bigdecimal.shouldBeInRange5import io.kotest.matchers.bigdecimal.shouldBeLessThan6import io.kotest.matchers.bigdecimal.shouldBeLessThanOrEquals7import io.kotest.matchers.bigdecimal.shouldBeNegative8import io.kotest.matchers.bigdecimal.shouldBePositive9import io.kotest.matchers.bigdecimal.shouldBeZero10import io.kotest.matchers.bigdecimal.shouldHavePrecision11import io.kotest.matchers.bigdecimal.shouldHaveScale12import io.kotest.matchers.bigdecimal.shouldNotBeGreaterThan13import io.kotest.matchers.bigdecimal.shouldNotBeGreaterThanOrEquals14import io.kotest.matchers.bigdecimal.shouldNotBeInRange15import io.kotest.matchers.bigdecimal.shouldNotBeLessThan16import io.kotest.matchers.bigdecimal.shouldNotBeLessThanOrEquals17import io.kotest.matchers.bigdecimal.shouldNotHaveScale18import io.kotest.core.spec.style.StringSpec19import java.math.BigDecimal20class BigDecimalMatchersTest : StringSpec() {21  init {22    "shouldBeZero" {23      BigDecimal.ZERO.shouldBeZero()24      BigDecimal(0).shouldBeZero()25      0.toBigDecimal().shouldBeZero()26    }27    "shouldHavePrecision" {28      BigDecimal(10).setScale(3) shouldHavePrecision 529      BigDecimal(10.1) shouldHavePrecision 5130      10.1.toBigDecimal() shouldHavePrecision 331      BigDecimal.ZERO shouldHavePrecision 132    }33    "shouldHaveScale" {34      BigDecimal(10).setScale(3) shouldHaveScale 335      BigDecimal(10.1) shouldHaveScale 4936      10.444.toBigDecimal() shouldHaveScale 337      0.toBigDecimal() shouldHaveScale 038      BigDecimal.ZERO shouldHaveScale 039      BigDecimal(10).setScale(3) shouldNotHaveScale 140      BigDecimal(10.1) shouldNotHaveScale 541      10.444.toBigDecimal() shouldNotHaveScale 242      0.toBigDecimal() shouldNotHaveScale 143      BigDecimal.ZERO shouldNotHaveScale 244    }45    "shouldBePositive" {46      BigDecimal(10).shouldBePositive()47      BigDecimal.ZERO.shouldBePositive()48      BigDecimal(0.1).shouldBePositive()49      0.1.toBigDecimal().shouldBePositive()50    }51    "shouldBeNegative" {52      BigDecimal(-1).shouldBeNegative()53      (-1).toBigDecimal().shouldBeNegative()54      BigDecimal(-0.1).shouldBeNegative()55      BigDecimal(1).minus(BigDecimal(2)).shouldBeNegative()56    }57    "shouldBeGreaterThan" {58      BigDecimal.ONE shouldBeGreaterThan BigDecimal.ZERO59      BigDecimal.TEN shouldBeGreaterThan BigDecimal.ONE60      BigDecimal.ONE shouldNotBeGreaterThan BigDecimal.ONE61      BigDecimal.ONE shouldNotBeGreaterThan BigDecimal.TEN62      BigDecimal.TEN shouldNotBeGreaterThan BigDecimal.TEN63    }64    "shouldBeGreaterThanOrEquals" {65      BigDecimal.ONE shouldBeGreaterThanOrEquals BigDecimal.ZERO66      BigDecimal.ONE shouldBeGreaterThanOrEquals BigDecimal.ONE67      BigDecimal.TEN shouldBeGreaterThanOrEquals BigDecimal.ONE68      BigDecimal.TEN shouldBeGreaterThanOrEquals BigDecimal.TEN69      BigDecimal.ONE shouldNotBeGreaterThanOrEquals BigDecimal.TEN70      BigDecimal.ZERO shouldNotBeGreaterThanOrEquals BigDecimal.ONE71    }72    "shouldBeLessThan" {73      BigDecimal.ZERO shouldBeLessThan BigDecimal.ONE74      BigDecimal.ONE shouldBeLessThan BigDecimal.TEN75      BigDecimal.ONE shouldNotBeLessThan BigDecimal.ONE76      BigDecimal.TEN shouldNotBeLessThan BigDecimal.ONE77      BigDecimal.TEN shouldNotBeLessThan BigDecimal.TEN78    }79    "shouldBeLessThanOrEquals" {80      BigDecimal.ZERO shouldBeLessThanOrEquals BigDecimal.ONE81      BigDecimal.ONE shouldBeLessThanOrEquals BigDecimal.ONE82      BigDecimal.ONE shouldBeLessThanOrEquals BigDecimal.TEN83      BigDecimal.TEN shouldBeLessThanOrEquals BigDecimal.TEN84      BigDecimal.TEN shouldNotBeLessThanOrEquals BigDecimal.ONE85      BigDecimal.ONE shouldNotBeLessThanOrEquals BigDecimal.ZERO86    }87    "shouldBeInRange" {88      BigDecimal.ZERO shouldBeInRange BigDecimal(-1) .. BigDecimal(1)89      BigDecimal.ONE shouldBeInRange BigDecimal(-1) .. BigDecimal(1)90      (-BigDecimal.ONE) shouldBeInRange BigDecimal(-1) .. BigDecimal(1)91      BigDecimal.TEN shouldNotBeInRange BigDecimal(-1) .. BigDecimal(1)92    }93  }94}...matchers.kt
Source:matchers.kt  
1package io.kotest.matchers.bigdecimal2import io.kotest.matchers.comparables.gt3import io.kotest.matchers.comparables.gte4import io.kotest.matchers.comparables.lt5import io.kotest.matchers.comparables.lte6import io.kotest.matchers.Matcher7import io.kotest.matchers.MatcherResult8import io.kotest.matchers.should9import io.kotest.matchers.shouldBe10import io.kotest.matchers.shouldNot11import io.kotest.matchers.shouldNotBe12import java.math.BigDecimal13fun BigDecimal.shouldBeZero() = this shouldBe BigDecimal.ZERO14fun BigDecimal.shouldBePositive() = this shouldBe gte(BigDecimal.ZERO)15fun BigDecimal.shouldBeNegative() = this shouldBe lt(BigDecimal.ZERO)16infix fun BigDecimal.shouldHavePrecision(precision: Int) = this.precision() shouldBe precision17infix fun BigDecimal.shouldHaveScale(scale: Int) = this.scale() shouldBe scale18infix fun BigDecimal.shouldNotHaveScale(scale: Int) = this.scale() shouldNotBe scale19infix fun BigDecimal.shouldBeLessThan(other: BigDecimal) = this shouldBe lt(other)20infix fun BigDecimal.shouldBeLessThanOrEquals(other: BigDecimal) = this shouldBe lte(other)21infix fun BigDecimal.shouldNotBeLessThan(other: BigDecimal) = this shouldNotBe lt(other)22infix fun BigDecimal.shouldNotBeLessThanOrEquals(other: BigDecimal) = this shouldNotBe lte(other)23infix fun BigDecimal.shouldBeGreaterThan(other: BigDecimal) = this shouldBe gt(other)24infix fun BigDecimal.shouldBeGreaterThanOrEquals(other: BigDecimal) = this shouldBe gte(other)25infix fun BigDecimal.shouldNotBeGreaterThan(other: BigDecimal) = this shouldNotBe gt(other)26infix fun BigDecimal.shouldNotBeGreaterThanOrEquals(other: BigDecimal) = this shouldNotBe gte(other)27infix fun BigDecimal.shouldBeInRange(range: ClosedRange<BigDecimal>) = this should beInClosedRange(range)28infix fun BigDecimal.shouldNotBeInRange(range: ClosedRange<BigDecimal>) = this shouldNot beInClosedRange(range)29fun beInClosedRange(range: ClosedRange<BigDecimal>) = object : Matcher<BigDecimal> {30   override fun test(value: BigDecimal) = MatcherResult(31      range.contains(value),32      { "Value $value should be in range from ${range.start} to ${range.endInclusive} (Inclusive)" },33      {34         "Value $value should not be in range from ${range.start} to ${range.endInclusive} (Inclusive)"35      })36}...BigDecimal.shouldBeZero
Using AI Code Generation
1    import io.kotest.matchers.bigdecimal.matchers.shouldBeZero2    import io.kotest.matchers.bigdecimal.matchers.shouldBePositive3    import io.kotest.matchers.bigdecimal.matchers.shouldBeNegative4    import io.kotest.matchers.bigdecimal.matchers.shouldBeNonNegative5    import io.kotest.matchers.bigdecimal.matchers.shouldBeNonPositive6    import io.kotest.matchers.bigdecimal.matchers.shouldBeInRange7    import io.kotest.matchers.bigdecimal.matchers.shouldBeLessThan8    import io.kotest.matchers.bigdecimal.matchers.shouldBeGreaterThan9    import io.kotest.matchers.bigdecimal.matchers.shouldBeLessThanOrEqual10    import io.kotest.matchers.bigdecimal.matchers.shouldBeGreaterThanOrEqual11    import io.kotest.matchers.bigdecimal.matchers.shouldBeEqualIncludingScale12    import io.kotest.matchers.bigdecimal.matchers.shouldBeEqualComparingOnlyScaleBigDecimal.shouldBeZero
Using AI Code Generation
1@DisplayName("BigDecimal.shouldBeZero method")2inner class BigDecimalShouldBeZeroTest {3fun `should pass when BigDecimal is zero`() {4BigDecimal.ZERO.shouldBeZero()5}6fun `should fail when BigDecimal is not zero`() {7shouldThrow<AssertionError> {8BigDecimal.ONE.shouldBeZero()9}10}11}12}13@DisplayName("BigDecimal.shouldBePositive method")14inner class BigDecimalShouldBePositiveTest {15fun `should pass when BigDecimal is positive`() {16BigDecimal.ONE.shouldBePositive()17}18fun `should fail when BigDecimal is not positive`() {19shouldThrow<AssertionError> {20BigDecimal.ZERO.shouldBePositive()21}22}23}24@DisplayName("BigDecimal.shouldBeNegative method")25inner class BigDecimalShouldBeNegativeTest {26fun `should pass when BigDecimal is negative`() {27BigDecimal.ONE.negate().shouldBeNegative()28}29fun `should fail when BigDecimal is not negative`() {30shouldThrow<AssertionError> {31BigDecimal.ZERO.shouldBeNegative()32}33}34}35@DisplayName("BigDecimal.shouldBeNonPositive method")36inner class BigDecimalShouldBeNonPositiveTest {37fun `should pass when BigDecimal is non-positive`() {38BigDecimal.ZERO.shouldBeNonPositive()39}40fun `should fail when BigDecimal is not non-positive`() {41shouldThrow<AssertionError> {42BigDecimal.ONE.shouldBeNonPositive()43}44}45}46@DisplayName("BigDecimal.shouldBeNonNegative method")47inner class BigDecimalShouldBeNonNegativeTest {48fun `should pass when BigDecimal is non-negative`() {49BigDecimal.ZERO.shouldBeNonNegative()50}51fun `should fail when BigDecimal is not non-negative`() {52shouldThrow<AssertionError> {53BigDecimal.ONE.negate().shouldBeNonNegative()54}55}56}57}58@DisplayName("BigDecimal.shouldBeGreaterThan method")59inner class BigDecimalShouldBeGreaterThanTest {BigDecimal.shouldBeZero
Using AI Code Generation
1class BigDecimalMatchersTest : FunSpec() {2override fun isInstancePerTest() = true3init {4test("BigDecimal.shouldBeZero") {5BigDecimal.ZERO.shouldBeZero()6BigDecimal("0.0").shouldBeZero()7BigDecimal("0.00").shouldBeZero()8BigDecimal("0.000").shouldBeZero()9}10test("BigDecimal.shouldNotBeZero") {11BigDecimal("1.0").shouldNotBeZero()12BigDecimal("1.0BigDecimal.shouldBeZero
Using AI Code Generation
1@DisplayName ( "BigDecimal shouldBeZero" ) fun ` BigDecimal shouldBeZero` () { 1.0 . shouldBeZero () }2@DisplayName ( "BigDecimal shouldBeNonZero" ) fun ` BigDecimal shouldBeNonZero` () { 1.0 . shouldBeNonZero () }3@DisplayName ( "BigDecimal shouldBeGreaterThan" ) fun ` BigDecimal shouldBeGreaterThan` () { 1.0 . shouldBeGreaterThan ( 0.0 ) }4@DisplayName ( "BigDecimal shouldBeGreaterThanOrEqual" ) fun ` BigDecimal shouldBeGreaterThanOrEqual` () { 1.0 . shouldBeGreaterThanOrEqual ( 0.0 ) }5@DisplayName ( "BigDecimal shouldBeLessThan" ) fun ` BigDecimal shouldBeLessThan` () { 1.0 . shouldBeLessThan ( 2.0 ) }6@DisplayName ( "BigDecimal shouldBeLessThanOrEqual" ) fun ` BigDecimal shouldBeLessThanOrEqual` () { 1.0 . shouldBeLessThanOrEqual ( 2.0 ) }7@DisplayName ( "BigDecimal shouldBeBetween" ) fun ` BigDecimal shouldBeBetween` () { 1.0 . shouldBeBetween ( 0.0 , 2.0 ) }8@DisplayName ( "BigDecimal shouldNotBeBetween" ) fun ` BigDecimal shouldNotBeBetween` () { 1.0 . shouldNotBeBetween ( 2.0 , 3.0 ) }9@DisplayName ( "BigDecimal shouldBePositive" ) fun ` BigDecimal shouldBePositive` () { 1.0 . shouldBePositive () }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!!
