1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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))
}
}
|