aboutsummaryrefslogtreecommitdiff
path: root/core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala')
-rw-r--r--core-testkit/src/main/scala/xyz/driver/core/testkit/RestDatabaseResetService.scala70
1 files changed, 70 insertions, 0 deletions
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))
+ }
+}