From 46d7e38b4651caff2a7fb9dc9ee1aa398807db44 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 9 Oct 2018 14:37:57 -0700 Subject: Add testkit module --- .../core/testkit/RestDatabaseResetService.scala | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala (limited to 'core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala') diff --git a/core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala b/core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala new file mode 100644 index 0000000..db02bbb --- /dev/null +++ b/core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala @@ -0,0 +1,70 @@ +package xyz.driver.core.testkit + +import akka.actor.ActorSystem +import akka.http.scaladsl.model._ +import akka.stream.ActorMaterializer +import spray.json._ +import xyz.driver.core.Name +import xyz.driver.core.rest.{RestService, ServiceRequestContext, ServiceTransport} + +import scala.concurrent.{ExecutionContext, Future} +import scalaz.{ListT, OptionT} + +object RestDatabaseResetService { + import DefaultJsonProtocol._ + import xyz.driver.core.json._ + + final case class Application(name: Name[Application], tag: String) + + final case class Environment(name: Name[Environment], applications: Seq[Application], status: String) + + implicit val applicationJsonFormat = jsonFormat2(Application) + + implicit val environmentJsonFormat = jsonFormat3(Environment) +} + +class RestDatabaseResetService( + transport: ServiceTransport, + baseUri: Uri, + actorSystem: ActorSystem, + executionContext: ExecutionContext) + extends RestService { + + import DefaultJsonProtocol._ + import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ + import RestDatabaseResetService._ + + protected implicit val exec = executionContext + protected implicit val materializer = ActorMaterializer()(actorSystem) + + def getAvailableEnvironments(): ListT[Future, String] = { + val request = get(baseUri, s"/v1/environment") + listResponse[String](transport.sendRequest(new ServiceRequestContext())(request)) + } + + def getEnvironmentDetails(envName: Name[Environment]): ListT[Future, Environment] = { + val requestStub = get(baseUri, s"/v1/environment/$envName") + listResponse[Environment](transport.sendRequest(new ServiceRequestContext())(requestStub)) + } + + def getEnvironmentStatus(envName: Name[Environment]): OptionT[Future, String] = { + val requestStub = get(baseUri, s"/v1/environment/$envName/status") + optionalResponse[String](transport.sendRequest(new ServiceRequestContext())(requestStub)) + } + + def resetEnvironmentStatus(envName: Name[Environment], newStatus: String): OptionT[Future, String] = { + val requestStub = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/environment/$envName/status")) + optionalResponse[String](transport.sendRequest(new ServiceRequestContext())(requestStub)) + } + + def resetEnvironmentApplicationsData(envName: Name[Environment]): OptionT[Future, Unit] = { + val requestStub = HttpRequest(HttpMethods.POST, endpointUri(baseUri, s"/v1/environment/$envName/reset")) + unitResponse(transport.sendRequest(new ServiceRequestContext())(requestStub)) + } + + def updateEnvironmentState(updatedEnvironment: Environment)( + implicit ctx: ServiceRequestContext): OptionT[Future, Environment] = { + val requestStub = postJson(baseUri, s"/v1/environment/${updatedEnvironment.name}", updatedEnvironment.toJson) + optionalResponse[Environment](transport.sendRequest(ctx)(requestStub)) + } +} -- cgit v1.2.3