diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/VirkailijaRestClient.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/VirkailijaRestClient.scala index 54e59fe4a..09a644b09 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/VirkailijaRestClient.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/VirkailijaRestClient.scala @@ -163,25 +163,24 @@ class VirkailijaRestClient( case (Some(un), Some(pw), true) if koskiMassaluovutusResult => for ( result <- { - //logger.info(s"Sending basic authed koskiMassaluovutusResult query! $url") cookies += new DefaultCookie("CSRF", Config.csrf) val requestWithCookies = addCookies(requestWithPostHeaders, cookies).toRequest val realm = new Realm.Builder(un, pw) .setUsePreemptiveAuth(false) - .setScheme(Realm.AuthScheme.NTLM) + .setScheme( + Realm.AuthScheme.NTLM + ) //Tämä tarvitaan, jotta basic authilla toimivat Koski -> s3 ohjautuvat pyynnöt toimivat val basicAuthHeader = "Basic " + Base64.getEncoder.encodeToString((un + ":" + pw).getBytes) val requestWithRealm = requestWithCookies.toBuilder .setRealm(realm) .setHeader("Authorization", basicAuthHeader) .build() - //logger.info(s"Request before sending: ${requestWithRealm.getRealm}, ${requestWithRealm.getHeaders}, $requestWithRealm") internalClient(requestWithRealm, handler) } ) yield result case (Some(un), Some(pw), true) => - //logger.info(s"Sending basic authed query! $url") for ( result <- { cookies += new DefaultCookie("CSRF", Config.csrf) diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/IKoskiService.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/IKoskiService.scala index 542e9bfc1..c6aaf43e5 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/IKoskiService.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/IKoskiService.scala @@ -20,20 +20,20 @@ trait IKoskiService { def syncHaunHakijat( hakuOid: String, - params: KoskiSuoritusHakuParams, + params: KoskiSuoritusTallennusParams, personOidsForHakuFn: String => Future[Set[String]] ): Future[Unit] - def syncHaunHakijat(hakuOid: String, params: KoskiSuoritusHakuParams): Future[Unit] + def syncHaunHakijat(hakuOid: String, params: KoskiSuoritusTallennusParams): Future[Unit] def updateHenkilot( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] def updateHenkilotWithAliases( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] def fetchKoulusivistyskielet(oppijaOids: Seq[String]): Future[Map[String, Seq[String]]] @@ -49,13 +49,13 @@ trait IKoskiService { def updateHenkilotNew( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] def updateHenkilotNewMuuttunutJalkeen( muuttunutJalkeen: String, - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] } class KoskiServiceMock extends IKoskiService { @@ -68,11 +68,11 @@ class KoskiServiceMock extends IKoskiService { override def updateAktiivisetToisenAsteenJatkuvatHaut(): () => Unit = () => () override def updateHenkilot( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] = Future.successful(Seq[String](), Seq[String]()) override def updateHenkilotWithAliases( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] = Future.successful(Seq[String](), Seq[String]()) override def fetchOppivelvollisuusTietos( @@ -89,19 +89,22 @@ class KoskiServiceMock extends IKoskiService { ): Future[Map[String, Seq[String]]] = Future.successful(Map[String, Seq[String]]()) override def syncHaunHakijat( hakuOid: String, - params: KoskiSuoritusHakuParams, + params: KoskiSuoritusTallennusParams, personOidsForHakuFn: String => Future[Set[String]] ): Future[Unit] = ??? - override def syncHaunHakijat(hakuOid: String, params: KoskiSuoritusHakuParams): Future[Unit] = ??? + override def syncHaunHakijat( + hakuOid: String, + params: KoskiSuoritusTallennusParams + ): Future[Unit] = ??? override def updateHenkilotNew( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] = ??? + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] = ??? override def updateHenkilotNewMuuttunutJalkeen( muuttunutJalkeen: String, - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] = ??? + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] = ??? } diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandler.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandler.scala index 5a368dd9e..b5acc24b6 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandler.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandler.scala @@ -577,7 +577,7 @@ class KoskiDataHandler( henkiloOid: String, viimeisimmatSuoritukset: Seq[SuoritusArvosanat], personOidsWithAliases: PersonOidsWithAliases, - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[Seq[Either[Exception, Option[SuoritusArvosanat]]]] = fetchExistingSuoritukset(henkiloOid, personOidsWithAliases).flatMap(fetchedSuoritukset => { //OY-227 : Check and delete if there is suoritus which is not included on new suoritukset. @@ -852,7 +852,7 @@ class KoskiDataHandler( def processHenkilonTiedotKoskesta( koskihenkilöcontainer: KoskiHenkiloContainer, personOidsWithAliases: PersonOidsWithAliases, - params: KoskiSuoritusHakuParams, + params: KoskiSuoritusTallennusParams, henkilo: Option[Henkilo] = None ): Future[Seq[Either[Exception, Option[SuoritusArvosanat]]]] = { val henkiloOid = koskihenkilöcontainer.henkilö.oid.get diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiService.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiService.scala index dbe719944..5d95b321d 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiService.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiService.scala @@ -4,7 +4,6 @@ import java.util.concurrent.{ConcurrentHashMap, TimeUnit} import java.util.concurrent.atomic.AtomicReference import java.util.TimeZone import akka.actor.{ActorSystem, Scheduler} -import akka.event.Logging import fi.vm.sade.hakurekisteri.Config import fi.vm.sade.hakurekisteri.integration.{ExecutorUtil, VirkailijaRestClient} import fi.vm.sade.hakurekisteri.integration.hakemus.IHakemusService @@ -15,16 +14,11 @@ import fi.vm.sade.hakurekisteri.integration.henkilo.{ } import org.joda.time.{DateTime, DateTimeZone} import com.github.blemale.scaffeine.{Cache, Scaffeine} -import org.asynchttpclient.{DefaultAsyncHttpClientConfig, Realm} -import org.json4s.{DefaultFormats, Formats} -import org.json4s.jackson.JsonMethods.parse import org.slf4j.{Logger, LoggerFactory} import java.sql.Date import java.text.SimpleDateFormat -import scala.annotation.tailrec import scala.concurrent.ExecutionContextExecutorService -//import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.{Await, Future} import scala.concurrent.duration.{FiniteDuration, _} import scala.util.{Failure, Success} @@ -50,10 +44,26 @@ case class KoskiMassaluovutusQueryResponse( ) { def isFinished() = status.equals("complete") || isFailed() def isFailed() = status.equals("failed") +} +case class KoskiProcessingResults( + succeededHenkiloOids: Set[String], + failedHenkiloOids: Set[String] +) { + def getFailedStr() = { + if (failedHenkiloOids.isEmpty) "" + else + s"Epäonnistuneet (${Math.min(failedHenkiloOids.size, 50)} ensimmäistä:) ${failedHenkiloOids + .take(50)}" + } } -case class KoskiMassaluovutusResultLite(oppijaOid: String, opiskeluoikeus: KoskiOpiskeluoikeus) +case class KoskiMassaluovutusFileResult( + oppijaOid: String, + kaikkiOidit: Seq[String], + aikaleima: String, + opiskeluoikeudet: Seq[KoskiOpiskeluoikeus] +) class KoskiService( virkailijaRestClient: VirkailijaRestClient, @@ -77,7 +87,8 @@ class KoskiService( val logger: Logger = LoggerFactory.getLogger(getClass) private var startTimestamp: Long = 0L - private var oneJobAtATime = Future.successful((Seq[String](), Seq[String]())) + private var oneJobAtATime = + Future.successful(KoskiProcessingResults(Set[String](), Set[String]())) val aktiiviset2AsteYhteisHakuOidit = new AtomicReference[Set[String]](Set.empty) def setAktiiviset2AsteYhteisHaut(hakuOids: Set[String]): Unit = { @@ -106,16 +117,11 @@ class KoskiService( private val fetchPersonAliases : Seq[KoskiHenkiloContainer] => Future[(Seq[KoskiHenkiloContainer], PersonOidsWithAliases)] = { hs: Seq[KoskiHenkiloContainer] => + logger.info(s"Haetaan aliaksia henkilöille...") val personOids: Seq[String] = hs.flatMap(_.henkilö.oid) oppijaNumeroRekisteri.enrichWithAliases(personOids.toSet).map((hs, _)) } - case class SearchParamsWithCursor( - timestamp: Option[String], - cursor: Option[String], - pageSize: Int = 5000 - ) - override def fetchOppivelvollisuusTietos( oppijaOids: Seq[String] ): Future[Seq[OppivelvollisuusTieto]] = { @@ -147,9 +153,7 @@ class KoskiService( scheduler.scheduleOnce(timeToWaitUntilNextBatch)({ logger.info(s"refreshChangedOppijasFromKoski activating!") //vvvv-kk-ppThh:mm:ss - val muuttunutJalkeenStr = lastQueryStart.getOrElse( - "2024-12-17T10:55:33" - ) //edellisen kyselyn aloitushetki, tai aloitetaan vain jostain jos ei olemassa + val muuttunutJalkeenStr = KoskiUtil.koskiFetchStartTime val thisQueryStart = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss" ) //tästä tulee seuraavan iteraation aloitushetki @@ -157,13 +161,14 @@ class KoskiService( logger.info( s"refreshChangedOppijasFromKoski : nyt $thisQueryStart, haetaan muuttuneet jälkeen: $muuttunutJalkeenStr" ) - val koskiParams = KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + val koskiParams = KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) val resultF = handleKoskiRefreshMuuttunutJalkeen(muuttunutJalkeenStr, koskiParams) resultF.onComplete { - case Success(all) => + case Success(processingResults) => logger.info( - s"refreshChangedOppijasFromKoski : saatiin käsiteltyä muutokset alkaen $muuttunutJalkeenStr. Onnistuneita ${all._2.size}, epäonnistuneita ${all._1.size}, epäonnistuneet: ${all._1}" + s"refreshChangedOppijasFromKoski : saatiin käsiteltyä muutokset alkaen $muuttunutJalkeenStr. Onnistuneita ${processingResults.succeededHenkiloOids.size}, epäonnistuneita ${processingResults.failedHenkiloOids.size}. ${processingResults + .getFailedStr()}" ) refreshChangedOppijasFromKoski(Some(thisQueryStart), 5.minutes) case Failure(f) => @@ -194,7 +199,7 @@ class KoskiService( Await.result( syncHaunHakijat( haku, - KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.hours ) @@ -219,7 +224,7 @@ class KoskiService( Await.result( syncHaunHakijat( haku, - KoskiSuoritusHakuParams( + KoskiSuoritusTallennusParams( saveLukio = true, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -243,7 +248,7 @@ class KoskiService( Await.result( syncHaunHakijat( hakuOid, - KoskiSuoritusHakuParams( + KoskiSuoritusTallennusParams( saveLukio = true, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -258,10 +263,10 @@ class KoskiService( override def syncHaunHakijat( hakuOid: String, - params: KoskiSuoritusHakuParams, + params: KoskiSuoritusTallennusParams, personOidsForHakuFn: String => Future[Set[String]] ) = { - def handleUpdate(personOidsSet: Set[String]): Future[(Seq[String], Seq[String])] = { + def handleUpdate(personOidsSet: Set[String]): Future[KoskiProcessingResults] = { val personOidsWithAliases: PersonOidsWithAliases = Await.result( oppijaNumeroRekisteri.enrichWithAliases(personOidsSet), Duration(1, TimeUnit.MINUTES) @@ -295,93 +300,13 @@ class KoskiService( } } - override def syncHaunHakijat(hakuOid: String, params: KoskiSuoritusHakuParams) = { + override def syncHaunHakijat(hakuOid: String, params: KoskiSuoritusTallennusParams) = { syncHaunHakijat(hakuOid, params, hakuOid => hakemusService.personOidsForHaku(hakuOid, None)) } - def handleHenkiloUpdate( - personOids: Seq[String], - params: KoskiSuoritusHakuParams, - description: String = "" - ): Future[Unit] = { - if (personOids.isEmpty) { - logger.info(s"HandleHenkiloUpdate ($description) no personOids to process.") - Future.successful({}) - } else { - logger.info(s"HandleHenkiloUpdate ($description) {} oppijanumeros", personOids.size) - val maxOppijatBatchSize: Int = config.integrations.koskiMaxOppijatBatchSize - val groupedOids: Seq[Seq[String]] = personOids.grouped(maxOppijatBatchSize).toSeq - val totalGroups: Int = groupedOids.length - var updateHenkiloResults = (Seq[String](), Seq[String]()) - logger.info( - s"HandleHenkiloUpdate ($description) yhteensä $totalGroups kappaletta $maxOppijatBatchSize kokoisia ryhmiä." - ) - - def handleBatch( - batches: Seq[(Seq[String], Int)], - acc: (Seq[String], Seq[String]) - ): Future[(Seq[String], Seq[String])] = { - def updateHenkilotWithRetries( - oppijaOids: Set[String], - params: KoskiSuoritusHakuParams, - era: Int, - retriesLeft: Int - ): Future[(Seq[String], Seq[String])] = { - updateHenkilot(oppijaOids, params).recoverWith({ case e: Exception => - if (retriesLeft > 0) { - logger.error( - s"HandleHenkiloUpdate ($description) Virhe päivitettäessä henkilöiden tietoja erässä $era / $totalGroups, yritetään uudelleen. Uudelleenyrityksiä jäljellä: $retriesLeft", - e - ) - Future { Thread.sleep(params.retryWaitMillis) }.flatMap(_ => - updateHenkilotWithRetries(oppijaOids, params, era, retriesLeft - 1) - ) - } else { - logger.error( - s"HandleHenkiloUpdate ($description) Virhe päivitettäessä henkilöiden tietoja erässä $era / $totalGroups, ei enää uudelleenyrityksiä jäljellä.", - e - ) - throw e - } - }) - } - - if (batches.isEmpty) { - Future(acc) - } else { - val (subSeq, index) = batches.head - logger.info( - s"HandleHenkiloUpdate ($description) Päivitetään Koskesta $maxOppijatBatchSize henkilön tiedot Sureen. Erä ${index + 1} / $totalGroups." - ) - updateHenkilotWithRetries(subSeq.toSet, params, index + 1, retriesLeft = 3).flatMap(s => { - logger.info( - s"HandleHenkiloUpdate ($description) Erä ${index + 1} / $totalGroups käsitelty virheittä." - ) - handleBatch(batches.tail, (s._1 ++ acc._1, s._2 ++ acc._2)) - }) - } - } - - val f: Future[(Seq[String], Seq[String])] = - handleBatch(groupedOids.zipWithIndex, updateHenkiloResults) - f.flatMap(results => { - logger.info( - s"HandleHenkiloUpdate ($description) Koskipäivitys valmistui! Päivitettiin yhteensä ${results._1.size + results._2.size} henkilöä. " + - s"Onnistuneita päivityksiä ${results._2.size}. " + - s"Epäonnistuneita päivityksiä ${results._1.size}. " + - s"Epäonnistuneet: ${results._1}." - ) - Future.successful({}) - }).recoverWith { case e: Exception => - logger.error(s"HandleHenkiloUpdate ($description) Koskipäivitys epäonnistui", e) - Future.failed(e) - } - } - } - override def updateHenkilotWithAliases( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] = { logger.info(s"Haetaan oppijanumerorekisteristä aliakset oppijanumeroille: $oppijaOids") val personOidsWithAliases: PersonOidsWithAliases = Await.result( @@ -412,168 +337,189 @@ class KoskiService( } } - def newHandlerFunction(data: Seq[KoskiHenkiloContainer], params: KoskiSuoritusHakuParams) = { - logger.info(s"New handler, handling ${data.size} containers") - fetchPersonAliases(data) - .flatMap(res => { - val (henkilot, personOidsWithAliases) = res - logger.info(s"Saatiin Koskesta ${henkilot.size} henkilöä, aliakset haettu!") - saveKoskiHenkilotAsSuorituksetAndArvosanat(henkilot, personOidsWithAliases, params) - }) + def saveKoskiDataWithRetries( + data: Seq[KoskiHenkiloContainer], + params: KoskiSuoritusTallennusParams, + description: String = "", + retries: Int + ) = { + def saveSuoritusBatchWithRetries(retriesLeft: Int): Future[KoskiProcessingResults] = { + try { + logger.info(s"$description, käsitellään koski-data ${data.size} henkilölle") + fetchPersonAliases(data) + .flatMap(res => { + val (henkilot, personOidsWithAliases) = res + logger.info( + s"$description Saatiin Koskesta ${henkilot.size} henkilöä, aliakset haettu!" + ) + saveKoskiHenkilotAsSuorituksetAndArvosanat(henkilot, personOidsWithAliases, params) + .map(failedAndSucceeded => + KoskiProcessingResults( + succeededHenkiloOids = failedAndSucceeded._2.toSet, + failedHenkiloOids = failedAndSucceeded._1.toSet + ) + ) + .recoverWith({ case e: Exception => + if (retriesLeft > 0) { + logger.warn( + s"$description Virhe käsiteltäessä henkilöiden koski-tietoja, yritetään uudelleen. Uudelleenyrityksiä jäljellä: $retriesLeft", + e + ) + Future { Thread.sleep(params.retryWaitMillis) }.flatMap(_ => + saveSuoritusBatchWithRetries(retriesLeft - 1) + ) + } else { + logger.error( + s"$description Virhe käsiteltäessä henkilöiden koski-tietoja, ei enää uudelleenyrityksiä jäljellä.", + e + ) + throw e + } + }) + }) + } catch { + case e: Exception if retriesLeft > 0 => + logger.warn( + s"$description Tapahtui virhe käsiteltäessä koskidataa: ${e.getMessage}. Uudelleenyrityksiä jäljellä ${retriesLeft}, yritetään uudelleen." + ) + saveSuoritusBatchWithRetries(retriesLeft - 1) + case e: Exception if retriesLeft == 0 => + logger.error( + s"$description Tapahtui virhe käsiteltäessä koskidataa: ${e.getMessage}. Ei enää uudelleenyrityksiä jäljellä.", + e + ) + throw e + } + + } + saveSuoritusBatchWithRetries(retries) } - def createAndHandleKoskiMassaluovutusQuery( - ccQuery: KoskiMassaluovutusQueryParams, - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] = { + private def createAndHandleKoskiMassaluovutusQuery( + koskiQuery: KoskiMassaluovutusQueryParams, + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] = { try { - logger.info(s"Calling Koski with query: $ccQuery") + logger.info(s"Kutsutaan Kosken massaluovutusrajapintaa: $koskiQuery") val resultF = virkailijaRestClient .postObjectWithCodes[KoskiMassaluovutusQueryParams, KoskiMassaluovutusQueryResponse]( "koski.sure.massaluovutus.create-query", Seq(200), maxRetries = 2, - resource = ccQuery, + resource = koskiQuery, basicAuth = true ) .flatMap((baseQueryResponse: KoskiMassaluovutusQueryResponse) => { - logger.info(s"Saatiin vastaus massaluovutusrajapinnalta: ${baseQueryResponse - .copy(files = baseQueryResponse.files.take(3))}, pollataan tilaa") - - val pRes = pollMassaluovutusAndHandleResults( + logger.info( + s"Saatiin vastaus massaluovutusrajapinnalta: ${baseQueryResponse + .copy(files = Seq.empty)}, pollataan tilaa ja käsitellään tiedostot" + ) + pollMassaluovutusAndHandleResults( baseQueryResponse.resultsUrl.get, - newHandlerFunction, params ) - - pRes }) - .map((ress) => { - logger.info(s"Pollaus valmista, tulos: $ress") - ress + .map(finalResult => { + logger.info( + s"KoskiQuery $koskiQuery parametreille $params valmistui. Onnistuneita ${finalResult.succeededHenkiloOids.size}, epäonnistuneita ${finalResult.failedHenkiloOids.size}. ${finalResult.getFailedStr()}" + ) + finalResult }) resultF.onComplete { case Success(results) => logger.info( - s"Massaluovutusqueryn $ccQuery käsittely onnistui. Onnistuneita oppijoita ${results._2.size} ja epäonnistuneita ${results._1.size}." + s"Massaluovutusqueryn $koskiQuery käsittely onnistui. Onnistuneita oppijoita ${results.succeededHenkiloOids.size} ja epäonnistuneita ${results.failedHenkiloOids.size}." ) case Failure(f) => - logger.error(s"Massaluovutusqueryn $ccQuery käsittely epäonnistui: ${f.getMessage}", f) + logger.error(s"Massaluovutusqueryn $koskiQuery käsittely epäonnistui: ${f.getMessage}", f) } resultF } catch { case e: Throwable => - logger.error(s"Mitäs nyt, ${e.getStackTrace}", e) - if (e.getCause != null) { - logger.error(s"caused by ${e.getCause.getMessage}, ${e.getCause.getStackTrace}") - } else { - logger.error(s"No cause... ${e.getStackTrace.toSeq.foreach(println)}") - } + logger.error( + s"Jotain meni pieleen käsiteltäessä massaluovutusQuerya $koskiQuery, ${e.getStackTrace}", + e + ) Future.failed(e) } } def pollMassaluovutusAndHandleResults( resultsUrl: String, - resultFunction: ( - Seq[KoskiHenkiloContainer], - KoskiSuoritusHakuParams - ) => Future[(Seq[String], Seq[String])], - params: KoskiSuoritusHakuParams - ) = { + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] = { var handled: Set[String] = Set[String]() - //Yhdistetään useamman tiedoston sisältö ja käsitellään kerralla, että esimerkiksi aliasten haku on tehokkaampaa ja pollaustiheys harvempi - //Tällä hetkellä yksi tiedosto sisältää yhden oppijan tiedot, tämä voi kuitenkin muuttua. - val maxNumberOfFilesPerPoll: Int = 5 - def pollAndHandleUntilReady( - succeededAndFailed: (Seq[String], Seq[String]), + accProcessingResults: KoskiProcessingResults, previousPollResult: Option[KoskiMassaluovutusQueryResponse] - ): Future[(Seq[String], Seq[String])] = { - val pollResultF = - if (previousPollResult.exists(_.isFinished())) { + ): Future[KoskiProcessingResults] = { + val pollResultF: Future[KoskiMassaluovutusQueryResponse] = previousPollResult match { + case Some(ppr) if ppr.isFinished() && ppr.files.size > handled.size => logger.info( - s"Kaikki tulokset ovat valmistuneet Kosken päässä, ei lisää. Käsitellään kuitenkin loput tiedostot jos tarpeen." + s"Kysely on valmistunut Kosken päässä. Käsitellään kuitenkin loput tiedostot." ) Future.successful(previousPollResult.get) - } else if (previousPollResult.exists(pp => pp.files.size > handled.size)) { - logger.info(s"Käsittelemättömiä tiedostoja on vielä, ei pollata.") + case Some(ppr) if (ppr.files.size > handled.size) => + logger.info(s"Käsittelemättömiä tiedostoja on vielä, ei tarvita pollausta.") Future.successful(previousPollResult.get) - } else { + case Some(ppr) if ppr.isFinished() => + logger.info(s"Valmista, lopetetaan.") + Future.successful(previousPollResult.get) + + case _ => logger.info( s"Pollataan lisää piakkoin! Koskessa valmiina ${previousPollResult.map(_.files).getOrElse(Seq.empty).size}" ) Thread.sleep(5000) pollMassaluovutus(resultsUrl) - } - val handleResult = pollResultF.flatMap(massaluovutusQueryResponse => { - logger.info( - s"MassaluovutusQueryResponse files ready: ${massaluovutusQueryResponse.files.size} progress: ${massaluovutusQueryResponse.progress}" - ) - logger.info( - s"Koskessa valmiina: ${massaluovutusQueryResponse.files.size}, käsitelty aiemmin ${handled.size}" - ) + } + pollResultF.flatMap(massaluovutusQueryResponse => { if (massaluovutusQueryResponse.isFailed()) throw new RuntimeException(s"Virhe Kosken päässä kyselyssä $resultsUrl") + logger.info( + s"Koskessa valmiina: ${massaluovutusQueryResponse.files.size} tiedostoa (${massaluovutusQueryResponse.progress}), käsitelty aiemmin ${handled.size} tiedostoa." + ) + val filesReadyInKoski: Set[String] = massaluovutusQueryResponse.files.toSet - //val unhandled: Set[String] = filesReadyInKoski - handledResults.keySet() - val unhandled: Set[String] = (filesReadyInKoski -- handled).take(maxNumberOfFilesPerPoll) - handled = handled ++ unhandled - //log.info(s"$massaluovutusQueryResponse Koskessa valmiina ${massaluovutusQueryResponse.files.size}, käsittely aloitettu ${handledResults.entrySet()}") - //val uGroups = unhandled.grouped(maxNumOfFilesToGroup).toList - if (unhandled.nonEmpty) { - logger.info(s"Käsitellään ${unhandled.size} tiedostoa") - val resultFileFutures = unhandled.toSeq.map(resultUrl => { - fetchKoskiResultFile(resultUrl) - }) - val allFileResults: Future[(Seq[String], Seq[String])] = Future - .sequence(resultFileFutures) - .map(_.flatten) - .map(foo => Await.result(resultFunction(foo, params), 5.minutes)) - allFileResults.flatMap(fr => { - val combinedResults = (succeededAndFailed._1 ++ fr._1, succeededAndFailed._2 ++ fr._2) - if (massaluovutusQueryResponse.isFinished()) { - if ((massaluovutusQueryResponse.files.toSet -- handled).isEmpty) { - logger.info( - s"Query on valmistunut ja kaikki ${massaluovutusQueryResponse.files.size} on käsitelty: $combinedResults" - ) - Future.successful(combinedResults) - } else { - //Todo, tässä vois lopettaa pollauksen... - logger.info( - s"Query on valmistunut mutta kaikkia tiedostoja ei ole vielä käsitelty. Jatketaan!" - ) - pollAndHandleUntilReady(combinedResults, Some(massaluovutusQueryResponse)) - } - } else { - logger.info( - s"Erä on käsitelty mutta query ei vielä valmistunut, onnistuneita ${combinedResults._2.size} ja epäonnistuneita ${combinedResults._1.size}" + val nextUnhandledFile: Option[String] = (filesReadyInKoski -- handled).headOption + + nextUnhandledFile match { + case Some(fileUrl) => + logger.info(s"Käsitellään tiedosto $fileUrl") + handled = handled ++ nextUnhandledFile + val description: String = + s"KoskiMassaluovutus, käsitellään tiedosto nro ${handled.size}" + val batchResult = fetchKoskiResultFile(fileUrl).flatMap(fileResult => { + saveKoskiDataWithRetries(fileResult, params, description, 3) + }) + val combinedResultsF = batchResult.map(batchResults => { + accProcessingResults.copy( + succeededHenkiloOids = + accProcessingResults.succeededHenkiloOids ++ batchResults.succeededHenkiloOids, + failedHenkiloOids = + accProcessingResults.failedHenkiloOids ++ batchResults.failedHenkiloOids ) + }) + combinedResultsF.flatMap(combinedResults => pollAndHandleUntilReady(combinedResults, Some(massaluovutusQueryResponse)) - } - }) - } else { - logger.info(s"Ei käsiteltävää, pollataan kohta uudestaan.") - pollAndHandleUntilReady(succeededAndFailed, Some(massaluovutusQueryResponse)) + ) + case None if !massaluovutusQueryResponse.isFinished() => + logger.info(s"Ei käsiteltävää, pollataan kohta uudestaan.") + pollAndHandleUntilReady(accProcessingResults, Some(massaluovutusQueryResponse)) + case None if massaluovutusQueryResponse.isFinished() => + logger.info( + s"Valmista. ${accProcessingResults.succeededHenkiloOids.size} onnistunutta ja ${accProcessingResults.failedHenkiloOids.size} epäonnistunutta henkilöä. Lopetetaan! $massaluovutusQueryResponse" + ) + Future.successful(accProcessingResults) } }) - logger.info(s"returning handleResult") - handleResult - } - - val fullResultF = pollAndHandleUntilReady((Seq[String](), Seq[String]()), None) - fullResultF.onComplete { - case Success(all) => - logger.info(s"Onnistui? $all") - case Failure(f) => - logger.error(s"Mikä meni vikaan? ${f.getMessage}", f) } - fullResultF + pollAndHandleUntilReady(KoskiProcessingResults(Set[String](), Set[String]()), None) } def pollMassaluovutus(url: String) = { @@ -588,26 +534,25 @@ class KoskiService( def fetchKoskiResultFile(fileUrl: String): Future[Seq[KoskiHenkiloContainer]] = { try { - //log.info(s"Haetaan tiedosto $fileUrl") + logger.info(s"Haetaan tiedosto $fileUrl") + //Todo, pitäisikö KoskiMassaluovutusFileResultit käsitellä suoraan KoskiHenkiloContainereina tai muulla tavalla suoraviivaistaa? val koskiTiedotF = virkailijaRestClient - .readKoskiMassaluovutusResultFromUrl[Seq[KoskiMassaluovutusResultLite]]( + .readKoskiMassaluovutusResultFromUrl[Seq[KoskiMassaluovutusFileResult]]( fileUrl, Seq(200), maxRetries = 2 ) - .map(koskiTiedotResult => { + .map((koskiTiedotResult: Seq[KoskiMassaluovutusFileResult]) => { val henkiloContainers: Seq[KoskiHenkiloContainer] = koskiTiedotResult - .groupBy(_.oppijaOid) .map(kv => KoskiHenkiloContainer( - KoskiHenkilo(Some(kv._1), None, None, None, None, None), - kv._2.map(_.opiskeluoikeus) + KoskiHenkilo(Some(kv.oppijaOid), None, None, None, None, None), + kv.opiskeluoikeudet ) ) .toList if (henkiloContainers.isEmpty) logger.warn(s"Jostain syystä tiedosta $fileUrl ei löytynyt oppijoita...") - //log.info(s"Saatiin Koskesta tiedot ${henkiloContainers.size} oppijalle") henkiloContainers }) koskiTiedotF @@ -618,23 +563,47 @@ class KoskiService( } } - def handleKoskiRefreshForOppijaOids(oppijaOids: Set[String], params: KoskiSuoritusHakuParams) = { - createAndHandleKoskiMassaluovutusQuery( - KoskiMassaluovutusQueryParams( - "sure-oppijat", - "application/json", - Some(oppijaOids), - muuttuneetJälkeen = None - ), - params - ) + val massaluovutusMaxOppijaOids: Int = 5000 + def handleKoskiRefreshForOppijaOids( + oppijaOids: Set[String], + params: KoskiSuoritusTallennusParams + ) = { + if (oppijaOids.isEmpty) { + Future.successful(KoskiProcessingResults(Set[String](), Set[String]())) + } else { + val groupedOids: Seq[(Set[String], Int)] = + oppijaOids.grouped(massaluovutusMaxOppijaOids).zipWithIndex.toSeq + logger.info(s"Haetaan Koski-tiedot ${oppijaOids.size} oppijalle ${groupedOids.size} erässä") + groupedOids.foldLeft( + Future.successful(KoskiProcessingResults(Set[String](), Set[String]())) + ) { case (accFuture, (oidBatch, batchNr)) => + accFuture.flatMap(accResult => { + logger.info(s"Käsitellään erä ${batchNr + 1}/${groupedOids.size + 1}") + createAndHandleKoskiMassaluovutusQuery( + KoskiMassaluovutusQueryParams( + "sure-oppijat", + "application/json", + Some(oidBatch), + muuttuneetJälkeen = None + ), + params + ).map(batchResult => + KoskiProcessingResults( + succeededHenkiloOids = + accResult.succeededHenkiloOids ++ batchResult.succeededHenkiloOids, + failedHenkiloOids = accResult.failedHenkiloOids ++ batchResult.failedHenkiloOids + ) + ) + }) + } + } } //Todo, joku validointi aikaleiman muodolle? vvvv-kk-ppThh:mm:ss def handleKoskiRefreshMuuttunutJalkeen( muuttunutJalkeen: String, - params: KoskiSuoritusHakuParams - ) = { + params: KoskiSuoritusTallennusParams + ): Future[KoskiProcessingResults] = { createAndHandleKoskiMassaluovutusQuery( KoskiMassaluovutusQueryParams( "sure-muuttuneet", @@ -704,7 +673,7 @@ class KoskiService( override def updateHenkilot( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] = { val oppijat = fetchHenkilot(oppijaOids) oppijat @@ -718,7 +687,7 @@ class KoskiService( override def updateHenkilotNewMuuttunutJalkeen( muuttunutJalkeen: String, - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ) = { logger.info(s"Update henkilot new muuttunut jalkeen!") handleKoskiRefreshMuuttunutJalkeen(muuttunutJalkeen, params) @@ -726,13 +695,9 @@ class KoskiService( override def updateHenkilotNew( oppijaOids: Set[String], - params: KoskiSuoritusHakuParams - ): Future[(Seq[String], Seq[String])] = { - logger.info(s"Update henkilot new!") - val foo = handleKoskiRefreshForOppijaOids(oppijaOids, params) - val result = Await.result(foo, 5.minutes) - logger.info(s"Tiedostoja: $result") - Future.successful((Seq.empty, Seq.empty)) + params: KoskiSuoritusTallennusParams + ) = { + handleKoskiRefreshForOppijaOids(oppijaOids, params) } //Poistaa KoskiHenkiloContainerin sisältä sellaiset opiskeluoikeudet, joilla ei ole oppilaitosta jolla on määritelty oid. @@ -763,7 +728,7 @@ class KoskiService( private def saveKoskiHenkilotAsSuorituksetAndArvosanat( henkilot: Seq[KoskiHenkiloContainer], personOidsWithAliases: PersonOidsWithAliases, - params: KoskiSuoritusHakuParams + params: KoskiSuoritusTallennusParams ): Future[(Seq[String], Seq[String])] = { val filteredHenkilot: Seq[KoskiHenkiloContainer] = removeOpiskeluoikeudesWithoutDefinedOppilaitosAndOppilaitosOids(henkilot) @@ -779,9 +744,10 @@ class KoskiService( ) } val henkiloOidToHenkilo: Future[Map[String, Henkilo]] = - if (params.saveSeiskaKasiJaValmistava) + if (params.saveSeiskaKasiJaValmistava) { + logger.info(s"hep! Haetaan lisää onr-dataa...") oppijaNumeroRekisteri.getByOids(loytyyHenkiloOidi.flatMap(_.henkilö.oid).toSet) - else + } else Future.successful(Map.empty) henkiloOidToHenkilo.flatMap(henkilot => diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiUtil.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiUtil.scala index c5e631297..4ae505191 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiUtil.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiUtil.scala @@ -19,13 +19,15 @@ object KoskiUtil { new LocalDate(deadlineDate.year().get() - 1, 1, 1) } - //format "2020-06-01T00:00:00+02:00" + //"2024-06-04T00:00:00+02:00" vanha + //"2024-12-17T10:55:33" uusi, massaluovutsrajapinnan käyttämä formaatti lazy val koskiFetchStartTime: String = OphUrlProperties.getProperty("suoritusrekisteri.koski.start.timestamp") match { - case s: String if !s.isEmpty => s + case s: String if !s.isEmpty && s.length == 19 => + s //todo, tälle joku fiksumpi tapa/validointi tai sit vain huolehditaan että konffeissa on oikean muotoista tavaraa. case _ => - new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX") - .format(new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(1))) + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") + .format(new Date(System.currentTimeMillis() - TimeUnit.HOURS.toMillis(3))) } lazy val koskiImporterResourceInUse: Boolean = diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/koskiDomain.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/koskiDomain.scala index 9211c410f..17d24be9b 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/koskiDomain.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/integration/koski/koskiDomain.scala @@ -375,7 +375,7 @@ case class Kotiopetusjakso(alku: String, loppu: Option[String]) case class KoskiErityisenTuenPaatos(opiskeleeToimintaAlueittain: Option[Boolean]) -case class KoskiSuoritusHakuParams( +case class KoskiSuoritusTallennusParams( saveLukio: Boolean = false, saveAmmatillinen: Boolean = false, saveSeiskaKasiJaValmistava: Boolean = false, diff --git a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/web/koski/KoskiImporterResource.scala b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/web/koski/KoskiImporterResource.scala index fb93c56f0..76c0eac6d 100644 --- a/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/web/koski/KoskiImporterResource.scala +++ b/suoritusrekisteri/src/main/scala/fi/vm/sade/hakurekisteri/web/koski/KoskiImporterResource.scala @@ -8,7 +8,7 @@ import fi.vm.sade.hakurekisteri._ import fi.vm.sade.hakurekisteri.integration.koski.{ IKoskiService, KoskiService, - KoskiSuoritusHakuParams, + KoskiSuoritusTallennusParams, KoskiUtil } import fi.vm.sade.hakurekisteri.rest.support.{HakurekisteriJsonSupport, User} @@ -17,7 +17,6 @@ import fi.vm.sade.hakurekisteri.web.rest.support.{Security, SecuritySupport, Use import org.scalatra.{AsyncResult, FutureSupport} import org.scalatra.swagger.{Swagger, SwaggerEngine} -import scala.compat.Platform import scala.concurrent.{ExecutionContext, Future} class KoskiImporterResource(koskiService: IKoskiService, ophConfig: Config)(implicit @@ -71,9 +70,9 @@ class KoskiImporterResource(koskiService: IKoskiService, ophConfig: Config)(impl Changes.EMPTY ) new AsyncResult { - override val is: Future[_] = koskiService.updateHenkilotWithAliases( + override val is: Future[_] = koskiService.updateHenkilotNew( Set(personOid), - KoskiSuoritusHakuParams( + KoskiSuoritusTallennusParams( saveLukio = haeLukio, saveAmmatillinen = haeAmmatilliset, saveSeiskaKasiJaValmistava = haeSeiskaKasiJaValmistava @@ -105,9 +104,9 @@ class KoskiImporterResource(koskiService: IKoskiService, ophConfig: Config)(impl Changes.EMPTY ) new AsyncResult { - override val is: Future[_] = koskiService.updateHenkilotWithAliases( + override val is: Future[_] = koskiService.updateHenkilotNew( personOids, - KoskiSuoritusHakuParams( + KoskiSuoritusTallennusParams( saveLukio = haeLukio, saveAmmatillinen = haeAmmatilliset, saveSeiskaKasiJaValmistava = haeSeiskaKasiJaValmistava @@ -137,7 +136,7 @@ class KoskiImporterResource(koskiService: IKoskiService, ophConfig: Config)(impl new AsyncResult { override val is: Future[_] = koskiService.syncHaunHakijat( hakuOid, - KoskiSuoritusHakuParams( + KoskiSuoritusTallennusParams( saveLukio = haeLukio, saveAmmatillinen = haeAmmatilliset, saveSeiskaKasiJaValmistava = haeSeiskaKasiJaValmistava @@ -145,5 +144,4 @@ class KoskiImporterResource(koskiService: IKoskiService, ophConfig: Config)(impl ) } } - } diff --git a/suoritusrekisteri/src/main/scala/support/Integrations.scala b/suoritusrekisteri/src/main/scala/support/Integrations.scala index 5a348c703..d0d6771ab 100644 --- a/suoritusrekisteri/src/main/scala/support/Integrations.scala +++ b/suoritusrekisteri/src/main/scala/support/Integrations.scala @@ -602,7 +602,8 @@ class BaseIntegrations(rekisterit: Registers, system: ActorSystem, config: Confi } if (KoskiUtil.updateToisenAsteenHaut) { // refreshChangedOppijasFromKoski is bound to toisen asteen haut - koskiService.refreshChangedOppijasFromKoski() + logger.info(s"Päivitetään toisen asteen haut!") + koskiService.refreshChangedOppijasFromKoski(None) quartzScheduler.scheduleJob( lambdaJob(koskiService.updateAktiivisetToisenAsteenHaut()), newTrigger().startNow().withSchedule(cronSchedule(koskiCronJob)).build() diff --git a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiActorSpec.scala b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiActorSpec.scala index ee336d5c4..0a81f7079 100644 --- a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiActorSpec.scala +++ b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiActorSpec.scala @@ -50,8 +50,8 @@ class KoskiActorSpec }) val koskiDataHandler: KoskiDataHandler = new KoskiDataHandler(testRef, testRef, testRef) val opiskelijaParser = new KoskiOpiskelijaParser - val params: KoskiSuoritusHakuParams = - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + val params: KoskiSuoritusTallennusParams = + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) it should "empty KoskiHenkilo should throw NoSuchElementException" in { try { diff --git a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandlerTest.scala b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandlerTest.scala index 813beab43..5247a2a70 100644 --- a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandlerTest.scala +++ b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiDataHandlerTest.scala @@ -484,7 +484,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -652,7 +652,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -1520,8 +1520,8 @@ class KoskiDataHandlerTest henkilo should not be null henkilo.opiskeluoikeudet.head.tyyppi should not be empty - val params: KoskiSuoritusHakuParams = - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + val params: KoskiSuoritusTallennusParams = + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) Await.result( koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, @@ -1558,7 +1558,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1593,7 +1593,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1633,7 +1633,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1674,7 +1674,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -1716,7 +1716,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1738,7 +1738,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1765,7 +1765,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1847,7 +1847,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -1885,7 +1885,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -1908,7 +1908,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -1930,7 +1930,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -1957,7 +1957,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -1986,7 +1986,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -2024,7 +2024,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -2059,7 +2059,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = false @@ -2093,7 +2093,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -2130,7 +2130,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -2171,7 +2171,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( koskiHenkilo, PersonOidsWithAliases(koskiHenkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams( + new KoskiSuoritusTallennusParams( saveLukio = false, saveAmmatillinen = false, saveSeiskaKasiJaValmistava = true @@ -2223,7 +2223,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2251,7 +2251,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2278,7 +2278,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2306,7 +2306,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2328,7 +2328,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2349,7 +2349,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2377,7 +2377,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2404,7 +2404,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2431,7 +2431,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2457,7 +2457,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2489,7 +2489,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2522,7 +2522,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2554,7 +2554,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2587,7 +2587,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2630,7 +2630,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2673,7 +2673,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2701,7 +2701,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2729,7 +2729,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2759,7 +2759,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2794,7 +2794,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2829,7 +2829,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2862,7 +2862,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2903,7 +2903,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -2945,7 +2945,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -2982,7 +2982,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3018,7 +3018,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3042,7 +3042,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3067,7 +3067,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3092,7 +3092,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3117,7 +3117,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3142,7 +3142,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3167,7 +3167,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3194,7 +3194,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3224,7 +3224,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -3251,7 +3251,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -3334,7 +3334,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -3361,7 +3361,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -3385,7 +3385,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -3953,7 +3953,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -3980,7 +3980,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4006,7 +4006,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4032,7 +4032,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4064,7 +4064,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4088,7 +4088,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4112,7 +4112,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4170,7 +4170,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4203,7 +4203,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4247,7 +4247,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4298,7 +4298,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4331,7 +4331,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4364,7 +4364,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4397,7 +4397,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4430,7 +4430,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4460,7 +4460,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4493,7 +4493,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4541,7 +4541,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4572,7 +4572,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4640,7 +4640,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) ), 5.seconds ) @@ -4753,7 +4753,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4767,7 +4767,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4859,7 +4859,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4871,7 +4871,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo2, PersonOidsWithAliases(henkilo2.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4889,7 +4889,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, personOidsWithAliases, - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4904,7 +4904,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo2identifiedByAlias, personOidsWithAliases, - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4923,7 +4923,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkiloIdentifiedByAlias, personOidsWithAliasesInitial, - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4938,7 +4938,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo2, personOidsWithAliasesNew, - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4968,7 +4968,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, personOidsWithAliases, - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -4980,7 +4980,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, personOidsWithAliases, - KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true) + KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true) ), 5.seconds ) @@ -5007,7 +5007,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5088,7 +5088,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo2, PersonOidsWithAliases(henkilo2.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5161,7 +5161,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5187,7 +5187,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5219,7 +5219,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, personOidsWithAliases, - KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5247,7 +5247,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, personOidsWithAliases, - KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5271,7 +5271,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5287,7 +5287,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5310,7 +5310,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5333,7 +5333,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5358,7 +5358,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5381,7 +5381,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5404,7 +5404,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5428,7 +5428,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5451,7 +5451,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5497,7 +5497,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = false) + KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = false) ), 5.seconds ) @@ -5523,7 +5523,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5557,7 +5557,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5590,7 +5590,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5622,7 +5622,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5657,7 +5657,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5694,7 +5694,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5731,7 +5731,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5772,7 +5772,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5812,7 +5812,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) @@ -5852,7 +5852,7 @@ class KoskiDataHandlerTest koskiDatahandler.processHenkilonTiedotKoskesta( henkilo, PersonOidsWithAliases(henkilo.henkilö.oid.toSet), - new KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = false) + new KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = false) ), 5.seconds ) diff --git a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiServiceSpec.scala b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiServiceSpec.scala index 10180e3ec..cd40981e3 100644 --- a/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiServiceSpec.scala +++ b/suoritusrekisteri/src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/KoskiServiceSpec.scala @@ -46,9 +46,9 @@ class KoskiServiceSpec override val jsonDir = "src/test/scala/fi/vm/sade/hakurekisteri/integration/koski/json/" - it should "retry on occasional errors when updating henkilot for haku" in { + /*it should "retry on occasional errors when updating henkilot for haku" in { val params = - KoskiSuoritusHakuParams(saveLukio = false, saveAmmatillinen = true, retryWaitMillis = 1000) + KoskiSuoritusTallennusParams(saveLukio = false, saveAmmatillinen = true, retryWaitMillis = 1000) val numeros = Range(1, 12345).map(n => s"1.2.3.$n") when(endPoint.request(forUrl("http://localhost/koski/api/sure/oids"))) .thenReturn( @@ -74,17 +74,51 @@ class KoskiServiceSpec .thenReturn((200, List(), "[]")) val future = koskiService.handleHenkiloUpdate(numeros, params, "just testing!") Await.result(future, 10.seconds) - } + }*/ - it should "return successful future for handleHenkiloUpdate" in { + /* it should "return successful future for handleHenkiloUpdate" in { when(endPoint.request(forUrl("http://localhost/koski/api/sure/oids"))) .thenReturn((200, List(), "[]")) val future = koskiService.handleHenkiloUpdate( Seq("1.2.3.4"), - new KoskiSuoritusHakuParams(saveLukio = true, saveAmmatillinen = true), + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true), "just testing!" ) Await.result(future, 10.seconds) + }*/ + + //WIP + it should "successfully create, poll and handle Koski massaluovutus call" in { + when(endPoint.request(forUrl("http://localhost/koski/api/massaluovutus"))) + .thenReturn( + ( + 200, + List(), + "{\n \"queryId\" : \"6d6fa78a-15af-4fef-a3cf-a7a555201ad2\",\n \"requestedBy\" : \"1.2.246.562.24.123123123123\",\n \"query\" : {\n \"type\" : \"valintalaskenta\",\n \"format\" : \"application/json\",\n \"rajapäivä\" : \"2024-12-19\",\n \"oppijaOids\" : [ \"1.2.246.562.24.37998958910\", \"1.2.246.562.24.62432463004\" ]\n },\n \"createdAt\" : \"2024-12-18T07:51:01.845187+02:00\",\n \"resultsUrl\" : \"https://virkailija.testiopintopolku.fi/koski/api/massaluovutus/6d6fa78a-15af-4fef-a3cf-a7a555201ad2\",\n \"status\" : \"pending\"\n}" + ) + ) + + when( + endPoint.request( + forUrl( + "https://virkailija.testiopintopolku.fi/koski/api/massaluovutus/6d6fa78a-15af-4fef-a3cf-a7a555201ad2" + ) + ) + ) + .thenReturn( + ( + 200, + List(), + "{\n \"queryId\" : \"6d6fa78a-15af-4fef-a3cf-a7a555201ad2\",\n \"requestedBy\" : \"1.2.246.562.24.123123123123\",\n \"query\" : {\n \"type\" : \"valintalaskenta\",\n \"format\" : \"application/json\",\n \"rajapäivä\" : \"2024-12-19\",\n \"oppijaOids\" : [ \"1.2.246.562.24.37998958910\", \"1.2.246.562.24.62432463004\" ]\n },\n \"createdAt\" : \"2024-12-18T07:51:01.845187+02:00\",\n \"startedAt\" : \"2024-12-18T07:51:02.845187+02:00\",\n \"files\" : [ \"https://virkailija.testiopintopolku.fi/koski/api/massaluovutus/6d6fa78a-15af-4fef-a3cf-a7a555201ad2/1.2.246.562.24.37998958910.json\" ],\n \"resultsUrl\" : \"https://virkailija.testiopintopolku.fi/koski/api/massaluovutus/6d6fa78a-15af-4fef-a3cf-a7a555201ad2\",\n \"progress\" : {\n \"percentage\" : 75,\n \"estimatedCompletionTime\" : \"2024-12-19T22:36:03.845187\"\n },\n \"status\" : \"running\"\n}" + ), + (200, List(), "") + ) + + val future = koskiService.handleKoskiRefreshForOppijaOids( + Set("1.2.3.4"), + new KoskiSuoritusTallennusParams(saveLukio = true, saveAmmatillinen = true) + ) + Await.result(future, 10.seconds) } }