Skip to content

Commit

Permalink
OK-365 lähetysten hakuun käyttöoikeusrajaukset, testejä täydennetty
Browse files Browse the repository at this point in the history
  • Loading branch information
marjakari committed Jan 29, 2024
1 parent bb08556 commit 23d9eb5
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -101,25 +101,28 @@ class KantaOperaatiot(db: JdbcBackend.JdbcDatabaseDef) {
FROM lahetykset
JOIN lahetykset_kayttooikeudet ON lahetykset_kayttooikeudet.lahetys_tunniste=lahetykset.tunniste
JOIN kayttooikeudet ON lahetykset_kayttooikeudet.kayttooikeus_tunniste=kayttooikeudet.tunniste
WHERE lahetykset.tunniste=${tunniste.toString}::uuid AND kayttooikeus IN (${kayttooikeudet.map(oikeus => "'" + oikeus + "'").mkString(",")})
WHERE lahetykset.tunniste=${tunniste.toString}::uuid AND kayttooikeus IN (#${kayttooikeudet.map(oikeus => "'" + oikeus + "'").mkString(",")})
""".as[(String, String, String, String, String, String, String, String, String, String)].headOption), DB_TIMEOUT)
.map((tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyto, prioriteetti, luotu) =>
Lahetys(UUID.fromString(tunniste), otsikko, omistaja, lahettavapalvelu, Option.apply(lahettavanVirkailijanOid),
Kontakti(Option.apply(lahettajanNimi), lahettajanSahkoposti), Option.apply(replyto), Prioriteetti.valueOf(prioriteetti), Instant.parse(luotu)))

/**
* Palauttaa listan lähetyksiä hakuehdoilla
* Palauttaa listan lähetyksiä hakuehdoilla rajattuna käyttöoikeuksien mukaan
*
* @param alkaen aikaleima, jonka jälkeen luodut haetaan (sivutus)
* @param enintaan palautettavan lähetysjoukon maksimikoko (sivutus)
*
* @return hakuehtoja (TODO) vastaavat lähetykset
*/
def getLahetykset(alkaen: Option[Instant], enintaan: Option[Int]): Seq[Lahetys] =
def getLahetykset(alkaen: Option[Instant], enintaan: Option[Int], kayttooikeudet: Set[String]): Seq[Lahetys] =
val lahetyksetQuery = sql"""
SELECT tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyto, prioriteetti, to_json(luotu::timestamptz)#>>'{}'
SELECT lahetykset.tunniste, otsikko, omistaja, lahettavapalvelu, lahettavanVirkailijanOid, lahettajanNimi, lahettajanSahkoposti, replyto, prioriteetti, to_json(luotu::timestamptz)#>>'{}'
FROM lahetykset
JOIN lahetykset_kayttooikeudet ON lahetykset_kayttooikeudet.lahetys_tunniste=lahetykset.tunniste
JOIN kayttooikeudet ON lahetykset_kayttooikeudet.kayttooikeus_tunniste=kayttooikeudet.tunniste
WHERE luotu<${alkaen.getOrElse(Instant.now()).toString}::timestamptz
AND kayttooikeus IN (#${kayttooikeudet.map(oikeus => "'" + oikeus + "'").mkString(",")})
ORDER BY luotu DESC
LIMIT ${enintaan.getOrElse(256)}
""".as[(String, String, String, String, String, String, String, String, String, String)]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -292,11 +292,11 @@ class KantaOperaatiotTest {
@Test def testGetViestinKayttooikeudet(): Unit =
// tallennetaan viestit oikeuksilla (jolloin luodaan lähetys johon oikeudet tallennetaan)
val (viesti1, vastaanottajat1) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))
val (viesti2, vastaanottajat2) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2"))
val (viesti2, vastaanottajat2) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2","ROLE_JARJESTELMA_OIKEUS3"))

// luetut käyttöoikeudet vastaavat tallennettuja
Assertions.assertEquals(
Seq(viesti1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), viesti2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2")).toMap,
Seq(viesti1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), viesti2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2", "ROLE_JARJESTELMA_OIKEUS3")).toMap,
kantaOperaatiot.getViestinKayttooikeudet(Seq(viesti1.tunniste, viesti2.tunniste)))

/**
Expand All @@ -305,11 +305,11 @@ class KantaOperaatiotTest {
@Test def testGetViestinLahetyksenKayttooikeudet(): Unit =
// tallennetaan viestit oikeuksilla (jolloin luodaan lähetys johon oikeudet tallennetaan)
val (viesti1, vastaanottajat1) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))
val (viesti2, vastaanottajat2) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2"))
val (viesti2, vastaanottajat2) = tallennaViesti(1, lahetysTunniste = null, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2","ROLE_JARJESTELMA_OIKEUS3"))

// luetut käyttöoikeudet vastaavat tallennettuja
Assertions.assertEquals(
Seq(viesti1.lahetys_tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), viesti2.lahetys_tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2")).toMap,
Seq(viesti1.lahetys_tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), viesti2.lahetys_tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2","ROLE_JARJESTELMA_OIKEUS3")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(viesti1.lahetys_tunniste, viesti2.lahetys_tunniste)))

/**
Expand All @@ -321,19 +321,19 @@ class KantaOperaatiotTest {

// tallennetaan viestit oikeuksilla (jolloin luodaan lähetys johon oikeudet tallennetaan)
tallennaViesti(1, lahetysTunniste = lahetys1.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))
tallennaViesti(1, lahetysTunniste = lahetys2.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2"))
tallennaViesti(1, lahetysTunniste = lahetys2.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2"))

// luetut käyttöoikeudet vastaavat tallennettuja
Assertions.assertEquals(
Seq(lahetys1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), lahetys2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2")).toMap,
Seq(lahetys1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1"), lahetys2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys1.tunniste, lahetys2.tunniste)))

// lisätään uusi viesti uudella oikeudella
tallennaViesti(1, lahetysTunniste = lahetys2.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS3"))

// jolloin uusi oikeus tulee lähetykselle
Assertions.assertEquals(
Seq(lahetys2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2", "ROLE_JARJESTELMA_OIKEUS3")).toMap,
Seq(lahetys2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2", "ROLE_JARJESTELMA_OIKEUS3")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys2.tunniste)))

/**
Expand All @@ -342,17 +342,51 @@ class KantaOperaatiotTest {
@Test def testGetLahetysKayttooikeusrajauksilla(): Unit =
val lahetys1 = this.tallennaLahetys()

// tallennetaan viestit oikeuksilla (jolloin luodaan lähetys johon oikeudet tallennetaan)
// tallennetaan viestit oikeuksilla (jolloin lähetyksen oikeudet tallennetaan)
tallennaViesti(1, lahetysTunniste = lahetys1.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))

Assertions.assertEquals(
Seq(lahetys1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys1.tunniste)))
// tulee tyhjää vaikka ei pitäisi
Assertions.assertEquals(kantaOperaatiot.getLahetysKayttooikeusrajauksilla(
lahetys1.tunniste, Set("ROLE_JARJESTELMA_OIKEUS1")), Option.empty)
// Assertions.assertEquals(kantaOperaatiot.getLahetysKayttooikeusrajauksilla(
// lahetys1.tunniste, Set("ROLE_JARJESTELMA_OIKEUS1")).get.tunniste,lahetys1.tunniste)
lahetys1.tunniste, Set("ROLE_JARJESTELMA_OIKEUS1")).get.tunniste,lahetys1.tunniste)
Assertions.assertEquals(kantaOperaatiot.getLahetysKayttooikeusrajauksilla(
lahetys1.tunniste, Set("ROLE_JARJESTELMA_OIKEUS2")), Option.empty)
Assertions.assertEquals(kantaOperaatiot.getLahetysKayttooikeusrajauksilla(
lahetys1.tunniste, Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2")).get.tunniste, lahetys1.tunniste)

/**
* Testataan lähetyksien haku käyttöliittymälle
*/
@Test def testGetLahetykset(): Unit =
val lahetys1 = this.tallennaLahetys()
val lahetys2 = this.tallennaLahetys()
val lahetys3 = this.tallennaLahetys()
val lahetys4 = this.tallennaLahetys()

// tallennetaan viestit oikeuksilla (jolloin lähetyksen oikeudet tallennetaan)
tallennaViesti(1, lahetysTunniste = lahetys1.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))
tallennaViesti(1, lahetysTunniste = lahetys2.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS2"))
tallennaViesti(1, lahetysTunniste = lahetys3.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2"))
tallennaViesti(1, lahetysTunniste = lahetys4.tunniste, kayttoOikeudet = Set("ROLE_JARJESTELMA_OIKEUS1"))

Assertions.assertEquals(
Seq(lahetys1.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys1.tunniste)))

Assertions.assertEquals(
Seq(lahetys2.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS2")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys2.tunniste)))

val oikat = kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys3.tunniste))
Assertions.assertEquals(
Seq(lahetys3.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1","ROLE_JARJESTELMA_OIKEUS2")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys3.tunniste)))
Assertions.assertEquals(
Seq(lahetys4.tunniste -> Set("ROLE_JARJESTELMA_OIKEUS1")).toMap,
kantaOperaatiot.getLahetystenKayttooikeudet(Seq(lahetys4.tunniste)))
// limit
Assertions.assertEquals(3, kantaOperaatiot.getLahetykset(Option.empty,Option.empty, Set("ROLE_JARJESTELMA_OIKEUS1")).size)

/**
* Testataan että viestiin voi liittää erikseen luodun lähetykset
Expand Down

0 comments on commit 23d9eb5

Please sign in to comment.