From 6b310abb8ef73308b8c9b7a1dc55522b6fe4e61c Mon Sep 17 00:00:00 2001 From: Tamino Dauth Date: Fri, 26 Oct 2018 13:01:54 +0200 Subject: [PATCH] Allow deletion of test suites, more restrictive path, fix Bash script --- scripts/test-suite.sh | 2 +- .../de/retest/guistatemachine/RestService.scala | 13 +++++++++---- .../persistence/Persistence.scala | 17 +++++++++++++++++ .../guistatemachine/RestServiceSpec.scala | 12 ++++++++++++ 4 files changed, 39 insertions(+), 5 deletions(-) diff --git a/scripts/test-suite.sh b/scripts/test-suite.sh index 3fd0935..3fa928c 100644 --- a/scripts/test-suite.sh +++ b/scripts/test-suite.sh @@ -1,2 +1,2 @@ #!/bin/bash -curl -H "Content-Type: application/json" -X GET http://localhost:8888/application/0/test-suites/0 \ No newline at end of file +curl -H "Content-Type: application/json" -X GET http://localhost:8888/application/0/test-suite/0 \ No newline at end of file diff --git a/src/main/scala/de/retest/guistatemachine/RestService.scala b/src/main/scala/de/retest/guistatemachine/RestService.scala index a7ac748..abe89d9 100644 --- a/src/main/scala/de/retest/guistatemachine/RestService.scala +++ b/src/main/scala/de/retest/guistatemachine/RestService.scala @@ -46,21 +46,21 @@ trait RestService { path("applications") { complete(persistence.getApplications()) } ~ - pathPrefix("application" / LongNumber / "test-suites") { id => + path("application" / LongNumber / "test-suites") { id => val testSuites = persistence.getTestSuites(Id(id)) testSuites match { case Some(x) => complete(x) case None => complete(StatusCodes.NotFound) } } ~ - pathPrefix("application" / LongNumber / "test-suite" / LongNumber) { (appId, suiteId) => + path("application" / LongNumber / "test-suite" / LongNumber) { (appId, suiteId) => val suite = persistence.getTestSuite(Id(appId), Id(suiteId)) suite match { case Some(x) => complete(x) case None => complete(StatusCodes.NotFound) } } ~ - pathPrefix("application" / LongNumber) { id => + path("application" / LongNumber) { id => val app = persistence.getApplication(Id(id)) app match { case Some(x) => complete(x) @@ -80,7 +80,12 @@ trait RestService { } } } ~ delete { - pathPrefix("application" / LongNumber) { id => + path("application" / LongNumber / "test-suite" / LongNumber) { (appId, suiteId) => + val r = persistence.deleteTestSuite(Id(appId), Id(suiteId)) + complete(StatusCodes.OK) + } + } ~ delete { + path("application" / LongNumber) { id => val r = persistence.deleteApplication(Id(id)) complete(StatusCodes.OK) } diff --git a/src/main/scala/de/retest/guistatemachine/persistence/Persistence.scala b/src/main/scala/de/retest/guistatemachine/persistence/Persistence.scala index 0ae3a42..ea8d2c8 100644 --- a/src/main/scala/de/retest/guistatemachine/persistence/Persistence.scala +++ b/src/main/scala/de/retest/guistatemachine/persistence/Persistence.scala @@ -80,4 +80,21 @@ class Persistence { case None => None } } + + def deleteTestSuite(applicationId: Id, testSuiteId: Id): Boolean = { + val app = getApplication(applicationId) + app match { + case Some(x) => { + val testSuites = x.testSuites + testSuites.synchronized { + if (testSuites.suites.values.contains(testSuiteId)) { + testSuites.suites.values = testSuites.suites.values - testSuiteId + true + } else { + false + } + } + } + } + } } \ No newline at end of file diff --git a/src/test/scala/de/retest/guistatemachine/RestServiceSpec.scala b/src/test/scala/de/retest/guistatemachine/RestServiceSpec.scala index 2b4dd8c..7704b2e 100644 --- a/src/test/scala/de/retest/guistatemachine/RestServiceSpec.scala +++ b/src/test/scala/de/retest/guistatemachine/RestServiceSpec.scala @@ -46,6 +46,7 @@ class RestServiceSpec extends WordSpec with Matchers with ScalatestRouteTest wit Post("/create-application") ~> sut ~> check { handled shouldEqual true responseAs[Id] shouldEqual Id(0) + persistence.getApplications.apps.values.size shouldEqual 1 } } @@ -71,6 +72,7 @@ class RestServiceSpec extends WordSpec with Matchers with ScalatestRouteTest wit Post("/application/0/create-test-suite") ~> sut ~> check { handled shouldEqual true responseAs[Id] shouldEqual Id(0) + persistence.getTestSuites(Id(0)).get.suites.values.size shouldEqual 1 } } @@ -83,11 +85,21 @@ class RestServiceSpec extends WordSpec with Matchers with ScalatestRouteTest wit } } + "return status OK for the DELETE request with the path /application/0/test-suite/0" in { + Delete("/application/0/test-suite/0") ~> sut ~> check { + handled shouldEqual true + status shouldEqual StatusCodes.OK + responseAs[String] shouldEqual "OK" + persistence.getTestSuites(Id(0)).get.suites.values.size shouldEqual 0 + } + } + "return status OK for the DELETE request with the path /application/0" in { Delete("/application/0") ~> sut ~> check { handled shouldEqual true status shouldEqual StatusCodes.OK responseAs[String] shouldEqual "OK" + persistence.getApplications().apps.values.size shouldEqual 0 } } }