From f4fb8903004f4541e1d624ad3b60b13ca726a069 Mon Sep 17 00:00:00 2001 From: Zach Smith Date: Tue, 7 Nov 2017 16:10:50 -0800 Subject: Add tests for CORS headers --- src/main/scala/xyz/driver/core/app/DriverApp.scala | 2 +- .../scala/xyz/driver/core/rest/DriverAppTest.scala | 57 ++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 src/test/scala/xyz/driver/core/rest/DriverAppTest.scala diff --git a/src/main/scala/xyz/driver/core/app/DriverApp.scala b/src/main/scala/xyz/driver/core/app/DriverApp.scala index 4b9fcf6..5297c90 100644 --- a/src/main/scala/xyz/driver/core/app/DriverApp.scala +++ b/src/main/scala/xyz/driver/core/app/DriverApp.scala @@ -70,7 +70,7 @@ class DriverApp(appName: String, private def extractHeader(request: HttpRequest)(headerName: String): Option[String] = request.headers.find(_.name().toLowerCase === headerName).map(_.value()) - protected def appRoute: Route = { + def appRoute: Route = { val serviceTypes = modules.flatMap(_.routeTypes) val swaggerService = swaggerOverride(serviceTypes) val swaggerRoute = swaggerService.routes ~ swaggerService.swaggerUI diff --git a/src/test/scala/xyz/driver/core/rest/DriverAppTest.scala b/src/test/scala/xyz/driver/core/rest/DriverAppTest.scala new file mode 100644 index 0000000..82cc8cd --- /dev/null +++ b/src/test/scala/xyz/driver/core/rest/DriverAppTest.scala @@ -0,0 +1,57 @@ +package xyz.driver.core.rest + +import akka.http.scaladsl.model.headers._ +import akka.http.scaladsl.model.{HttpMethods, StatusCodes} +import akka.http.scaladsl.server.Directives._ +import akka.http.scaladsl.server.Route +import akka.http.scaladsl.settings.RoutingSettings +import akka.http.scaladsl.testkit.ScalatestRouteTest +import com.typesafe.config.Config +import com.typesafe.scalalogging.Logger +import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.app.{DriverApp, Module} + +import scala.reflect.runtime.universe._ + +class DriverAppTest extends FlatSpec with ScalatestRouteTest with Matchers { + class TestRoute extends DriverRoute { + override def log: Logger = xyz.driver.core.logging.NoLogger + override def route: Route = path("api" / "v1" / "test")(post(complete("OK"))) + } + + val module: Module = new Module { + val testRoute = new TestRoute + override def route: Route = testRoute.routeWithDefaults + override def routeTypes: Seq[Type] = Seq(typeOf[TestRoute]) + override val name: String = "test-module" + } + + val app: DriverApp = new DriverApp( + appName = "test-app", + version = "0.1", + gitHash = "deadb33f", + modules = Seq(module) + ) + + val config: Config = xyz.driver.core.config.loadDefaultConfig + val routingSettings: RoutingSettings = RoutingSettings(config) + val appRoute: Route = Route.seal(app.appRoute)(routingSettings = routingSettings, rejectionHandler = DriverApp.rejectionHandler) + + "DriverApp" should "respond with the correct CORS headers for the swagger OPTIONS route" in { + Options(s"/api-docs/swagger.json") ~> appRoute ~> check { + status shouldBe StatusCodes.OK + info(response.toString()) + headers should contain(`Access-Control-Allow-Origin`(HttpOriginRange.*)) + headers should contain(`Access-Control-Allow-Methods`(HttpMethods.GET)) + } + } + + it should "respond with the correct CORS headers for the test route" in { + Options(s"/api/v1/test") ~> appRoute ~> check { + status shouldBe StatusCodes.OK + info(response.toString()) + headers should contain(`Access-Control-Allow-Origin`(HttpOriginRange.*)) + headers should contain(`Access-Control-Allow-Methods`(HttpMethods.GET, HttpMethods.POST)) + } + } +} -- cgit v1.2.3