Skip to content

Commit 8a68f4a

Browse files
authored
TFP-5193: Bruker avskilte ArenaDTOer mot fp-ws-proxy og skriver enhetstester for konsistens (#2070)
1 parent 64ccfab commit 8a68f4a

File tree

9 files changed

+244
-5
lines changed

9 files changed

+244
-5
lines changed

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/InnhentingSamletTjeneste.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import no.nav.foreldrepenger.abakus.registerdata.inntekt.komponenten.Månedsinntekt;
3333
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortTjeneste;
3434
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagSak;
35+
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs.FpwsproxyKlient;
3536
import no.nav.foreldrepenger.abakus.registerdata.ytelse.infotrygd.InnhentingInfotrygdTjeneste;
3637
import no.nav.foreldrepenger.abakus.registerdata.ytelse.infotrygd.dto.InfotrygdYtelseGrunnlag;
3738
import no.nav.foreldrepenger.abakus.typer.AktørId;
@@ -152,6 +153,8 @@ private void hentDagpengerAAPFraFpWsProxyFailSafe(PersonIdent ident, LocalDate f
152153
Arena: {},
153154
Fp-ws-proxy: {}
154155
""", saker, sakerFpWsProxy);
156+
} else {
157+
LOGGER.info("Ingen avvik funnet melllom direkte integrasjon mot Arena og via fp-ws-proxy.");
155158
}
156159
} catch (Exception e) {
157160
LOGGER.info("Kall mot fp-ws-proxy api for arena feilet!", e);

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ArenaRequestDto.java renamed to domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ytelse/arena/rs/ArenaRequestDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.foreldrepenger.abakus.registerdata;
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
22

33
import java.time.LocalDate;
44

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import java.math.BigDecimal;
4+
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
8+
public record BeløpDto(@JsonValue BigDecimal verdi) {
9+
10+
@JsonCreator(mode = JsonCreator.Mode.DELEGATING)
11+
public BeløpDto { // NOSONAR
12+
}
13+
14+
@Override
15+
public BigDecimal verdi() {
16+
return verdi;
17+
}
18+
}

domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/FpwsproxyKlient.java renamed to domenetjenester/iay/src/main/java/no/nav/foreldrepenger/abakus/registerdata/ytelse/arena/rs/FpwsproxyKlient.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package no.nav.foreldrepenger.abakus.registerdata;
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
22

33
import java.net.URI;
44
import java.time.LocalDate;
@@ -13,8 +13,10 @@
1313
import org.slf4j.Logger;
1414
import org.slf4j.LoggerFactory;
1515

16+
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagMeldekort;
1617
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagSak;
1718
import no.nav.foreldrepenger.abakus.typer.PersonIdent;
19+
import no.nav.foreldrepenger.abakus.typer.Saksnummer;
1820
import no.nav.vedtak.felles.integrasjon.rest.RestClient;
1921
import no.nav.vedtak.felles.integrasjon.rest.RestClientConfig;
2022
import no.nav.vedtak.felles.integrasjon.rest.RestConfig;
@@ -42,13 +44,16 @@ public List<MeldekortUtbetalingsgrunnlagSak> hentDagpengerAAP(PersonIdent ident,
4244
LOG.info("Henter dagpengerAAP for {} i periode fom {} tom {}", ident.getIdent(), fom, tom);
4345
var target = UriBuilder.fromUri(endpoint).build();
4446
var body = new ArenaRequestDto(ident.getIdent(), fom, tom);
45-
var request = RestRequest.newPOSTJson(body, target, MeldekortUtbetalingsgrunnlagSak[].class);
47+
var request = RestRequest.newPOSTJson(body, target, MeldekortUtbetalingsgrunnlagSakDto[].class);
4648
LOG.info("Sender request til fp-ws-proxy arena {}", request);
47-
var result = restClient.send(request, MeldekortUtbetalingsgrunnlagSak[].class);
49+
var result = restClient.send(request, MeldekortUtbetalingsgrunnlagSakDto[].class);
4850
LOG.info("Resultat mottatt er {} ", result);
49-
return Arrays.asList(result);
51+
return Arrays.stream(result)
52+
.map(MedlemskortUtbetalingsgrunnlagSakMapper::tilDomeneModell)
53+
.toList();
5054
} catch (UriBuilderException|IllegalArgumentException e) {
5155
throw new IllegalArgumentException("Utviklerfeil syntax-exception for hentDagpengerAAP");
5256
}
5357
}
58+
5459
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import java.util.List;
4+
5+
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagMeldekort;
6+
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagSak;
7+
import no.nav.foreldrepenger.abakus.typer.Saksnummer;
8+
9+
public class MedlemskortUtbetalingsgrunnlagSakMapper {
10+
11+
private MedlemskortUtbetalingsgrunnlagSakMapper() {
12+
// Statisk implementasjon
13+
}
14+
15+
public static MeldekortUtbetalingsgrunnlagSak tilDomeneModell(MeldekortUtbetalingsgrunnlagSakDto meldekortUtbetalingsgrunnlagSakDto) {
16+
return MeldekortUtbetalingsgrunnlagSak.MeldekortSakBuilder.ny()
17+
.leggTilMeldekort(tilMeldekort(meldekortUtbetalingsgrunnlagSakDto.meldekortene()))
18+
.medType(meldekortUtbetalingsgrunnlagSakDto.type())
19+
.medTilstand(meldekortUtbetalingsgrunnlagSakDto.tilstand())
20+
.medKilde(meldekortUtbetalingsgrunnlagSakDto.kilde())
21+
.medSaksnummer(meldekortUtbetalingsgrunnlagSakDto.saksnummer() != null ? new Saksnummer(meldekortUtbetalingsgrunnlagSakDto.saksnummer()) : null)
22+
.medSakStatus(meldekortUtbetalingsgrunnlagSakDto.sakStatus())
23+
.medVedtakStatus(meldekortUtbetalingsgrunnlagSakDto.vedtakStatus())
24+
.medKravMottattDato(meldekortUtbetalingsgrunnlagSakDto.kravMottattDato())
25+
.medVedtattDato(meldekortUtbetalingsgrunnlagSakDto.vedtattDato())
26+
.medVedtaksPeriodeFom(meldekortUtbetalingsgrunnlagSakDto.vedtaksPeriodeFom())
27+
.medVedtaksPeriodeTom(meldekortUtbetalingsgrunnlagSakDto.vedtaksPeriodeTom())
28+
.medVedtaksDagsats(meldekortUtbetalingsgrunnlagSakDto.vedtaksDagsats() != null ? meldekortUtbetalingsgrunnlagSakDto.vedtaksDagsats().verdi() : null)
29+
.build();
30+
}
31+
32+
private static List<MeldekortUtbetalingsgrunnlagMeldekort> tilMeldekort(List<MeldekortUtbetalingsgrunnlagMeldekortDto> meldekortene) {
33+
return meldekortene.stream()
34+
.map(MedlemskortUtbetalingsgrunnlagSakMapper::tilMeldekortDomene)
35+
.toList();
36+
}
37+
38+
private static MeldekortUtbetalingsgrunnlagMeldekort tilMeldekortDomene(MeldekortUtbetalingsgrunnlagMeldekortDto meldekortUtbetalingsgrunnlagMeldekortDto) {
39+
return MeldekortUtbetalingsgrunnlagMeldekort.MeldekortMeldekortBuilder.ny()
40+
.medMeldekortFom(meldekortUtbetalingsgrunnlagMeldekortDto.meldekortFom())
41+
.medMeldekortTom(meldekortUtbetalingsgrunnlagMeldekortDto.meldekortTom())
42+
.medDagsats(meldekortUtbetalingsgrunnlagMeldekortDto.dagsats())
43+
.medBeløp(meldekortUtbetalingsgrunnlagMeldekortDto.beløp())
44+
.medUtbetalingsgrad(meldekortUtbetalingsgrunnlagMeldekortDto.utbetalingsgrad())
45+
.build();
46+
}
47+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import java.math.BigDecimal;
4+
import java.time.LocalDate;
5+
6+
public record MeldekortUtbetalingsgrunnlagMeldekortDto(BigDecimal beløp,
7+
BigDecimal dagsats,
8+
LocalDate meldekortFom,
9+
LocalDate meldekortTom,
10+
11+
BigDecimal utbetalingsgrad) {
12+
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import java.time.LocalDate;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Optional;
7+
8+
import no.nav.abakus.iaygrunnlag.kodeverk.Fagsystem;
9+
import no.nav.abakus.iaygrunnlag.kodeverk.YtelseStatus;
10+
import no.nav.abakus.iaygrunnlag.kodeverk.YtelseType;
11+
12+
13+
public record MeldekortUtbetalingsgrunnlagSakDto(Fagsystem kilde,
14+
LocalDate kravMottattDato,
15+
List<MeldekortUtbetalingsgrunnlagMeldekortDto> meldekortene,
16+
String sakStatus,
17+
String saksnummer,
18+
YtelseStatus tilstand,
19+
YtelseType type,
20+
String vedtakStatus,
21+
BeløpDto vedtaksDagsats,
22+
LocalDate vedtaksPeriodeFom,
23+
LocalDate vedtaksPeriodeTom,
24+
LocalDate vedtattDato) {
25+
26+
public MeldekortUtbetalingsgrunnlagSakDto {
27+
meldekortene = Optional.ofNullable(meldekortene).orElse(Collections.emptyList());
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import static no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs.MeldekortUtbetalingsgrunnlagSakDtoSeraliseringOgDeseraliseringTest.getMeldekortUtbetalingsgrunnlagSakDto;
4+
import static org.assertj.core.api.Assertions.assertThat;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.MeldekortUtbetalingsgrunnlagMeldekort;
9+
10+
class MedlemskortUtbetalingsgrunnlagSakMapperTest {
11+
12+
@Test
13+
void testMappingKonsistens() {
14+
var meldekortUtbetalingsgrunnlagSakDto = getMeldekortUtbetalingsgrunnlagSakDto();
15+
var domeneobjekt = MedlemskortUtbetalingsgrunnlagSakMapper.tilDomeneModell(meldekortUtbetalingsgrunnlagSakDto);
16+
17+
assertThat(meldekortUtbetalingsgrunnlagSakDto.meldekortene()).hasSameSizeAs(domeneobjekt.getMeldekortene()).hasSize(1);
18+
var meldekortUtbetalingsgrunnlagMeldekortDto = meldekortUtbetalingsgrunnlagSakDto.meldekortene().get(0);
19+
var meldekortDomene = domeneobjekt.getMeldekortene().get(0);
20+
assertThat(meldekortUtbetalingsgrunnlagMeldekortDto.meldekortFom()).isEqualTo(meldekortDomene.getMeldekortFom());
21+
assertThat(meldekortUtbetalingsgrunnlagMeldekortDto.meldekortTom()).isEqualTo(meldekortDomene.getMeldekortTom());
22+
assertThat(meldekortUtbetalingsgrunnlagMeldekortDto.dagsats()).isEqualTo(meldekortDomene.getDagsats());
23+
assertThat(meldekortUtbetalingsgrunnlagMeldekortDto.beløp()).isEqualTo(meldekortDomene.getBeløp());
24+
assertThat(meldekortUtbetalingsgrunnlagMeldekortDto.utbetalingsgrad()).isEqualTo(meldekortDomene.getUtbetalingsgrad());
25+
26+
assertThat(meldekortUtbetalingsgrunnlagSakDto.type()).isEqualTo(domeneobjekt.getYtelseType());
27+
assertThat(meldekortUtbetalingsgrunnlagSakDto.tilstand()).isEqualTo(domeneobjekt.getYtelseTilstand());
28+
assertThat(meldekortUtbetalingsgrunnlagSakDto.kilde()).isEqualTo(domeneobjekt.getKilde());
29+
assertThat(meldekortUtbetalingsgrunnlagSakDto.saksnummer()).isEqualTo(domeneobjekt.getSaksnummer().getVerdi());
30+
assertThat(meldekortUtbetalingsgrunnlagSakDto.sakStatus()).isEqualTo(domeneobjekt.getSakStatus());
31+
assertThat(meldekortUtbetalingsgrunnlagSakDto.vedtakStatus()).isEqualTo(domeneobjekt.getVedtakStatus());
32+
assertThat(meldekortUtbetalingsgrunnlagSakDto.kravMottattDato()).isEqualTo(domeneobjekt.getKravMottattDato());
33+
assertThat(meldekortUtbetalingsgrunnlagSakDto.vedtattDato()).isEqualTo(domeneobjekt.getVedtattDato());
34+
assertThat(meldekortUtbetalingsgrunnlagSakDto.vedtaksPeriodeFom()).isEqualTo(domeneobjekt.getVedtaksPeriodeFom());
35+
assertThat(meldekortUtbetalingsgrunnlagSakDto.vedtaksPeriodeTom()).isEqualTo(domeneobjekt.getVedtaksPeriodeTom());
36+
assertThat(meldekortUtbetalingsgrunnlagSakDto.vedtaksDagsats().verdi()).isEqualTo(domeneobjekt.getVedtaksDagsats().getVerdi());
37+
}
38+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package no.nav.foreldrepenger.abakus.registerdata.ytelse.arena.rs;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.math.BigDecimal;
6+
import java.time.LocalDate;
7+
import java.util.List;
8+
9+
import org.junit.jupiter.api.Test;
10+
11+
import no.nav.abakus.iaygrunnlag.kodeverk.Fagsystem;
12+
import no.nav.abakus.iaygrunnlag.kodeverk.YtelseStatus;
13+
import no.nav.abakus.iaygrunnlag.kodeverk.YtelseType;
14+
import no.nav.vedtak.mapper.json.DefaultJsonMapper;
15+
16+
/**
17+
* Konsistens test for å verifiser at seralisering og deseralisering av DTO ikke endrer seg og fungere som forventet
18+
*/
19+
class MeldekortUtbetalingsgrunnlagSakDtoSeraliseringOgDeseraliseringTest {
20+
21+
@Test
22+
void konsistenstestForÅSjekkeAtDeseraliseringFungereUavhengigAvSeralisering() {
23+
var seralisertStreng = hardkodetSeralisertStreng();
24+
var testA = DefaultJsonMapper.fromJson(seralisertStreng, MeldekortUtbetalingsgrunnlagSakDto.class);
25+
assertThat(testA).isEqualTo(getMeldekortUtbetalingsgrunnlagSakDto());
26+
}
27+
28+
@Test
29+
void konsistenstestForÅSjekkeAtSeraliseringFungereUavhengigAvDeseralisering() {
30+
var meldekortUtbetalingsgrunnlagSakDto = getMeldekortUtbetalingsgrunnlagSakDto();
31+
var seralized = DefaultJsonMapper.toJson(meldekortUtbetalingsgrunnlagSakDto);
32+
assertThat(seralized).isEqualToIgnoringWhitespace(hardkodetSeralisertStreng().replaceAll("[\n\r ]", ""));
33+
}
34+
35+
private static String hardkodetSeralisertStreng() {
36+
return """
37+
{
38+
"kilde": "ARENA",
39+
"kravMottattDato": "2022-08-24",
40+
"meldekortene": [
41+
{
42+
"beløp": 10,
43+
"dagsats": 1,
44+
"meldekortFom": "2022-08-24",
45+
"meldekortTom": "2022-08-29",
46+
"utbetalingsgrad": 10
47+
}
48+
],
49+
"sakStatus": "AKTIV",
50+
"saksnummer": "1234567890",
51+
"tilstand": "LOP",
52+
"type": "DAG",
53+
"vedtakStatus": "IVERK",
54+
"vedtaksDagsats": 809.0,
55+
"vedtaksPeriodeFom": "2022-12-27",
56+
"vedtaksPeriodeTom": "2023-01-06",
57+
"vedtattDato": "2022-08-24"
58+
}
59+
""";
60+
}
61+
62+
63+
static MeldekortUtbetalingsgrunnlagSakDto getMeldekortUtbetalingsgrunnlagSakDto() {
64+
return new MeldekortUtbetalingsgrunnlagSakDto(
65+
Fagsystem.ARENA,
66+
LocalDate.of(2022, 8, 24),
67+
List.of(getMeldekortUtbetalingsgrunnlagMeldekortDto()),
68+
"AKTIV",
69+
"1234567890",
70+
YtelseStatus.LØPENDE,
71+
YtelseType.DAGPENGER,
72+
"IVERK",
73+
new BeløpDto(BigDecimal.valueOf(809.0)),
74+
LocalDate.of(2022, 12, 27),
75+
LocalDate.of(2023, 01, 6),
76+
LocalDate.of(2022, 8, 24));
77+
}
78+
79+
private static MeldekortUtbetalingsgrunnlagMeldekortDto getMeldekortUtbetalingsgrunnlagMeldekortDto() {
80+
return new MeldekortUtbetalingsgrunnlagMeldekortDto(
81+
BigDecimal.TEN, BigDecimal.ONE,
82+
LocalDate.of(2022, 8, 24),
83+
LocalDate.of(2022, 8, 29),
84+
BigDecimal.TEN);
85+
}
86+
}

0 commit comments

Comments
 (0)