Skip to content

Commit 175ef14

Browse files
authored
bugfix/inntektsmelding_q1_q2 (#3421)
Fiks for feil behandling av inntektsmeldinger til forskjellige miljøer.
1 parent 75528ba commit 175ef14

File tree

20 files changed

+481
-151
lines changed

20 files changed

+481
-151
lines changed

apps/dolly-backend/README.md

+3-2
Original file line numberDiff line numberDiff line change
@@ -44,5 +44,6 @@ TESTCONTAINERS_RYUK_DISABLED=true
4444
For å kjøre lokalt med elastic search:
4545

4646
```
47-
docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "plugins.security.disabled=true" --name opensearch-node -d opensearchproject/opensearch:latest
48-
```
47+
docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" -e "plugins.security.disabled=true" -e "OPENSEARCH_INITIAL_ADMIN_PASSWORD=YLAgOm}rz#o6#Aq" --name opensearch -d opensearchproject/opensearch:latest
48+
```
49+
Legg merke til passord `YLAgOm}rz#o6#Aq` (tilfeldig [generert](https://www.strongpasswordgenerator.org/), men må være "sterkt" ellers vil ikke OpenSearch starte).

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/inntektsmelding/InntektsmeldingClient.java

+41-34
Original file line numberDiff line numberDiff line change
@@ -85,52 +85,59 @@ private ClientFuture futurePersist(BestillingProgress progress, String status) {
8585
};
8686
}
8787

88-
private Flux<String> postInntektsmelding(boolean isSendMelding,
89-
InntektsmeldingRequest inntektsmeldingRequest, Long bestillingid) {
90-
88+
private Flux<String> postInntektsmelding(
89+
boolean isSendMelding,
90+
InntektsmeldingRequest inntektsmeldingRequest,
91+
Long bestillingid
92+
) {
93+
final var miljoe = inntektsmeldingRequest.getMiljoe();
9194
if (isSendMelding) {
92-
return inntektsmeldingConsumer.postInntektsmelding(inntektsmeldingRequest)
95+
return inntektsmeldingConsumer
96+
.postInntektsmelding(inntektsmeldingRequest)
9397
.map(response -> {
9498
if (isBlank(response.getError())) {
95-
96-
transaksjonMappingService.saveAll(
97-
response.getDokumenter().stream()
98-
.map(dokument -> {
99-
var gjeldendeInntektRequest = InntektsmeldingRequest.builder()
100-
.arbeidstakerFnr(inntektsmeldingRequest.getArbeidstakerFnr())
101-
.inntekter(singletonList(
102-
inntektsmeldingRequest.getInntekter().get(response.getDokumenter().indexOf(dokument))))
103-
.joarkMetadata(inntektsmeldingRequest.getJoarkMetadata())
104-
.miljoe(inntektsmeldingRequest.getMiljoe())
105-
.build();
106-
107-
return TransaksjonMapping.builder()
108-
.ident(inntektsmeldingRequest.getArbeidstakerFnr())
109-
.bestillingId(bestillingid)
110-
.transaksjonId(toJson(TransaksjonMappingDTO.builder()
111-
.request(gjeldendeInntektRequest)
112-
.dokument(dokument)
113-
.build()))
114-
.datoEndret(LocalDateTime.now())
115-
.miljoe(inntektsmeldingRequest.getMiljoe())
116-
.system(INNTKMELD.name())
117-
.build();
118-
})
119-
.toList());
120-
121-
return inntektsmeldingRequest.getMiljoe() + ":OK";
99+
var entries = response
100+
.getDokumenter()
101+
.stream()
102+
.map(dokument -> {
103+
var gjeldendeInntektRequest = InntektsmeldingRequest
104+
.builder()
105+
.arbeidstakerFnr(inntektsmeldingRequest.getArbeidstakerFnr())
106+
.inntekter(singletonList(inntektsmeldingRequest.getInntekter().get(response.getDokumenter().indexOf(dokument))))
107+
.joarkMetadata(inntektsmeldingRequest.getJoarkMetadata())
108+
.miljoe(miljoe)
109+
.build();
110+
var json = toJson(TransaksjonMappingDTO
111+
.builder()
112+
.request(gjeldendeInntektRequest)
113+
.dokument(dokument)
114+
.build());
115+
return TransaksjonMapping
116+
.builder()
117+
.ident(inntektsmeldingRequest.getArbeidstakerFnr())
118+
.bestillingId(bestillingid)
119+
.transaksjonId(json)
120+
.datoEndret(LocalDateTime.now())
121+
.miljoe(miljoe)
122+
.system(INNTKMELD.name())
123+
.build();
124+
})
125+
.toList();
126+
transaksjonMappingService.saveAll(entries);
127+
128+
return miljoe + ":OK";
122129

123130
} else {
124131
log.error("Feilet å legge inn person: {} til Inntektsmelding miljø: {} feilmelding {}",
125-
inntektsmeldingRequest.getArbeidstakerFnr(), inntektsmeldingRequest.getMiljoe(), response.getError());
132+
inntektsmeldingRequest.getArbeidstakerFnr(), miljoe, response.getError());
126133

127-
return String.format(STATUS_FMT, inntektsmeldingRequest.getMiljoe(),
134+
return String.format(STATUS_FMT, miljoe,
128135
errorStatusDecoder.getErrorText(response.getStatus(), response.getError()));
129136

130137
}
131138
});
132139
} else {
133-
return Flux.just(inntektsmeldingRequest.getMiljoe() + ":OK");
140+
return Flux.just(miljoe + ":OK");
134141
}
135142
}
136143

apps/dolly-backend/src/main/java/no/nav/dolly/bestilling/service/OpprettPersonerByKriterierService.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public OpprettPersonerByKriterierService(
6767
@Async
6868
public void executeAsync(Bestilling bestilling) {
6969

70-
log.info("Bestilling med id=#{} og type={} er startet ...", bestilling.getId(), getBestillingType(bestilling));
70+
log.info("Bestilling med id=#{} og type={} er startet i miljøer {} ...", bestilling.getId(), getBestillingType(bestilling), bestilling.getMiljoer());
7171
MDC.put(MDC_KEY_BESTILLING, bestilling.getId().toString());
7272
Hooks.onEachOperator(Operators.lift(new ThreadLocalContextLifter<>()));
7373

apps/dolly-backend/src/main/java/no/nav/dolly/domain/jpa/InfoStripe.java

+12-17
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
package no.nav.dolly.domain.jpa;
22

3-
import jakarta.persistence.Column;
4-
import jakarta.persistence.Entity;
5-
import jakarta.persistence.GeneratedValue;
6-
import jakarta.persistence.Id;
7-
import jakarta.persistence.Table;
8-
import lombok.AllArgsConstructor;
9-
import lombok.Builder;
10-
import lombok.Getter;
11-
import lombok.NoArgsConstructor;
12-
import lombok.Setter;
3+
import jakarta.persistence.*;
4+
import lombok.*;
135
import no.nav.dolly.domain.resultset.entity.infostripe.InfoStripeType;
146
import org.apache.commons.lang3.builder.EqualsBuilder;
157
import org.apache.commons.lang3.builder.HashCodeBuilder;
@@ -19,8 +11,6 @@
1911
import java.io.Serializable;
2012
import java.time.LocalDateTime;
2113

22-
import static no.nav.dolly.domain.jpa.HibernateConstants.SEQUENCE_STYLE_GENERATOR;
23-
2414
@Entity
2515
@Getter
2616
@Setter
@@ -32,13 +22,18 @@ public class InfoStripe implements Serializable {
3222

3323
@Id
3424
@GeneratedValue(generator = "infoStripeIdGenerator")
35-
@GenericGenerator(name = "infoStripeIdGenerator", strategy = SEQUENCE_STYLE_GENERATOR, parameters = {
36-
@Parameter(name = "sequence_name", value = "info_stripe_seq"),
37-
@Parameter(name = "initial_value", value = "1"),
38-
@Parameter(name = "increment_size", value = "1")
39-
})
25+
@GenericGenerator(
26+
name = "infoStripeIdGenerator",
27+
type = org.hibernate.id.enhanced.SequenceStyleGenerator.class,
28+
parameters = {
29+
@Parameter(name = "sequence_name", value = "info_stripe_seq"),
30+
@Parameter(name = "initial_value", value = "1"),
31+
@Parameter(name = "increment_size", value = "1")
32+
}
33+
)
4034
private Long id;
4135

36+
@Builder.Default
4237
@Column(nullable = false)
4338
private InfoStripeType type = InfoStripeType.INFO;
4439

apps/dolly-backend/src/main/java/no/nav/dolly/service/TransaksjonMappingService.java

-11
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,6 @@ public List<RsTransaksjonMapping> getTransaksjonMapping(String system, String id
3535
.toList();
3636
}
3737

38-
@Transactional(readOnly = true)
39-
public List<RsTransaksjonMapping> getTransaksjonMapping(String ident) {
40-
41-
return transaksjonMappingRepository.findAllByBestillingIdAndIdent(null, ident).stream()
42-
.map(this::toDTO)
43-
.toList();
44-
}
45-
4638
public boolean existAlready(SystemTyper system, String ident, String miljoe, Long bestillingId) {
4739

4840
return transaksjonMappingRepository.findAllBySystemAndIdent(system.name(), ident)
@@ -52,19 +44,16 @@ public boolean existAlready(SystemTyper system, String ident, String miljoe, Lon
5244
}
5345

5446
public void saveAll(Collection<TransaksjonMapping> entries) {
55-
5647
entries.forEach(this::save);
5748
}
5849

5950
@Transactional
6051
public void save(TransaksjonMapping entry) {
61-
6252
transaksjonMappingRepository.save(entry);
6353
}
6454

6555
@Transactional
6656
public void slettTransaksjonMappingByTestident(String ident) {
67-
6857
transaksjonMappingRepository.deleteAllByIdent(ident);
6958
}
7059

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package no.nav.dolly.bestilling.inntektsmelding;
2+
3+
import no.nav.dolly.bestilling.inntektsmelding.domain.InntektsmeldingResponse;
4+
import no.nav.dolly.domain.jpa.BestillingProgress;
5+
import no.nav.dolly.domain.resultset.RsDollyUtvidetBestilling;
6+
import no.nav.dolly.domain.resultset.dolly.DollyPerson;
7+
import no.nav.dolly.domain.resultset.inntektsmeldingstub.RsInntektsmelding;
8+
import no.nav.dolly.service.TransaksjonMappingService;
9+
import org.junit.jupiter.api.Test;
10+
import org.springframework.beans.factory.annotation.Autowired;
11+
import org.springframework.boot.test.context.SpringBootTest;
12+
import org.springframework.boot.test.mock.mockito.MockBean;
13+
import org.springframework.test.context.ActiveProfiles;
14+
import reactor.core.publisher.Flux;
15+
import reactor.test.StepVerifier;
16+
17+
import java.util.List;
18+
import java.util.Set;
19+
20+
import static org.mockito.ArgumentMatchers.any;
21+
import static org.mockito.Mockito.*;
22+
23+
@SpringBootTest
24+
@ActiveProfiles("test")
25+
class InntektsmeldingClientTest {
26+
27+
@Autowired
28+
private InntektsmeldingClient inntektsmeldingClient;
29+
30+
@MockBean
31+
private InntektsmeldingConsumer inntektsmeldingConsumer;
32+
33+
@MockBean
34+
private TransaksjonMappingService transaksjonMappingService;
35+
36+
@Test
37+
void shouldCallTransaksjonMappingServiceTwiceForEachEnvironment() {
38+
39+
doCallRealMethod()
40+
.when(transaksjonMappingService).saveAll(any());
41+
42+
var dokument = InntektsmeldingResponse.Dokument
43+
.builder()
44+
.dokumentInfoId("dokumentInfoId")
45+
.journalpostId("journalpostId")
46+
.build();
47+
var inntektsmeldingResponse = InntektsmeldingResponse
48+
.builder()
49+
.dokumenter(List.of(dokument))
50+
.build();
51+
when(inntektsmeldingConsumer.postInntektsmelding(any()))
52+
.thenReturn(Flux.just(inntektsmeldingResponse));
53+
54+
var inntekter = RsInntektsmelding.Inntektsmelding
55+
.builder()
56+
.build();
57+
var inntektsmelding = RsInntektsmelding
58+
.builder()
59+
.inntekter(List.of(inntekter))
60+
.build();
61+
var bestilling = new RsDollyUtvidetBestilling();
62+
bestilling.setInntektsmelding(inntektsmelding);
63+
bestilling.setEnvironments(Set.of("q1", "q2"));
64+
65+
var person = DollyPerson
66+
.builder()
67+
.ident("12345678901")
68+
.build();
69+
var progress = BestillingProgress.builder().build();
70+
71+
StepVerifier
72+
.create(inntektsmeldingClient.gjenopprett(bestilling, person, progress, true))
73+
.expectNextCount(1)
74+
.expectComplete()
75+
.verify();
76+
77+
verify(transaksjonMappingService, times(1))
78+
.save(argThat(transaksjonMapping -> transaksjonMapping.getMiljoe().equals("q1")));
79+
verify(transaksjonMappingService, times(1))
80+
.save(argThat(transaksjonMapping -> transaksjonMapping.getMiljoe().equals("q2")));
81+
82+
83+
}
84+
85+
}

apps/dolly-backend/src/test/java/no/nav/dolly/provider/api/AbstractControllerTest.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
@SpringBootTest(webEnvironment = RANDOM_PORT)
3333
@ActiveProfiles("test")
34-
@Testcontainers
34+
@Testcontainers(disabledWithoutDocker = true)
3535
@EnableAutoConfiguration
3636
@ComponentScan("no.nav.dolly")
3737
@AutoConfigureMockMvc(addFilters = false)
@@ -47,9 +47,11 @@ public abstract class AbstractControllerTest {
4747
private Flyway flyway;
4848

4949
@MockBean
50+
@SuppressWarnings("unused")
5051
private BestillingElasticRepository bestillingElasticRepository;
5152

5253
@MockBean
54+
@SuppressWarnings("unused")
5355
private ElasticsearchOperations elasticsearchOperations;
5456

5557
@BeforeEach
@@ -69,6 +71,7 @@ Bruker createBruker() {
6971
.builder()
7072
.brukerId(UUID.randomUUID().toString())
7173
.brukertype(AZURE)
74+
.brukernavn("brukernavn")
7275
.build()
7376
);
7477
}

0 commit comments

Comments
 (0)