Skip to content

Commit

Permalink
Rydde litt etter review
Browse files Browse the repository at this point in the history
  • Loading branch information
dijjal committed Nov 13, 2023
1 parent a56acd3 commit 14ad2d0
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 60 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,12 @@ public List<SaksbehandlerGruppe> hentAvdelingensSaksbehandlereOgGrupper(String a
return organisasjonRepository.hentSaksbehandlerGrupper(avdelingEnhet);
}

public void leggSaksbehandlerTilGruppe(String saksbehandlerId, int gruppeId, String avdelingEnhet) {
public void leggSaksbehandlerTilGruppe(String saksbehandlerId, long gruppeId, String avdelingEnhet) {
organisasjonRepository.leggSaksbehandlerTilGruppe(saksbehandlerId, gruppeId, avdelingEnhet);
}

public void fjernSaksbehandlerFraGruppe(String saksbehandlerId, int gruppeId) {
organisasjonRepository.fjernSaksbehandlerFraGruppe(saksbehandlerId, gruppeId);
public void fjernSaksbehandlerFraGruppe(String saksbehandlerId, long gruppeId, String avdelingEnhet) {
organisasjonRepository.fjernSaksbehandlerFraGruppe(saksbehandlerId, gruppeId, avdelingEnhet);
}

public SaksbehandlerGruppe opprettSaksbehandlerGruppe(String avdelingEnhet) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import no.nav.foreldrepenger.los.felles.BaseEntitet;
import no.nav.vedtak.exception.FunksjonellException;
import no.nav.vedtak.felles.jpa.TomtResultatException;


@ApplicationScoped
Expand Down Expand Up @@ -68,28 +68,21 @@ public List<SaksbehandlerGruppe> hentSaksbehandlerGrupper(String avdelingEnhet)
.getResultList();
}

public void leggSaksbehandlerTilGruppe(String saksbehandlerId, int gruppeId, String avdelingEnhet) {
public void leggSaksbehandlerTilGruppe(String saksbehandlerId, long gruppeId, String avdelingEnhet) {
var gruppe = entityManager.find(SaksbehandlerGruppe.class, gruppeId);
if (gruppe == null || !gruppe.getAvdeling().getAvdelingEnhet().equals(avdelingEnhet)) {
throw new FunksjonellException("FP-164687", String.format("Fant ikke gruppe %s for avdeling %s", gruppeId, avdelingEnhet),
"Kontroller logisk sammenheng mellom gruppe og enhet");
}
sjekkGruppeEnhetTilknytning(gruppeId, avdelingEnhet, gruppe);
var saksbehandler = hentSaksbehandlerHvisEksisterer(saksbehandlerId).filter(sb -> sb.getAvdelinger().contains(gruppe.getAvdeling()));
saksbehandler.ifPresentOrElse(sb -> {
gruppe.getSaksbehandlere().add(sb);
entityManager.persist(gruppe);
}, () -> {
throw new FunksjonellException("FP-164687",
String.format("Fant ikke saksbehandler %s tilknyttet avdeling %s", saksbehandlerId, avdelingEnhet),
"Kontroller logisk sammenheng mellom saksbehandler, gruppe og enhet");
throw fantIkkeSaksbehandlerException(saksbehandlerId, avdelingEnhet);
});
}

public void fjernSaksbehandlerFraGruppe(String saksbehandlerIdent, int gruppeId) {
public void fjernSaksbehandlerFraGruppe(String saksbehandlerIdent, long gruppeId, String avdelingEnhet) {
var gruppe = entityManager.find(SaksbehandlerGruppe.class, gruppeId);
if (gruppe == null) {
throw new IllegalArgumentException("Fant ikke gruppe");
}
sjekkGruppeEnhetTilknytning(gruppeId, avdelingEnhet, gruppe);
gruppe.getSaksbehandlere().removeIf(s -> s.getSaksbehandlerIdent().equals(saksbehandlerIdent));
entityManager.persist(gruppe);
}
Expand All @@ -103,14 +96,28 @@ public void updateSaksbehandlerGruppeNavn(long gruppeId, String gruppeNavn) {

public void slettSaksbehandlerGruppe(long gruppeId, String avdelingEnhet) {
var gruppe = entityManager.find(SaksbehandlerGruppe.class, gruppeId);
if (gruppe == null || !gruppe.getAvdeling().getAvdelingEnhet().equals(avdelingEnhet)) {
throw new FunksjonellException("FP-164687", String.format("Fant ikke gruppe %s for avdeling %s", gruppeId, avdelingEnhet),
"Kontroller logisk sammenheng mellom gruppe og enhet");
}
sjekkGruppeEnhetTilknytning(gruppeId, avdelingEnhet, gruppe);
gruppe.getSaksbehandlere().clear();
entityManager.persist(gruppe);
entityManager.createQuery("DELETE FROM saksbehandlerGruppe g WHERE g.id = :gruppeId")
.setParameter("gruppeId", gruppeId)
.executeUpdate();
}

private static void sjekkGruppeEnhetTilknytning(long gruppeId, String avdelingEnhet, SaksbehandlerGruppe gruppe) {
if (gruppe == null || !gruppe.getAvdeling().getAvdelingEnhet().equals(avdelingEnhet)) {
throw fantIkkeGruppeException(gruppeId, avdelingEnhet);
}
}

private static TomtResultatException fantIkkeGruppeException(long gruppeId, String avdelingEnhet) {
return new TomtResultatException("FP-164688", String.format("Fant ikke gruppe %s for avdeling %s", gruppeId, avdelingEnhet));
}

private static TomtResultatException fantIkkeSaksbehandlerException(String saksbehandlerIdent, String avdelingEnhet) {
return new TomtResultatException("FP-164689",
String.format("Fant ikke saksbehandler %s tilknyttet avdeling %s", saksbehandlerIdent, avdelingEnhet));
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@

public record SaksbehandlerOgGruppeDto(@NotNull @Valid SaksbehandlerBrukerIdentDto brukerIdent,
@NotNull @Valid AvdelingEnhetDto avdelingEnhet,
@Min(1) @Max(Integer.MAX_VALUE) int gruppeId) implements AbacDto {
@Min(1) @Max(Integer.MAX_VALUE) long gruppeId) implements AbacDto {

@Override
public AbacDataAttributter abacAttributter() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,34 @@ public List<SaksbehandlerMedAvdelingerDto> hentAvdelingensSaksbehandlere(@NotNul
.toList();
}

@POST
@Path("/søk")
@Operation(description = "Søk etter saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.READ, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public SaksbehandlerMedAvdelingerDto søkAvdelingensSaksbehandlere(@NotNull @Parameter(description = "Brukeridentifikasjon") @Valid SaksbehandlerBrukerIdentDto brukerIdent) {
return saksbehandlerDtoTjeneste.lagSaksbehandlerMedAvdelingerDto(brukerIdent.getVerdi()).orElse(null);
}

@POST
@Operation(description = "Legg til ny saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void leggTilNySaksbehandler(@NotNull @Parameter(description = "Brukeridentifikasjon og avdelingsid") @Valid SaksbehandlerOgAvdelingDto saksbehandlerOgAvdeling) {
avdelingslederSaksbehandlerTjeneste.leggSaksbehandlerTilAvdeling(saksbehandlerOgAvdeling.getBrukerIdent().getVerdi(),
saksbehandlerOgAvdeling.getAvdelingEnhet().getAvdelingEnhet());
}

@POST
@Path("/slett")
@Operation(description = "Fjern saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void slettSaksbehandler(@NotNull @Parameter(description = "Brukeridentifikasjon og avdelingsid") @Valid SaksbehandlerOgAvdelingDto saksbehandlerOgAvdeling) {
avdelingslederSaksbehandlerTjeneste.fjernSaksbehandlerFraAvdeling(saksbehandlerOgAvdeling.getBrukerIdent().getVerdi(),
saksbehandlerOgAvdeling.getAvdelingEnhet().getAvdelingEnhet());
}

@GET
@Path("/grupper")
@Operation(description = "Avdelingsliste saksbehandlere og grupper")
@Operation(description = "Avdelingsliste saksbehandlere og grupper", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.READ, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET, sporingslogg = false)
public SaksbehandlereOgSaksbehandlerGrupper hentSaksbehandlerGrupper(@NotNull @QueryParam("avdelingEnhet") @Valid AvdelingEnhetDto avdelingEnhetDto) {
var avdelingensSaksbehandlere = avdelingslederSaksbehandlerTjeneste.hentAvdelingensSaksbehandlere(avdelingEnhetDto.getAvdelingEnhet())
Expand All @@ -76,69 +101,42 @@ public SaksbehandlereOgSaksbehandlerGrupper hentSaksbehandlerGrupper(@NotNull @Q

@POST
@Path("/grupper/opprett-gruppe")
@Operation(description = "Oppretter gruppe")
@Operation(description = "Oppretter gruppe", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public SaksbehandlerGruppeDto opprettSaksbehandlerGruppe(@Valid AvdelingEnhetDto dto) {
var sbg = avdelingslederSaksbehandlerTjeneste.opprettSaksbehandlerGruppe(dto.getAvdelingEnhet());
var sb = sbg.getSaksbehandlere().stream()
.map(saksbehandlerDtoTjeneste::lagKjentOgUkjentSaksbehandlerMedAvdelingerDto).toList();
return new SaksbehandlerGruppeDto(sbg.getId(), sbg.getGruppeNavn(), sb);
return new SaksbehandlerGruppeDto(sbg.getId(), sbg.getGruppeNavn(), List.of());
}

@POST
@Path("/grupper/endre-gruppe")
@Operation(description = "Gir nytt navn til gruppe")
@Operation(description = "Gir nytt navn til gruppe", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.UPDATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void endreSaksbehandlerGruppe(@Valid SaksbehandlerGruppeNavneEndringDto dto) {
avdelingslederSaksbehandlerTjeneste.endreSaksbehandlerGruppeNavn(dto.gruppeId(), dto.gruppeNavn());
}

@POST
@Path("/grupper/legg-til-saksbehandler")
@Operation(description = " legger saksbehandler til gruppe")
@Operation(description = "Legger saksbehandler til gruppe", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void leggSaksbehandlerTilGruppe(@Valid SaksbehandlerOgGruppeDto dto) {
avdelingslederSaksbehandlerTjeneste.leggSaksbehandlerTilGruppe(dto.brukerIdent().getVerdi(), dto.gruppeId(), dto.avdelingEnhet().getAvdelingEnhet());
}

@POST
@Path("/grupper/fjern-saksbehandler")
@Operation(description = " fjerner saksbehandler fra gruppe")
@Operation(description = "Fjerner saksbehandler fra gruppe", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void fjernSaksbehandlerFraGruppe(@Valid SaksbehandlerOgGruppeDto dto) {
avdelingslederSaksbehandlerTjeneste.fjernSaksbehandlerFraGruppe(dto.brukerIdent().getVerdi(), dto.gruppeId());
avdelingslederSaksbehandlerTjeneste.fjernSaksbehandlerFraGruppe(dto.brukerIdent().getVerdi(), dto.gruppeId(), dto.avdelingEnhet().getAvdelingEnhet());
}

@POST
@Path("/grupper/slett-saksbehandlergruppe")
@Operation(description = "sletter saksbehandlergruppe")
@Operation(description = "Sletter saksbehandlergruppe", tags = "AvdelingslederSaksbehandlergrupper")
@BeskyttetRessurs(actionType = ActionType.DELETE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void slettSaksbehandlerGruppe(@Valid SaksbehandlerGruppeSletteRequestDto dto) {
avdelingslederSaksbehandlerTjeneste.slettSaksbehandlerGruppe(dto.gruppeId(), dto.avdelingEnhet().getAvdelingEnhet());
}

@POST
@Path("/søk")
@Operation(description = "Søk etter saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.READ, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public SaksbehandlerMedAvdelingerDto søkAvdelingensSaksbehandlere(@NotNull @Parameter(description = "Brukeridentifikasjon") @Valid SaksbehandlerBrukerIdentDto brukerIdent) {
return saksbehandlerDtoTjeneste.lagSaksbehandlerMedAvdelingerDto(brukerIdent.getVerdi()).orElse(null);
}

@POST
@Operation(description = "Legg til ny saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void leggTilNySaksbehandler(@NotNull @Parameter(description = "Brukeridentifikasjon og avdelingsid") @Valid SaksbehandlerOgAvdelingDto saksbehandlerOgAvdeling) {
avdelingslederSaksbehandlerTjeneste.leggSaksbehandlerTilAvdeling(saksbehandlerOgAvdeling.getBrukerIdent().getVerdi(),
saksbehandlerOgAvdeling.getAvdelingEnhet().getAvdelingEnhet());
}

@POST
@Path("/slett")
@Operation(description = "Fjern saksbehandler", tags = "AvdelingslederSaksbehandlere")
@BeskyttetRessurs(actionType = ActionType.CREATE, resourceType = ResourceType.OPPGAVESTYRING_AVDELINGENHET)
public void slettSaksbehandler(@NotNull @Parameter(description = "Brukeridentifikasjon og avdelingsid") @Valid SaksbehandlerOgAvdelingDto saksbehandlerOgAvdeling) {
avdelingslederSaksbehandlerTjeneste.fjernSaksbehandlerFraAvdeling(saksbehandlerOgAvdeling.getBrukerIdent().getVerdi(),
saksbehandlerOgAvdeling.getAvdelingEnhet().getAvdelingEnhet());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,21 @@

import no.nav.foreldrepenger.los.web.app.tjenester.felles.dto.SaksbehandlerMedAvdelingerDto;

import no.nav.vedtak.exception.FunksjonellException;

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

import java.util.Objects;

import static java.util.Collections.singletonList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatNoException;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.when;

Expand Down Expand Up @@ -64,7 +71,7 @@ void kan_slette_gruppe() {
var gruppe = restTjeneste.opprettSaksbehandlerGruppe(avdelingDto);
restTjeneste.slettSaksbehandlerGruppe(new SaksbehandlerGruppeSletteRequestDto((int) gruppe.gruppeId(), avdelingDto));
var etterSletting = restTjeneste.hentSaksbehandlerGrupper(avdelingDto);
assertThat(etterSletting.saksbehandlerGrupper()).hasSize(0);
assertThat(etterSletting.saksbehandlerGrupper()).isEmpty();
}

@Test
Expand Down Expand Up @@ -93,7 +100,7 @@ void kan_fjerne_saksbehandlere_fra_gruppe() {

restTjeneste.fjernSaksbehandlerFraGruppe(new SaksbehandlerOgGruppeDto(brukerIdentDto, avdelingDto, (int) gruppe.gruppeId()));
var etterSletting = restTjeneste.hentSaksbehandlerGrupper(avdelingDto);
assertThat(etterSletting.saksbehandlerGrupper().get(0).saksbehandlere()).hasSize(0);
assertThat(etterSletting.saksbehandlerGrupper().get(0).saksbehandlere()).isEmpty();
}

@Test
Expand All @@ -107,11 +114,50 @@ void kan_gi_grupper_nytt_navn() {
assertThat(oppdatertGruppe.gruppeNavn()).isEqualTo("Nytt navn");
}

@Test
void skal_gi_feilmelding_når_gruppe_ikke_finnes() {
var dto = new SaksbehandlerGruppeSletteRequestDto(1, avdelingDto);
assertThatThrownBy(() -> restTjeneste.slettSaksbehandlerGruppe(dto)).isInstanceOf(FunksjonellException.class)
.extracting(Throwable::getMessage)
.matches(s -> s.contains("Fant ikke gruppe " + dto.gruppeId() + " for avdeling " + avdelingDto.getAvdelingEnhet()));
}

@Test
void skal_håndtere_at_saksbehandler_ikke_er_tilknyttet_gruppe() {
var gruppe = restTjeneste.opprettSaksbehandlerGruppe(avdelingDto);
var dto = new SaksbehandlerOgGruppeDto(brukerIdentDto, avdelingDto, gruppe.gruppeId());
assertThatNoException().isThrownBy(() -> restTjeneste.fjernSaksbehandlerFraGruppe(dto));
}

@Test
void skal_kunne_fjerne_saksbehandler_fra_individuelle_grupper() {
setupMockForMappingAvSaksbehandlerDto();
var førsteGruppe = restTjeneste.opprettSaksbehandlerGruppe(avdelingDto);
restTjeneste.leggTilNySaksbehandler(new SaksbehandlerOgAvdelingDto(brukerIdentDto, avdelingDto));
restTjeneste.leggSaksbehandlerTilGruppe(new SaksbehandlerOgGruppeDto(brukerIdentDto, avdelingDto, (int) førsteGruppe.gruppeId()));
var andreGruppe = restTjeneste.opprettSaksbehandlerGruppe(avdelingDto);
var saksbehandlerOgGruppeDto = new SaksbehandlerOgGruppeDto(brukerIdentDto, avdelingDto, (int) andreGruppe.gruppeId());
restTjeneste.leggSaksbehandlerTilGruppe(saksbehandlerOgGruppeDto);
restTjeneste.fjernSaksbehandlerFraGruppe(saksbehandlerOgGruppeDto);

var hentetGrupper = restTjeneste.hentSaksbehandlerGrupper(avdelingDto);
var hentetGrupperListe = hentetGrupper.saksbehandlerGrupper();
assertThat(hentetGrupperListe).hasSize(2);
for (var res : hentetGrupperListe) {
if (Objects.equals(res.gruppeId(), førsteGruppe.gruppeId())) {
assertThat(res.saksbehandlere()).hasSize(1);
} else if (Objects.equals(res.gruppeId(), andreGruppe.gruppeId())) {
assertThat(res.saksbehandlere()).isEmpty();
}
else {
fail("Ukjent gruppe");
}
}
}

private void setupMockForMappingAvSaksbehandlerDto() {
when(saksbehandlerDtoTjeneste.lagKjentOgUkjentSaksbehandlerMedAvdelingerDto(argThat(sb -> sb.getSaksbehandlerIdent().equals("Z999999"))))
.thenReturn(new SaksbehandlerMedAvdelingerDto(saksbehandlerDto, singletonList(avdelingDto.getAvdelingEnhet())));
}



}

0 comments on commit 14ad2d0

Please sign in to comment.