Skip to content

Commit

Permalink
test: utvidet med test klasser som validerer riktig oppsett og følgin… (
Browse files Browse the repository at this point in the history
  • Loading branch information
mrsladek authored Nov 20, 2024
1 parent 9e5f00d commit 94452ab
Show file tree
Hide file tree
Showing 20 changed files with 739 additions and 78 deletions.
12 changes: 5 additions & 7 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,6 @@
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-bom</artifactId>
<version>1.20.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down Expand Up @@ -130,6 +123,11 @@
<groupId>org.jboss.weld.servlet</groupId>
<artifactId>weld-servlet-core</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye</groupId>
<artifactId>jandex</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.weld.se</groupId>
<artifactId>weld-se-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import jakarta.enterprise.context.Dependent;
import jakarta.inject.Inject;
import jakarta.persistence.EntityManager;
import jakarta.persistence.Query;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -37,13 +36,13 @@ public class ForespørselRepository {

public UUID lagreForespørsel(LocalDate skjæringstidspunkt, Ytelsetype ytelsetype, String aktørId, String orgnummer, String fagsakSaksnummer,
LocalDate førsteUttaksdato) {
var forespørselEntitet = new ForespørselEntitet(orgnummer, skjæringstidspunkt, new AktørIdEntitet(aktørId), ytelsetype, fagsakSaksnummer, førsteUttaksdato);

final Query query = entityManager.createNativeQuery("SELECT nextval('SEQ_FORESPOERSEL')");
var tall = (Number) query.getSingleResult();

LOG.info("ForespørselRepository: lagrer forespørsel entitet: {} med id:{}", forespørselEntitet, tall);

var forespørselEntitet = new ForespørselEntitet(orgnummer,
skjæringstidspunkt,
new AktørIdEntitet(aktørId),
ytelsetype,
fagsakSaksnummer,
førsteUttaksdato);
LOG.info("ForespørselRepository: lagrer forespørsel entitet: {}", forespørselEntitet);
entityManager.persist(forespørselEntitet);
entityManager.flush();
return forespørselEntitet.getUuid();
Expand Down Expand Up @@ -92,7 +91,6 @@ public void oppdaterArbeidsgiverNotifikasjonSakId(UUID forespørselUUID, String
f.setStatus(ForespørselStatus.FERDIG);
entityManager.persist(f);
});

entityManager.flush();
}

Expand All @@ -105,7 +103,6 @@ public void oppdaterArbeidsgiverNotifikasjonSakId(UUID forespørselUUID, String
f.setStatus(ForespørselStatus.UTGÅTT);
entityManager.persist(f);
});

entityManager.flush();
}

Expand All @@ -126,7 +123,7 @@ public void oppdaterArbeidsgiverNotifikasjonSakId(UUID forespørselUUID, String
var query = entityManager.createQuery("FROM ForespørselEntitet where status in(:fpStatuser) "
+ "and aktørId = :brukerAktørId "
+ "and fagsystemSaksnummer = :fagsakNr "
+ "and organisasjonsnummer = :arbeidsgiverIdent "
+ "and organisasjonsnummer = :arbeidsgiverIdent "
+ "and skjæringstidspunkt = :skjæringstidspunkt "
+ "and førsteUttaksdato = :førsteUttaksdato "
+ "and ytelseType = :ytelsetype",
Expand All @@ -144,7 +141,8 @@ public void oppdaterArbeidsgiverNotifikasjonSakId(UUID forespørselUUID, String
return Optional.empty();
} else if (resultList.size() > 1) {
throw new IllegalStateException(
"Forventet å finne kun en forespørsel for gitt sak {}, orgnr {}, skjæringstidspunkt {} og første uttaksdato" + fagsakSaksnummer + organisasjonsnummer + stp + førsteUttaksdato);
"Forventet å finne kun en forespørsel for gitt sak {}, orgnr {}, skjæringstidspunkt {} og første uttaksdato" + fagsakSaksnummer
+ organisasjonsnummer + stp + førsteUttaksdato);
} else {
return Optional.of(resultList.getFirst());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package no.nav.familie.inntektsmelding.forespørsel.rest;

import java.time.LocalDate;
import java.util.Collections;
import java.util.List;
import java.util.UUID;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
Expand Down Expand Up @@ -57,7 +57,7 @@ public class ForespørselRest {
@POST
@Path("/opprett")
@Tilgangskontrollert
public Response opprettForespørsel(OpprettForespørselRequest request) {
public Response opprettForespørsel(@Valid @NotNull OpprettForespørselRequest request) {
LOG.info("Mottok forespørsel om inntektsmeldingoppgave på fagsakSaksnummer {}", request.fagsakSaksnummer());
sjekkErSystemkall();
var bleForespørselOpprettet = forespørselBehandlingTjeneste.håndterInnkommendeForespørsel(request.skjæringstidspunkt(),
Expand All @@ -76,7 +76,7 @@ public class ForespørselRest {
@POST
@Path("/oppdater")
@Tilgangskontrollert
public Response oppdaterForespørsler(OppdaterForespørslerRequest request) {
public Response oppdaterForespørsler(@Valid @NotNull OppdaterForespørslerRequest request) {
LOG.info("Mottok forespørsel om oppdatering av inntektsmeldingoppgaver på fagsakSaksnummer {}", request.fagsakSaksnummer());
sjekkErSystemkall();

Expand All @@ -93,7 +93,7 @@ public class ForespørselRest {
@POST
@Path("/lukk")
@Tilgangskontrollert
public Response lukkForespørsel(LukkForespørselRequest request) {
public Response lukkForespørsel(@Valid @NotNull LukkForespørselRequest request) {
LOG.info("Lukk forespørsel for fagsakSaksnummer {} med orgnummer {} og skjæringstidspunkt {}",
request.fagsakSaksnummer(),
request.orgnummer(),
Expand All @@ -108,7 +108,7 @@ public class ForespørselRest {
@POST
@Path("/sett-til-utgatt")
@Tilgangskontrollert
public Response settForespørselTilUtgått(LukkForespørselRequest request) {
public Response settForespørselTilUtgått(@Valid @NotNull LukkForespørselRequest request) {
LOG.info("Setter forespørsel for fagsakSaksnummer {} til utgått", request.fagsakSaksnummer());

sjekkErSystemkall();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@

public record LukkForespørselRequest(@Valid OrganisasjonsnummerDto orgnummer,
@NotNull @Valid SaksnummerDto fagsakSaksnummer,
LocalDate skjæringstidspunkt) {
@Valid LocalDate skjæringstidspunkt) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@

public record OpprettForespørselRequest(@NotNull @Valid AktørIdDto aktørId,
@NotNull @Valid OrganisasjonsnummerDto orgnummer,
@NotNull LocalDate skjæringstidspunkt,
@NotNull YtelseTypeDto ytelsetype,
@NotNull @Valid LocalDate skjæringstidspunkt,
@NotNull @Valid YtelseTypeDto ytelsetype,
@NotNull @Valid SaksnummerDto fagsakSaksnummer,
@Valid LocalDate førsteUttaksdato) {}
@Valid LocalDate førsteUttaksdato) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ public ProsessTaskDataDto createProsessTask(
@Tilgangskontrollert
public ProsessTaskRestartResultatDto restartProsessTask(
@Parameter(description = "Informasjon for restart en eksisterende prosesstask") @Valid @NotNull
@PathParam("taskStatus") FeiletTaskStatus feiletTaskStatus, @NotNull @PathParam("taskId") Long prosessTaskId) {
@PathParam("taskStatus") FeiletTaskStatus feiletTaskStatus, @Valid @NotNull @PathParam("taskId") Long prosessTaskId) {
sjekkAtKallerHarRollenDrift();
// kjøres manuelt for å avhjelpe feilsituasjon, da er det veldig greit at det blir logget!
LOG.info("Restarter prossess task {}", prosessTaskId);
Expand Down Expand Up @@ -178,7 +178,7 @@ public Response finnFeiletProsessTask(
public Response setFeiletProsessTaskFerdig(
@NotNull @Parameter(description = "Prosesstask-id for feilet prosesstask") @Valid
@PathParam("taskStatus") ProsessTaskRestTjeneste.AlleIkkeFerdigStatus naavarendeTaskStatus,
@NotNull @PathParam("taskId") Long prosessTaskId) {
@Valid @NotNull @PathParam("taskId") Long prosessTaskId) {
sjekkAtKallerHarRollenDrift();
prosessTaskApplikasjonTjeneste.setProsessTaskFerdig(prosessTaskId,
ProsessTaskStatus.valueOf(naavarendeTaskStatus.name()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public InntektsmeldingDialogRest(InntektsmeldingTjeneste inntektsmeldingTjeneste
@Tilgangskontrollert
public Response hentOpplysninger(
@Parameter(description = "Henter alle opplysninger vi har om søker, inntekt og arbeidsforholdet basert på en forespørsel UUID") @NotNull
@QueryParam("foresporselUuid") UUID forespørselUuid) {
@Valid @NotNull @QueryParam("foresporselUuid") UUID forespørselUuid) {
tilgang.sjekkAtArbeidsgiverHarTilgangTilBedrift(forespørselUuid);

LOG.info("Henter forespørsel med uuid {}", forespørselUuid);
Expand All @@ -73,7 +73,7 @@ public Response hentOpplysninger(
@Operation(description = "Henter alle inntektsmeldinger som er sendt inn for en forespørsel", tags = "imdialog")
@Tilgangskontrollert
public Response hentInntektsmeldingerForOppgave(
@Parameter(description = "Henter alle inntektsmeldinger som er sendt inn for en forespørsel") @NotNull @QueryParam("foresporselUuid")
@Parameter(description = "Henter alle inntektsmeldinger som er sendt inn for en forespørsel") @NotNull @Valid @QueryParam("foresporselUuid")
UUID forespørselUuid) {
tilgang.sjekkAtArbeidsgiverHarTilgangTilBedrift(forespørselUuid);

Expand Down Expand Up @@ -101,7 +101,8 @@ public Response sendInntektsmelding(@Parameter(description = "Datapakke med info
@Produces("application/pdf")
@Operation(description = "Lager PDF av inntektsmelding", tags = "imdialog")
@Tilgangskontrollert
public Response lastNedPDF(@Parameter(description = "ID for inntektsmelding å lage PDF av") @NotNull @QueryParam("id") long inntektsmeldingId) {
public Response lastNedPDF(
@Parameter(description = "ID for inntektsmelding å lage PDF av") @Valid @NotNull @QueryParam("id") long inntektsmeldingId) {
tilgang.sjekkAtArbeidsgiverHarTilgangTilBedrift(inntektsmeldingId);

LOG.info("Henter inntektsmelding for id {}", inntektsmeldingId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package no.nav.familie.inntektsmelding.server.jackson;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.function.Predicate;

import org.jboss.jandex.AnnotationTarget.Kind;
import org.jboss.jandex.ClassInfo;
import org.jboss.jandex.DotName;
import org.jboss.jandex.Index;
import org.jboss.jandex.IndexReader;
import org.jboss.jandex.Indexer;
import org.slf4j.Logger;

/**
* Henter persistert index (hvis generert) eller genererer index for angitt location (typisk matcher en jar/war fil).
*/
public class IndexClasses {
private static final Logger log = org.slf4j.LoggerFactory.getLogger(IndexClasses.class);

private static final ConcurrentMap<URI, IndexClasses> INDEXES = new ConcurrentHashMap<>();

private final URI scanLocation;
private final String jandexIndexFileName;

private IndexClasses(URI location) {
this(location, "jandex.idx");
}

private IndexClasses(URI scanLocation, String jandexIndexFileName) {
this.scanLocation = scanLocation;
this.jandexIndexFileName = jandexIndexFileName;
}

public static IndexClasses getIndexFor(final URI location) {
return INDEXES.computeIfAbsent(location, IndexClasses::new);
}

public Index getIndex() {

if ("file".equals(scanLocation.getScheme()) && scanLocation.getSchemeSpecificPart().contains("/target/")) {
// må regenerere index fra fil system i IDE ved å scanne dir, ellers kan den mulig være utdatert (når kjører Jetty i IDE f.eks)
return scanIndexFromFilesystem(scanLocation);
} else {
return getPersistedJandexIndex(scanLocation);
}

}

private Index scanIndexFromFilesystem(URI location) {
try {
var indexer = new Indexer();
var source = Paths.get(location);
try (var paths = Files.walk(source)) {
paths.filter(Files::isRegularFile).forEach(f -> {
var fileName = f.getFileName();
if (fileName != null && fileName.toString().endsWith(".class")) {
try (var newInputStream = Files.newInputStream(f, StandardOpenOption.READ)) {
indexer.index(newInputStream);
} catch (IOException e) {
throw new IllegalStateException("Fikk ikke indeksert klasse " + f + ", kan ikke scanne klasser", e);
}
}
});
}
return indexer.complete();
} catch (IOException e) {
throw new IllegalStateException("Fikk ikke lest path " + location + ", kan ikke scanne klasser", e);
}
}

// fra pre-generert index, slipper runtime scanning for raskere startup
private Index getPersistedJandexIndex(URI location) {
var jandexIdxUrl = getJandexIndexUrl(location);

try (var jandexStream = jandexIdxUrl.openStream()) {
var reader = new IndexReader(jandexStream);
return reader.read();
} catch (IOException e) {
throw new IllegalStateException("Fikk ikke lest jandex index, kan ikke scanne klasser", e);
}
}

private URL getJandexIndexUrl(URI location) {
var uriString = location.toString();
var classLoaders = new LinkedHashSet<ClassLoader>();
classLoaders.add(getClass().getClassLoader());
classLoaders.add(Thread.currentThread().getContextClassLoader());

return classLoaders.stream().flatMap(cl -> {
try {
return Collections.list(cl.getResources("META-INF/" + jandexIndexFileName)).stream();
} catch (IOException e2) {
throw new IllegalArgumentException("Kan ikke lese jandex index fil", e2);
}
}).filter(url -> {
try {
return String.valueOf(url.toURI()).startsWith(uriString) || String.valueOf(url.toURI().getSchemeSpecificPart()).startsWith(uriString);
} catch (URISyntaxException e1) {
throw new IllegalArgumentException("Kan ikke scanne URI", e1);
}
}).findFirst().orElseThrow(() -> new IllegalStateException("Fant ikke jandex index for location=" + location));
}

public List<Class<?>> getClassesWithAnnotation(Class<?> annotationClass) {

var search = DotName.createSimple(annotationClass.getName());
var annotations = getIndex().getAnnotations(search);

List<Class<?>> jsonTypes = new ArrayList<>();
for (var annotation : annotations) {
if (Kind.CLASS.equals(annotation.target().kind())) {
var className = annotation.target().asClass().name().toString();
try {
jsonTypes.add(Class.forName(className));
} catch (ClassNotFoundException e) {
log.error("Kan ikke finne klasse i Classpath, som funnet i Jandex index", e);// NOSONAR
}
}
}

return jsonTypes;
}

public List<Class<?>> getClasses(Predicate<ClassInfo> predicate, Predicate<Class<?>> classPredicate) {
var knownClasses = getIndex().getKnownClasses();

List<Class<?>> cls = new ArrayList<>();
for (var ci : knownClasses) {
var className = ci.name().toString();
try {
if (predicate.test(ci)) {
var c = Class.forName(className);
if (classPredicate.test(c)) {
cls.add(c);
}
}
} catch (ClassNotFoundException e) {
log.error("Kan ikke finne klasse i Classpath, som funnet i Jandex index", e);// NOSONAR
}
}
return cls;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

COMMENT ON COLUMN forespoersel.FORSTE_UTTAKSDATO IS 'Dat med første frævarsdag.';
COMMENT ON COLUMN forespoersel.STATUS IS 'Status på forespørselen.';

ALTER TABLE forespoersel RENAME CONSTRAINT "forespoersel_pkey" TO "pk_foresporsel_id";
ALTER TABLE refusjon_endring RENAME CONSTRAINT "refusjon_endring_pkey" TO "pk_refusjon_endring_id";
ALTER TABLE bortfalt_naturalytelse RENAME CONSTRAINT "bortfalt_naturalytelse_pkey" TO "pk_bortfalt_naturalytelse_id";
ALTER TABLE endringsaarsak RENAME CONSTRAINT "endringsaarsak_pkey" TO "pk_endringsaarsak_id";
ALTER TABLE kontaktperson RENAME CONSTRAINT "kontaktperson_pkey" TO "pk_kontaktperson_id";
ALTER TABLE inntektsmelding RENAME CONSTRAINT "inntektsmelding_pkey" TO "pk_inntektsmelding_id";

DROP INDEX idx_bortfalt_naturalytelse_primary_key;
DROP INDEX idx_endringsaarsak_primary_key;
DROP INDEX idx_forespoersel_primary_key;
DROP INDEX idx_inntektsmelding_primary_key;
DROP INDEX idx_refusjon_endring_primary_key;
DROP INDEX idx_kontaktperson_primary_key;

CREATE INDEX idx_kontaktperson_inntektsmelding_id ON kontaktperson(inntektsmelding_id);
CREATE INDEX idx_bortfalt_naturalytelse_inntektsmelding_id ON bortfalt_naturalytelse(inntektsmelding_id);
CREATE INDEX idx_endringsaarsak_inntektsmelding_id ON endringsaarsak(inntektsmelding_id);
CREATE INDEX idx_refusjon_endring_inntektsmelding_id ON refusjon_endring(inntektsmelding_id);

ALTER INDEX idx_forespoersel_uuid RENAME TO "uidx_forespoersel_uuid";

Loading

0 comments on commit 94452ab

Please sign in to comment.