diff --git a/src/main/scala/de/thm/arsnova/api/QuestionApi.scala b/src/main/scala/de/thm/arsnova/api/QuestionApi.scala index e97a64f7bdc118addd5a816b34f336399222bde9..56aee07b570a63a93cebee744527c16fdb19c1ac 100644 --- a/src/main/scala/de/thm/arsnova/api/QuestionApi.scala +++ b/src/main/scala/de/thm/arsnova/api/QuestionApi.scala @@ -64,5 +64,28 @@ trait QuestionApi { } } } + } ~ + pathPrefix(ApiRoutes.getRoute("session")) { + pathPrefix(IntNumber) { sessionId => + pathPrefix(ApiRoutes.getRoute("question")) { + pathEndOrSingleSlash { + get { + parameters("variant".?) { variant => + variant match { + case Some(v) => complete(QuestionService.findQuestionsBySessionIdAndVariant(sessionId, v) + .map(questionAdapter.toResources(_))) + case None => complete {QuestionService.findAllBySessionId(sessionId) + .map(questionAdapter.toResources(_))} + } + } + } ~ + post { + entity(as[Question]) { question => + complete (QuestionService.create(question.copy(sessionId = sessionId)).map(_.toJson)) + } + } + } + } + } } } diff --git a/src/test/scala/de/thm/arsnova/QuestionApiSpec.scala b/src/test/scala/de/thm/arsnova/QuestionApiSpec.scala index 487fced5b6dd9f0f0288873351672f3e117d537f..5fdaadb35804ca99d9ffeaf817e0208fcdc1e692 100644 --- a/src/test/scala/de/thm/arsnova/QuestionApiSpec.scala +++ b/src/test/scala/de/thm/arsnova/QuestionApiSpec.scala @@ -121,6 +121,22 @@ trait QuestionApiSpec extends FunSpec with Matchers with ScalaFutures with BaseS } } } + it("create question for session properly") { + val sessionId = 2 + val newFreetext = Question(None, 0, "session question", "session question content", "preparation", "freetext", + None, None, true, true, false, true, true, None, None) + val requestEntity = HttpEntity(MediaTypes.`application/json`, newFreetext.toJson.toString) + Post(s"/session/${sessionId}/question", requestEntity) ~> questionApi ~> check { + response.status should be(OK) + val newQuestionId: Future[String] = Unmarshal(response.entity).to[String] + newQuestionId.onSuccess { case newId => + val checkFreetext = newFreetext.copy(id = Some(newId.toLong), sessionId = sessionId) + Get("/question/" + newId.toString) ~> questionApi ~> check { + responseAs[JsObject] should be(questionAdapter.toResource(checkFreetext.asInstanceOf[Question])) + } + } + } + } it("update answer options properly") { val question = preparationQuestions.last val updatedAnswerOptions: Seq[AnswerOption] = question.answerOptions.get