Skip to content

Commit

Permalink
TFP-5481: Mulighet for å reservere og avreservere en oppgave. (#1288)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrsladek authored May 22, 2023
1 parent d1c2015 commit 337a312
Show file tree
Hide file tree
Showing 8 changed files with 172 additions and 13 deletions.
5 changes: 5 additions & 0 deletions integrasjon/oppgave-rest-klient/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,5 +16,10 @@
<groupId>no.nav.foreldrepenger.felles.integrasjon</groupId>
<artifactId>felles-integrasjon-rest-klient</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package no.nav.vedtak.felles.integrasjon.oppgave.v1;

import java.net.URI;
import java.net.http.HttpRequest;
import java.util.List;
import java.util.Objects;

Expand Down Expand Up @@ -75,20 +76,26 @@ private List<Oppgave> hentOppgaverFor(String aktørId, List<String> oppgaveTyper
public void ferdigstillOppgave(String oppgaveId) {
var oppgave = hentOppgave(oppgaveId);
var patch = new PatchOppgave(oppgave.id(), oppgave.versjon(), Oppgavestatus.FERDIGSTILT);
var method = new RestRequest.Method(RestRequest.WebMethod.PATCH, RestRequest.jsonPublisher(patch));
var request = RestRequest.newRequest(method, getEndpointForOppgaveId(oppgaveId), restConfig)
.otherCallId(NavHeaders.HEADER_NAV_CORRELATION_ID);
restKlient.sendExpectConflict(addCorrelation(request), String.class);
endreOppgave(oppgaveId, RestRequest.jsonPublisher(patch));
}

@Override
public void feilregistrerOppgave(String oppgaveId) {
var oppgave = hentOppgave(oppgaveId);
var patch = new PatchOppgave(oppgave.id(), oppgave.versjon(), Oppgavestatus.FEILREGISTRERT);
var method = new RestRequest.Method(RestRequest.WebMethod.PATCH, RestRequest.jsonPublisher(patch));
var request = RestRequest.newRequest(method, getEndpointForOppgaveId(oppgaveId), restConfig)
.otherCallId(NavHeaders.HEADER_NAV_CORRELATION_ID);
restKlient.sendExpectConflict(addCorrelation(request), String.class);
endreOppgave(oppgaveId, RestRequest.jsonPublisher(patch));
}

@Override
public void reserverOppgave(String oppgaveId, String saksbehandlerId) {
var oppgave = hentOppgave(oppgaveId);
var patch = new OppdaterReservasjon(oppgave.id(), oppgave.versjon(), saksbehandlerId);
endreOppgave(oppgaveId, RestRequest.jsonPublisher(patch));
}

@Override
public void avreserverOppgave(String oppgaveId) {
reserverOppgave(oppgaveId, null);
}

@Override
Expand All @@ -97,6 +104,13 @@ public Oppgave hentOppgave(String oppgaveId) {
return restKlient.send(addCorrelation(request), Oppgave.class);
}

private void endreOppgave(String oppgaveId, HttpRequest.BodyPublisher jsonBody) {
var method = new RestRequest.Method(RestRequest.WebMethod.PATCH, jsonBody);
var request = RestRequest.newRequest(method, getEndpointForOppgaveId(oppgaveId), restConfig)
.otherCallId(NavHeaders.HEADER_NAV_CORRELATION_ID);
restKlient.sendExpectConflict(addCorrelation(request), String.class);
}

private URI getEndpointForOppgaveId(String oppgaveId) {
return UriBuilder.fromUri(restConfig.endpoint()).path(oppgaveId).build();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package no.nav.vedtak.felles.integrasjon.oppgave.v1;

import com.fasterxml.jackson.annotation.JsonInclude;

@JsonInclude()
public record OppdaterReservasjon(Long id, Integer versjon, String tilordnetRessurs) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,22 @@
import java.time.LocalDate;

@JsonIgnoreProperties(ignoreUnknown = true)
public record Oppgave(Long id, String journalpostId, String behandlesAvApplikasjon, String saksreferanse, String aktoerId, String tema,
String behandlingstema, String oppgavetype, String behandlingstype, Integer versjon, String tildeltEnhetsnr,
LocalDate fristFerdigstillelse, LocalDate aktivDato, Prioritet prioritet, Oppgavestatus status, String beskrivelse) {
public record Oppgave(Long id,
String journalpostId,
String behandlesAvApplikasjon,
String saksreferanse,
String aktoerId,
String tema,
String behandlingstema,
String oppgavetype,
String behandlingstype,
Integer versjon,
String tildeltEnhetsnr,
LocalDate fristFerdigstillelse,
LocalDate aktivDato,
Prioritet prioritet,
Oppgavestatus status,
String beskrivelse,
String tilordnetRessurs) {

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ public interface Oppgaver {
// Øvrige argumenter kan være null, men hvis det ventes mange oppgaver så sett aktør, enhet eller limit
List<Oppgave> finnÅpneOppgaver(List<String> oppgaveTyper, String aktørId, String enhetsNr, String limit);

void reserverOppgave(String oppgaveId, String saksbehandlerId);

void avreserverOppgave(String oppgaveId);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package no.nav.vedtak.felles.integrasjon.oppgave.v1;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.when;

import java.util.Set;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

import no.nav.vedtak.felles.integrasjon.rest.RestClient;
import no.nav.vedtak.felles.integrasjon.rest.RestClientConfig;
import no.nav.vedtak.felles.integrasjon.rest.RestRequest;
import no.nav.vedtak.felles.integrasjon.rest.TokenFlow;
import no.nav.vedtak.mapper.json.DefaultJsonMapper;

@ExtendWith(MockitoExtension.class)
class AbstractOppgaveKlientTest {
private Oppgaver oppgaver;

@Mock
private RestClient restKlient;

@BeforeEach
void setUp() {
// Service setup
oppgaver = new TestOppgave(restKlient);
}

private static final String json = """
{
"id": 357736794,
"tildeltEnhetsnr":"1234",
"opprettetAvEnhetsnr":"1234",
"saksreferanse":"152200771",
"aktoerId":"1000000000000",
"beskrivelse":"Må behandle sak i VL!",
"temagruppe":"FMLI",
"tema":"FOR",
"behandlingstema":"ab0326",
"oppgavetype":"BEH_SAK",
"versjon":1,
"opprettetAv":"srvengangsstonad",
"prioritet":"NORM",
"status": "OPPRETTET",
"metadata":{},
"fristFerdigstillelse":"2023-01-23",
"aktivDato":"2023-01-22",
"opprettetTidspunkt":"2023-01-22T18:52:45.206+01:00"
}
""";

@SuppressWarnings("resource")
@Test
void skal_returnere_dokumentoversikt_fagsak() {
var captor = ArgumentCaptor.forClass(RestRequest.class);

when(restKlient.send(any(RestRequest.class), eq(Oppgave.class))).thenReturn(DefaultJsonMapper.fromJson(json, Oppgave.class));
when(restKlient.sendExpectConflict(captor.capture(), eq(String.class))).thenReturn("test");

oppgaver.reserverOppgave("1", "testSbh");

var rq = captor.getValue();
rq.validateDelayedHeaders(Set.of("Authorization"));
}

@RestClientConfig(tokenConfig = TokenFlow.AZUREAD_CC, endpointProperty = "OPPGAVE_GRUNNLAG_URL", endpointDefault = "http://oppgave.tbd/", scopesProperty = "OPPGAVE_GRUNNLAG_SCOPES", scopesDefault = "api://prod-fss.tbd.oppgave/.default")
private static class TestOppgave extends AbstractOppgaveKlient {
public TestOppgave(RestClient restKlient) {
super(restKlient);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package no.nav.vedtak.felles.integrasjon.oppgave.v1;

import no.nav.vedtak.mapper.json.DefaultJsonMapper;

import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

class OppdaterReservasjonTest {

@Test
void reservasjonSerdes() {
var testBruker = "testBruker";
var objekt = new OppdaterReservasjon(1L, 1, testBruker);

var ser = DefaultJsonMapper.toJson(objekt);

assertThat(ser).contains(String.format("{\"id\":1,\"versjon\":1,\"tilordnetRessurs\":\"%s\"}",testBruker));

var des = DefaultJsonMapper.fromJson(ser, OppdaterReservasjon.class);

assertThat(des.tilordnetRessurs()).isEqualTo(testBruker);
}

@Test
void avreservasjonSerdes() {
var patchObjekt = new OppdaterReservasjon(1L, 1, null);

var ser = DefaultJsonMapper.toJson(patchObjekt);

assertThat(ser).contains("{\"id\":1,\"versjon\":1,\"tilordnetRessurs\":null}");

var des = DefaultJsonMapper.fromJson(ser, OppdaterReservasjon.class);

assertThat(des.tilordnetRessurs()).isNull();
}
}
4 changes: 2 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<parent>
<groupId>no.nav.foreldrepenger.felles</groupId>
<artifactId>fp-bom</artifactId>
<version>0.5.2</version>
<version>0.5.3</version>
</parent>

<artifactId>felles-root</artifactId>
Expand All @@ -31,7 +31,7 @@
<dependency>
<groupId>no.nav.foreldrepenger.felles</groupId>
<artifactId>fp-bom</artifactId>
<version>0.5.2</version>
<version>0.5.3</version>
<scope>import</scope>
<type>pom</type>
</dependency>
Expand Down

0 comments on commit 337a312

Please sign in to comment.