私の最初のエラーは間違ったステータスコードを使用していました(StatusCodes.SeeOther
代わりに StatusCodes.MovedPermanently
)、2番目のエラーはURLのパス部分のみを使用していました
私の一連のテストに合格した以下のバージョン(以下を参照):
host("^(?!www).+".r) { h =>
unmatchedPath { p =>
requestUri { s =>
val r = s.withHost(s"www.$h")
redirect(r, StatusCodes.MovedPermanently)
}
}
}
これは以下のテストに合格します
"Redirect correctly" in {
"request" | "redirect" |
u("http://acme.com") ! u("http://www.acme.com") |
u("http://foo.com") ! u("http://www.foo.com") |
u("http://acme.com/search?a=1") ! u("http://www.acme.com/search?a=1") |
u("http://acme.com/search#abc") ! u("http://www.acme.com/search#abc") |
u("http://acme.com/service/") ! u("http://www.acme.com/service/") |
u("https://acme.com") ! u("https://www.acme.com") |> { (a :java.net.URI, b :java.net.URI) => {
Get(a.toString) ~> wholeRoute ~> check {
status === MovedPermanently
header("Location").get.value == b.toString
}
}
}
}