Skip to content

Commit

Permalink
OK-356 Korjattu viestin luonti olemassaolevaan lähetykseen
Browse files Browse the repository at this point in the history
  • Loading branch information
jkorri committed Jan 15, 2024
1 parent 7ba4ccc commit a656ce9
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper
import com.nimbusds.jose.util.StandardCharset
import fi.oph.viestinvalitys.util.{AwsUtil, DbUtil}
import fi.oph.viestinvalitys.business.{Kieli, Kontakti, Lahetys, Liite, LiitteenTila, Prioriteetti, SisallonTyyppi, VastaanottajanTila, Viesti}
import fi.oph.viestinvalitys.vastaanotto.model.Lahetys.Lahettaja
import fi.oph.viestinvalitys.vastaanotto.model.Viesti.Vastaanottaja
import fi.oph.viestinvalitys.vastaanotto.model.{LahettajaImpl, LahetysImpl, LahetysValidator, MaskiImpl, VastaanottajaImpl, ViestiImpl, ViestiValidator}
import fi.oph.viestinvalitys.vastaanotto.resource.{APIConstants, HealthcheckResource, LuoLahetysFailureResponseImpl, LuoLahetysSuccessResponseImpl, LuoLiiteFailureResponseImpl, LuoLiiteSuccessResponseImpl, LuoViestiFailureResponseImpl, LuoViestiSuccessResponseImpl, PalautaLahetysSuccessResponse, PalautaViestiSuccessResponse, VastaanottajatSuccessResponse}
Expand Down Expand Up @@ -33,7 +34,7 @@ import org.testcontainers.utility.DockerImageName
import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers
import org.springframework.test.web.servlet.request.{MockHttpServletRequestBuilder, MockMvcRequestBuilders}
import org.springframework.test.web.servlet.result.MockMvcResultMatchers
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.status
import org.springframework.test.web.servlet.result.MockMvcResultMatchers.{redirectedUrlPattern, status}

import java.util.{Optional, UUID}
import scala.concurrent.{Await, ExecutionContext, Future}
Expand Down Expand Up @@ -62,22 +63,28 @@ class IntegraatioTest extends BaseIntegraatioTesti {

def getViesti(vastaanottajat: java.util.List[Vastaanottaja] = java.util.List.of(VastaanottajaImpl(Optional.empty(), Optional.of("[email protected]"))),
liitteidenTunnisteet: Optional[java.util.List[String]] = Optional.empty(),
prioriteetti: String = Prioriteetti.NORMAALI.toString.toLowerCase): ViestiImpl =
prioriteetti: Optional[String] = Optional.of(Prioriteetti.NORMAALI.toString.toLowerCase),
lahetysTunniste: Optional[String] = Optional.empty,
lahettavaPalvelu: Optional[String] = Optional.of("hakemuspalvelu"),
lahettaja: Optional[Lahettaja] = Optional.of(LahettajaImpl(Optional.empty(), Optional.of("[email protected]"))),
lahettavanVirkailijanOid: Optional[String] = Optional.of(LahetysValidator.VALIDATION_OPH_OID_PREFIX + ".111"),
replyTo: Optional[String] = Optional.of("[email protected]"),
sailytysAika: Optional[Integer] = Optional.of(1)): ViestiImpl =
ViestiImpl(
otsikko = Optional.of("Otsikko"),
sisalto = Optional.of("Sisalto"),
sisallonTyyppi = Optional.of(SisallonTyyppi.TEXT.toString.toLowerCase),
kielet = Optional.of(java.util.List.of("fi")),
maskit = Optional.of(java.util.List.of(MaskiImpl(Optional.of("salaisuus"), Optional.of("maskattu")))),
lahettavanVirkailijanOid = Optional.of(LahetysValidator.VALIDATION_OPH_OID_PREFIX + ".111"),
lahettaja = Optional.of(LahettajaImpl(Optional.empty(), Optional.of("[email protected]"))),
replyTo = Optional.of("[email protected]"),
lahettavanVirkailijanOid = lahettavanVirkailijanOid,
lahettaja = lahettaja,
replyTo = replyTo,
vastaanottajat = Optional.of(vastaanottajat),
liitteidenTunnisteet = liitteidenTunnisteet,
lahettavaPalvelu = Optional.of("hakemuspalvelu"),
lahetysTunniste = Optional.empty(),
prioriteetti = Optional.of(prioriteetti),
sailytysaika = Optional.of(1),
lahettavaPalvelu = lahettavaPalvelu,
lahetysTunniste = lahetysTunniste,
prioriteetti = prioriteetti,
sailytysaika = sailytysAika,
kayttooikeusRajoitukset = Optional.of(java.util.List.of("RAJOITUS1_1.2.3")),
metadata = Optional.of(java.util.Map.of("avain", java.util.List.of("arvo1", "arvo2")))
)
Expand Down Expand Up @@ -446,13 +453,52 @@ class IntegraatioTest extends BaseIntegraatioTesti {
)
Assertions.assertEquals(entiteetti, kantaOperaatiot.getViestit(Seq(response.viestiTunniste)).find(v => true).get)

@WithMockUser(value = "kayttaja", authorities = Array(SecurityConstants.SECURITY_ROOLI_LAHETYS_FULL))
@Test def testLuoViestiExistingLahetys(): Unit =
val lahetys = getLahetys();
val lahetysResult = mvc.perform(jsonPost(APIConstants.LUO_LAHETYS_PATH, lahetys))
.andExpect(status().isOk).andReturn()
val lahetysResponse = objectMapper.readValue(lahetysResult.getResponse.getContentAsString, classOf[LuoLahetysSuccessResponseImpl])

// luodaan viesti joka osa olemassaolevaa lähetystä
val viesti = getViesti(
lahetysTunniste = Optional.of(lahetysResponse.lahetysTunniste.toString),
lahettavaPalvelu = Optional.empty,
lahettavanVirkailijanOid = Optional.empty,
lahettaja = Optional.empty,
replyTo = Optional.empty,
prioriteetti = Optional.empty,
sailytysAika = Optional.empty)
val viestiResult = mvc.perform(jsonPost(APIConstants.LUO_VIESTI_PATH, viesti))
.andExpect(status().isOk()).andReturn()
val response = objectMapper.readValue(viestiResult.getResponse.getContentAsString, classOf[LuoViestiSuccessResponseImpl])

// varmistetaan että kentät tallentuvat oikein kantaan
val entiteetti = Viesti(
response.viestiTunniste,
response.lahetysTunniste,
viesti.otsikko.get,
viesti.sisalto.get,
SisallonTyyppi.valueOf(viesti.sisallonTyyppi.get.toUpperCase),
viesti.kielet.get.asScala.map(k => Kieli.valueOf(k.toUpperCase)).toSet,
viesti.maskit.map(l => l.asScala.map(m => m.getSalaisuus.get -> m.getMaski.toScala).toMap).get,
lahetys.lahettavaPalvelu.get,
lahetys.lahettavanVirkailijanOid.toScala,
Kontakti(lahetys.lahettaja.get.getNimi.toScala, lahetys.lahettaja.get.getSahkopostiOsoite.get),
lahetys.replyTo.toScala,
"kayttaja",
Prioriteetti.valueOf(lahetys.prioriteetti.get.toUpperCase)
)
Assertions.assertEquals(entiteetti, kantaOperaatiot.getViestit(Seq(response.viestiTunniste)).find(v => true).get)


@WithMockUser(value = "kayttaja", authorities = Array(SecurityConstants.SECURITY_ROOLI_LAHETYS_FULL))
@Test def testLuoViestiRateLimiter(): Unit =
// tehdään korkean prioriteetin luontikutsuja niin että vastaanottajia syntyy yli aikaikkunassa sallittu määrä
val count = Range.inclusive(1, APIConstants.PRIORITEETTI_KORKEA_RATELIMIT_VIESTEJA_AIKAIKKUNASSA + 1).foreach(count =>
val request = mvc.perform(jsonPost(APIConstants.LUO_VIESTI_PATH, getViesti(
vastaanottajat = java.util.List.of(VastaanottajaImpl(Optional.empty(), Optional.of("[email protected]"))),
prioriteetti = Prioriteetti.KORKEA.toString.toLowerCase)
prioriteetti = Optional.of(Prioriteetti.KORKEA.toString.toLowerCase))
))

// sallitun määrän puitteissa vastaus on 200
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,6 @@ object ViestiValidator:
validateLahetysTunniste(viesti.getLahetysTunniste, lahetysMetadata, identiteetti),
validateMetadata(viesti.getMetadata),
validateKayttooikeusRajoitukset(viesti.getKayttooikeusRajoitukset),
LahetysValidator.validateLahettavaPalvelu(viesti.getLahettavaPalvelu),

// validoidaan kenttien väliset suhteet
validateKorkeaPrioriteetti(viesti.getPrioriteetti, viesti.getVastaanottajat, lahetysMetadata),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,14 +129,14 @@ class ViestiResource {
kielet = viesti.kielet.map(kielet => kielet.asScala.map(kieli => Kieli.valueOf(kieli.toUpperCase)).toSet).orElse(Set.empty),
maskit = viesti.maskit.map(maskit => maskit.asScala.map(maski => maski.getSalaisuus.get -> maski.getMaski.toScala).toMap).orElse(Map.empty),
lahettavanVirkailijanOID = viesti.lahettavanVirkailijanOid.toScala,
lahettaja = Kontakti(viesti.lahettaja.get.getNimi.toScala, viesti.lahettaja.get.getSahkopostiOsoite.get),
lahettaja = viesti.lahettaja.map(l => Kontakti(l.getNimi.toScala, l.getSahkopostiOsoite.get)).toScala,
replyTo = viesti.replyTo.toScala,
vastaanottajat = viesti.vastaanottajat.get.asScala.map(vastaanottaja => Kontakti(vastaanottaja.getNimi.toScala, vastaanottaja.getSahkopostiOsoite.get)).toSeq,
liiteTunnisteet = viesti.liitteidenTunnisteet.orElse(Collections.emptyList()).asScala.map(tunniste => UUID.fromString(tunniste)).toSeq,
lahettavaPalvelu = viesti.lahettavaPalvelu.toScala,
lahetysTunniste = ParametriUtil.asUUID(viesti.lahetysTunniste),
prioriteetti = viesti.prioriteetti.map(p => Prioriteetti.valueOf(p.toUpperCase)).toScala,
sailytysAika = viesti.sailytysaika.get,
sailytysAika = viesti.sailytysaika.map(s => s.asInstanceOf[Int]).toScala,
kayttooikeusRajoitukset = viesti.kayttooikeusRajoitukset.toScala.map(r => r.asScala.toSet).getOrElse(Set.empty),
metadata = viesti.metadata.toScala.map(m => m.asScala.map(entry => entry._1 -> entry._2.asScala.toSeq).toMap).getOrElse(Map.empty),
omistaja = securityOperaatiot.getIdentiteetti()
Expand All @@ -150,7 +150,7 @@ class ViestiResource {
.storageResolution(1)
.dimensions(Seq(Dimension.builder()
.name("Prioriteetti")
.value(viesti.prioriteetti.get.toUpperCase)
.value(viestiEntiteetti.prioriteetti.toString.toUpperCase)
.build()).asJava)
.timestamp(Instant.now())
.unit(StandardUnit.COUNT)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -181,14 +181,14 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
kielet: Set[Kieli],
maskit: Map[String, Option[String]],
lahettavanVirkailijanOID: Option[String],
lahettaja: Kontakti,
lahettaja: Option[Kontakti],
replyTo: Option[String],
vastaanottajat: Seq[Kontakti],
liiteTunnisteet: Seq[UUID],
lahettavaPalvelu: Option[String],
lahetysTunniste: Option[UUID],
prioriteetti: Option[Prioriteetti],
sailytysAika: Int,
sailytysAika: Option[Int],
kayttooikeusRajoitukset: Set[String],
metadata: Map[String, Seq[String]],
omistaja: String
Expand All @@ -203,8 +203,8 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
if(lahetysTunniste.isDefined) sql"""SELECT 1""".as[Int]
else
sqlu"""INSERT INTO lahetykset VALUES(${finalLahetysTunniste.toString}::uuid, ${otsikko}, ${lahettavaPalvelu},
${lahettavanVirkailijanOID}, ${lahettaja.nimi}, ${lahettaja.sahkoposti}, ${replyTo},
${finalPrioriteetti.toString}::prioriteetti, ${omistaja}, now(), ${Instant.now.plusSeconds(60*60*24*sailytysAika).toString}::timestamptz)"""
${lahettavanVirkailijanOID}, ${lahettaja.get.nimi}, ${lahettaja.get.sahkoposti}, ${replyTo},
${finalPrioriteetti.toString}::prioriteetti, ${omistaja}, now(), ${Instant.now.plusSeconds(60*60*24*sailytysAika.get).toString}::timestamptz)"""
}

// tallennetaan viesti
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,14 +126,14 @@ class KantaOperaatiotTest {
Set(Kieli.FI),
maskit,
Option.empty,
Kontakti(Option.apply("Lasse Lahettaja"), "[email protected]"),
Option.apply(Kontakti(Option.apply("Lasse Lahettaja"), "[email protected]")),
Option.empty,
Range(0, vastaanottajat).map(suffix => Kontakti(Option.apply("Vastaanottaja" + suffix), "vastaanottaja" + suffix + "@example.com")),
liitteet.map(liite => liite.tunniste),
Option.apply(lahettavaPalvelu),
Option.apply(lahetysTunniste),
Option.apply(prioriteetti),
sailytysAika,
Option.apply(sailytysAika),
kayttoOikeudet,
Map("avain" -> Seq("arvo")),
omistaja
Expand Down

0 comments on commit a656ce9

Please sign in to comment.