From fd290b2a66b4e54eba04491d1a5482b0e2d78abf Mon Sep 17 00:00:00 2001 From: kulikov Date: Wed, 29 Jul 2015 19:15:53 +0300 Subject: [PATCH] =htp: fix match headers by symbol name --- .../directives/HeaderDirectivesSpec.scala | 62 +++++++++++++++++++ .../server/directives/HeaderDirectives.scala | 4 +- 2 files changed, 64 insertions(+), 2 deletions(-) diff --git a/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/HeaderDirectivesSpec.scala b/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/HeaderDirectivesSpec.scala index 48cc6f592b..a030f1dd62 100644 --- a/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/HeaderDirectivesSpec.scala +++ b/akka-http-tests/src/test/scala/akka/http/scaladsl/server/directives/HeaderDirectivesSpec.scala @@ -53,6 +53,68 @@ class HeaderDirectivesSpec extends RoutingSpec with Inside { } } + "The headerValueByName directive" should { + lazy val route = + headerValueByName("Referer") { referer ⇒ + complete(s"The referer was $referer") + } + + "extract a header if the name is matching" in { + Get("abc") ~> RawHeader("Referer", "http://example.com") ~> route ~> check { + responseAs[String] shouldEqual "The referer was http://example.com" + } + } + + "extract a header with Symbol name" in { + lazy val symbolRoute = + headerValueByName('Referer) { referer ⇒ + complete(s"The symbol referer was $referer") + } + + Get("abc") ~> RawHeader("Referer", "http://example.com/symbol") ~> symbolRoute ~> check { + responseAs[String] shouldEqual "The symbol referer was http://example.com/symbol" + } + } + + "reject a request if no header of the given type is present" in { + Get("abc") ~> route ~> check { + inside(rejection) { + case MissingHeaderRejection("Referer") ⇒ + } + } + } + } + + "The optionalHeaderValueByName directive" should { + lazy val route = + optionalHeaderValueByName("Referer") { referer ⇒ + complete(s"The referer was $referer") + } + + "extract a header if the name is matching" in { + Get("abc") ~> RawHeader("Referer", "http://example.com") ~> route ~> check { + responseAs[String] shouldEqual "The referer was Some(http://example.com)" + } + } + + "extract a header with Symbol name" in { + lazy val symbolRoute = + optionalHeaderValueByName('Referer) { referer ⇒ + complete(s"The symbol referer was $referer") + } + + Get("abc") ~> RawHeader("Referer", "http://example.com/symbol") ~> symbolRoute ~> check { + responseAs[String] shouldEqual "The symbol referer was Some(http://example.com/symbol)" + } + } + + "extract None if no header of the given name is present" in { + Get("abc") ~> route ~> check { + responseAs[String] shouldEqual "The referer was None" + } + } + } + "The optionalHeaderValue directive" should { lazy val myHeaderValue = optionalHeaderValue { case Connection(tokens) ⇒ Some(tokens.head) diff --git a/akka-http/src/main/scala/akka/http/scaladsl/server/directives/HeaderDirectives.scala b/akka-http/src/main/scala/akka/http/scaladsl/server/directives/HeaderDirectives.scala index 42be1e0ebd..44c1ea20b8 100644 --- a/akka-http/src/main/scala/akka/http/scaladsl/server/directives/HeaderDirectives.scala +++ b/akka-http/src/main/scala/akka/http/scaladsl/server/directives/HeaderDirectives.scala @@ -43,7 +43,7 @@ trait HeaderDirectives { * Extracts the value of the first HTTP request header with the given name. * If no header with a matching name is found the request is rejected with a [[spray.routing.MissingHeaderRejection]]. */ - def headerValueByName(headerName: Symbol): Directive1[String] = headerValueByName(headerName.toString) + def headerValueByName(headerName: Symbol): Directive1[String] = headerValueByName(headerName.name) /** * Extracts the value of the HTTP request header with the given name. @@ -81,7 +81,7 @@ trait HeaderDirectives { * Extracts the value of the optional HTTP request header with the given name. */ def optionalHeaderValueByName(headerName: Symbol): Directive1[Option[String]] = - optionalHeaderValueByName(headerName.toString) + optionalHeaderValueByName(headerName.name) /** * Extracts the value of the optional HTTP request header with the given name.