From b5d112918c0b3f0b5216d1ec977920f7bb038b35 Mon Sep 17 00:00:00 2001 From: Eike Kettner Date: Tue, 11 Jul 2023 18:30:41 +0200 Subject: [PATCH] Query number of items to wait for --- .../flows/TSProvisioning.scala | 5 +++- .../tooling/ServicesClients.scala | 27 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/flows/TSProvisioning.scala b/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/flows/TSProvisioning.scala index 95d804a0ce..8e304f472b 100644 --- a/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/flows/TSProvisioning.scala +++ b/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/flows/TSProvisioning.scala @@ -20,6 +20,7 @@ package io.renku.graph.acceptancetests.flows import cats.data.NonEmptyList import cats.effect.unsafe.IORuntime +import cats.syntax.all._ import io.renku.events.CategoryName import io.renku.generators.Generators.Implicits._ import io.renku.graph.acceptancetests.data @@ -74,7 +75,9 @@ trait TSProvisioning sleep((5 seconds).toMillis) } - `wait for events to be processed`(project.id, accessToken, commitIds.size) + val items = eventLogClient.getEvents(project.id.asLeft).unsafeRunSync().size + + `wait for events to be processed`(project.id, accessToken, items) } def `wait for events to be processed`( diff --git a/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/tooling/ServicesClients.scala b/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/tooling/ServicesClients.scala index 86e2b15474..4cdaf322ec 100644 --- a/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/tooling/ServicesClients.scala +++ b/acceptance-tests/src/test/scala/io/renku/graph/acceptancetests/tooling/ServicesClients.scala @@ -25,10 +25,13 @@ import cats.syntax.all._ import eu.timepit.refined.api.Refined import eu.timepit.refined.auto._ import eu.timepit.refined.string.Url -import io.circe.Json +import io.circe.generic.extras.JsonKey +import io.circe.generic.semiauto.deriveDecoder +import io.circe.{Decoder, Json} import io.circe.literal._ import io.renku.control.Throttler import io.renku.graph.acceptancetests.tooling.ServiceClient.ClientResponse +import io.renku.graph.model.events.{EventId, EventStatus} import io.renku.graph.model.projects import io.renku.http.client.{AccessToken, BasicAuthCredentials, RestClient} import io.renku.http.tinytypes.TinyTypeURIEncoder._ @@ -120,6 +123,15 @@ object KnowledgeGraphClient { } object EventLogClient { + case class ProjectEvent( + id: EventId, + @JsonKey("project.id") projectId: projects.GitLabId, + @JsonKey("project.path") projectPath: projects.Path, + status: EventStatus + ) + object ProjectEvent { + implicit val jsonDecoder: Decoder[ProjectEvent] = deriveDecoder + } def apply()(implicit logger: Logger[IO]): EventLogClient = new EventLogClient @@ -138,6 +150,19 @@ object EventLogClient { } yield () }.unsafeRunSync() + def getEvents(project: Either[projects.GitLabId, projects.Path]): IO[List[ProjectEvent]] = + for { + uri <- validateUri(s"$baseUrl/events").map(uri => + project.fold(id => uri.withQueryParam("project-id", id.value), + path => uri.withQueryParam("project-path", path.value) + ) + ) + req = request(Method.GET, uri) + r <- send(req) { case (Status.Ok, _, resp) => + resp.as[List[ProjectEvent]] + } + } yield r + private def createRequest(uri: Uri, event: Json) = request(Method.POST, uri).withMultipartBuilder .addPart("event", event)