Skip to content

Commit

Permalink
Repo error handling in request works.
Browse files Browse the repository at this point in the history
Misses an integrated test case.
  • Loading branch information
manuelkiessling committed Jan 28, 2016
1 parent dcb9f58 commit 885b194
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 9 deletions.
7 changes: 6 additions & 1 deletion api/app/controllers/Statistics.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import play.api.libs.json._
import play.api.mvc._
import repositories.Repository

import scala.util.{Success,Failure}

class Statistics(statisticsRepository: Repository[StatisticsModel, String]) extends Controller {

implicit val StatisticsWrites: Writes[StatisticsModel] = (
Expand All @@ -17,7 +19,10 @@ class Statistics(statisticsRepository: Repository[StatisticsModel, String]) exte
)(unlift(StatisticsModel.unapply))

def show(testcaseId: String, n: Int) = Action {
Ok(Json.toJson(statisticsRepository.getNById(testcaseId, n)))
statisticsRepository.getNById(testcaseId, n) match {
case Success(statistics: List[StatisticsModel]) => Ok(Json.toJson(statistics))
case Failure(ex) => InternalServerError(Json.toJson(Map("message" -> "An error occured")))
}
}

}
9 changes: 6 additions & 3 deletions api/app/repositories/CassandraRepository.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.datastax.driver.core.querybuilder.QueryBuilder._
import com.datastax.driver.core.{ResultSet, Row, Session}
import models.Model
import scala.collection.JavaConversions._
import scala.util.Try

abstract class CassandraRepository[M <: Model, I](session: Session, tablename: String, partitionKeyName: String)
extends Repository[M, I] {
Expand All @@ -20,9 +21,11 @@ abstract class CassandraRepository[M <: Model, I](session: Session, tablename: S
session.execute(selectStmt)
}

override def getNById(id: I, n: Int): List[M] = {
val rows = getNBySinglePartitionKeyValue(id, n).all().toList
rows.map(row => rowToModel(row))
override def getNById(id: I, n: Int): Try[List[M]] = {
Try {
val rows = getNBySinglePartitionKeyValue(id, n).all().toList
rows.map(row => rowToModel(row))
}
}

}
4 changes: 3 additions & 1 deletion api/app/repositories/Repository.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package repositories

import models.Model

import scala.util.Try

abstract trait Repository[M <: Model, I] {
def getNById(id: I, n: Int): List[M]
def getNById(id: I, n: Int): Try[List[M]]
}
24 changes: 20 additions & 4 deletions api/test/ApplicationSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,18 @@ import play.api.test._
import play.api.{ApplicationLoader, Environment, Mode}
import repositories.Repository

import scala.util.Try

class MockStatisticsRepository extends Repository[StatisticsModel, String] {
override def getNById(id: String, n: Int): List[StatisticsModel] = {
List(
StatisticsModel("mocked-" + id, 987, 123, 456, 789)
)
override def getNById(id: String, n: Int): Try[List[StatisticsModel]] = {
Try {
id match {
case "testcaseWithFailure" => throw new Exception("blubb")
case id => List(
StatisticsModel("mocked-" + id, 987, 123, 456, 789)
)
}
}
}
}

Expand Down Expand Up @@ -71,6 +78,15 @@ class ApplicationSpec extends PlaySpec with OneAppPerSuite {
|"numberOf500":789}]
|""".stripMargin.replace("\n", "")
}

"return a JSON object with an error message if there is a problem with the repository" in {
val Some(response) = route(FakeRequest(GET, "/testcases/testcaseWithFailure/statistics/latest/?n=1"))

status(response) mustBe INTERNAL_SERVER_ERROR
contentType(response) mustBe Some("application/json")
charset(response) mustBe Some("utf-8")
contentAsString(response) mustBe """{"message":"An error occured"}"""
}
}

}

0 comments on commit 885b194

Please sign in to comment.