From e4a0b165f45797ddb6063662debee2d6274b0740 Mon Sep 17 00:00:00 2001
From: Leonardo Menezes <leonardo.menezes@xing.com>
Date: Mon, 4 Apr 2016 14:03:38 +0200
Subject: [PATCH] added test to GetIndexController

---
 ...scala => GetIndexSettingsController.scala} |  2 +-
 conf/routes                                   |  2 +-
 .../GetIndexSettingsControllerSpec.scala      | 61 +++++++++++++++++++
 3 files changed, 63 insertions(+), 2 deletions(-)
 rename app/controllers/{GetIndexSettings.scala => GetIndexSettingsController.scala} (66%)
 create mode 100644 test/controllers/GetIndexSettingsControllerSpec.scala

diff --git a/app/controllers/GetIndexSettings.scala b/app/controllers/GetIndexSettingsController.scala
similarity index 66%
rename from app/controllers/GetIndexSettings.scala
rename to app/controllers/GetIndexSettingsController.scala
index 78f0c08..f966b68 100644
--- a/app/controllers/GetIndexSettings.scala
+++ b/app/controllers/GetIndexSettingsController.scala
@@ -1,6 +1,6 @@
 package controllers
 
-class GetIndexSettings extends ElasticActionController {
+class GetIndexSettingsController extends ElasticActionController {
 
   def processElasticRequest = (request, client) => client.getIndexSettings(request.get("index"), request.host)
 
diff --git a/conf/routes b/conf/routes
index 99543de..d7a1d37 100644
--- a/conf/routes
+++ b/conf/routes
@@ -15,7 +15,7 @@ POST       /apis/optimize_indices            @controllers.OptimizeIndexControlle
 POST       /apis/clear_indices_cache         @controllers.ClearIndexCacheController.execute
 POST       /apis/refresh_indices             @controllers.RefreshIndexController.execute
 POST       /apis/delete_indices              @controllers.DeleteIndexController.execute
-POST       /apis/get_index_settings          @controllers.GetIndexSettings.execute
+POST       /apis/get_index_settings          @controllers.GetIndexSettingsController.execute
 POST       /apis/get_index_mapping           @controllers.GetIndexMappingController.execute
 POST       /apis/update_cluster_settings     @controllers.PutClusterSettings.execute
 POST       /apis/get_node_stats              @controllers.NodeStatsController.execute
diff --git a/test/controllers/GetIndexSettingsControllerSpec.scala b/test/controllers/GetIndexSettingsControllerSpec.scala
new file mode 100644
index 0000000..00d8831
--- /dev/null
+++ b/test/controllers/GetIndexSettingsControllerSpec.scala
@@ -0,0 +1,61 @@
+package controllers
+
+import elastic.{ElasticResponse, ElasticClient}
+import exceptions.MissingRequiredParamException
+import models.CerebroRequest
+import org.specs2.Specification
+import org.specs2.mock.Mockito
+import play.api.libs.json.Json
+import play.api.test.FakeApplication
+
+import scala.concurrent.duration.Duration
+import scala.concurrent.{Await, Future}
+
+object GetIndexSettingsControllerSpec extends Specification with Mockito {
+
+  def is =
+    s2"""
+    GetIndexSettingsController should                  ${step(play.api.Play.start(FakeApplication()))}
+      invoke getIndexSettings                           $getIndexSettings
+      should throw exception if index param is missing $missingIndex
+                                                       ${step(play.api.Play.stop(FakeApplication()))}
+      """
+
+  val controller = new GetIndexSettingsController
+
+  def getIndexSettings = {
+    val expectedResponse = Json.parse(
+      """
+        |{
+        |  "someIndex": {
+        |    "settings": {
+        |      "index": {
+        |        "creation_date": "1459675569309",
+        |        "number_of_shards": "5",
+        |        "number_of_replicas": "1",
+        |        "uuid": "6sN-tL30Sfyz_tW0iVqVPQ",
+        |        "version": {
+        |          "created": "2030099"
+        |        }
+        |      }
+        |    }
+        |  }
+        |}
+      """.stripMargin
+    )
+    val body = Json.obj("host" -> "somehost", "index" -> "someIndex")
+    val client = mock[ElasticClient]
+    client.getIndexSettings("someIndex", "somehost") returns Future.successful(ElasticResponse(200, expectedResponse))
+    val response = Await.result(controller.processElasticRequest(CerebroRequest(body), client), Duration("1s"))
+    there was one(client).getIndexSettings("someIndex", "somehost")
+    response.body mustEqual expectedResponse
+    response.status mustEqual 200
+  }
+
+  def missingIndex = {
+    val body = Json.obj("host" -> "somehost")
+    val client = mock[ElasticClient]
+    controller.processElasticRequest(CerebroRequest(body), client) must throwA[MissingRequiredParamException]
+  }
+
+}
-- 
GitLab