|
Play Framework/Scala example source code file (ResultsSpec.scala)
The ResultsSpec.scala Play Framework example source code/* * Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com> */ package play.api.mvc import org.specs2.mutable._ import play.api.libs.iteratee.{Iteratee, Enumerator} import scala.concurrent.Await import scala.concurrent.duration.Duration import java.util.concurrent.TimeUnit import scala.concurrent.ExecutionContext.Implicits._ import play.api.i18n.Lang import play.api.{FakeApplication, Play} import play.api.http.HeaderNames._ import play.api.http.Status._ object ResultsSpec extends Specification { import play.api.mvc.Results._ sequential "Result" should { "have status" in { val Result(ResponseHeader(status, _), _, _) = Ok("hello") status must be_==(200) } "support Content-Type overriding" in { val Result(ResponseHeader(_, headers), _, _) = Ok("hello").as("text/html") headers must havePair("Content-Type" -> "text/html") } "support headers manipulation" in { val Result(ResponseHeader(_, headers), _, _) = Ok("hello").as("text/html").withHeaders("Set-Cookie" -> "yes", "X-YOP" -> "1", "X-Yop" -> "2") headers.size must be_==(3) headers must havePair("Content-Type" -> "text/html") headers must havePair("Set-Cookie" -> "yes") headers must not havePair("X-YOP" -> "1") headers must havePair("X-Yop" -> "2") } "support cookies helper" in { val setCookieHeader = Cookies.encode(Seq(Cookie("session", "items"), Cookie("preferences", "blue"))) val decodedCookies = Cookies.decode(setCookieHeader).map(c => c.name -> c).toMap decodedCookies.size must be_==(2) decodedCookies("session").value must be_==("items") decodedCookies("preferences").value must be_==("blue") val newCookieHeader = Cookies.merge(setCookieHeader, Seq(Cookie("lang", "fr"), Cookie("session", "items2"))) val newDecodedCookies = Cookies.decode(newCookieHeader).map(c => c.name -> c).toMap newDecodedCookies.size must be_==(3) newDecodedCookies("session").value must be_==("items2") newDecodedCookies("preferences").value must be_==("blue") newDecodedCookies("lang").value must be_==("fr") val Result(ResponseHeader(_, headers), _, _) = Ok("hello").as("text/html") .withCookies(Cookie("session", "items"), Cookie("preferences", "blue")) .withCookies(Cookie("lang", "fr"), Cookie("session", "items2")) .discardingCookies(DiscardingCookie("logged")) val setCookies = Cookies.decode(headers("Set-Cookie")).map(c => c.name -> c).toMap setCookies.size must be_==(4) setCookies("session").value must be_==("items2") setCookies("session").maxAge must beNone setCookies("preferences").value must be_==("blue") setCookies("lang").value must be_==("fr") setCookies("logged").maxAge must beSome setCookies("logged").maxAge.get must be_<=(-86000) } "support adding a language cookie using withLang" in { implicit val app = new FakeApplication() val cookie = Cookies.decode(Ok.withLang(Lang("en-AU")).header.headers("Set-Cookie")).head cookie.name must_== Play.langCookieName cookie.value must_== "en-AU" } "support clearing a language cookie using clearingLang" in { implicit val app = new FakeApplication() val cookie = Cookies.decode(Ok.clearingLang.header.headers("Set-Cookie")).head cookie.name must_== Play.langCookieName cookie.value must_== "" } "allow discarding a cookie by deprecated names method" in { Cookies.decode(Ok.discardingCookies(DiscardingCookie("blah")).header.headers("Set-Cookie")).head.name must_== "blah" } "allow discarding multiple cookies by deprecated names method" in { val cookies = Cookies.decode(Ok.discardingCookies(DiscardingCookie("foo"), DiscardingCookie("bar")).header.headers("Set-Cookie")).map(_.name) cookies must containTheSameElementsAs(Seq("foo", "bar")) } "support sending a file with Ok status" in { val file = new java.io.File("test.tmp") file.createNewFile() val rh = Ok.sendFile(file).header file.delete() (rh.status aka "status" must_== OK) and (rh.headers.get(CONTENT_DISPOSITION) aka "disposition" must beSome("""attachment; filename="test.tmp"""")) } "support sending a file with Unauthorized status" in { val file = new java.io.File("test.tmp") file.createNewFile() val rh = Unauthorized.sendFile(file).header file.delete() (rh.status aka "status" must_== UNAUTHORIZED) and (rh.headers.get(CONTENT_DISPOSITION) aka "disposition" must beSome("""attachment; filename="test.tmp"""")) } "support sending a file inline with Unauthorized status" in { val file = new java.io.File("test.tmp") file.createNewFile() val rh = Unauthorized.sendFile(file, inline = true).header file.delete() (rh.status aka "status" must_== UNAUTHORIZED) and (rh.headers.get(CONTENT_DISPOSITION) aka "disposition" must beNone) } } "chunking enumeratee" should { "chunk a stream" in { consume(enumerator("a", "bc", "def") &> chunk) must containTheSameElementsAs(Seq( "1\r\na\r\n", "2\r\nbc\r\n", "3\r\ndef\r\n", "0\r\n\r\n" )) } "support trailers" in { consume(enumerator("a", "bc", "def") &> chunk(Some( Iteratee.consume[Array[Byte]]().map(data => Seq("Full-Data" -> new String(data))) ))) must containTheSameElementsAs(Seq( "1\r\na\r\n", "2\r\nbc\r\n", "3\r\ndef\r\n", "0\r\nFull-Data: abcdef\r\n\r\n" )) } } "dechunking enumeratee" should { "dechunk a chunked stream" in { consume(enumerator("a", "bc", "def") &> chunk &> dechunk) must containTheSameElementsAs(Seq( "a", "bc", "def" )) } "dechunk an empty stream" in { consume(enumerator("0\r\n\r\n") &> dechunk) must containTheSameElementsAs(Seq()) } "dechunk a stream with trailers" in { consume(enumerator("a", "bc", "def") &> chunk(Some( Iteratee.consume[Array[Byte]]().map(data => Seq("Full-Data" -> new String(data))) )) &> dechunk) must containTheSameElementsAs(Seq( "a", "bc", "def" )) } "dechunk a stream that is not split at chunks" in { consume(enumerator("1\r\na\r\n2\r\nbc\r\n3\r\ndef\r\n0\r\n\r\n") &> dechunk) must containTheSameElementsAs(Seq( "a", "bc", "def" )) } "dechunk a stream that is split at different places to the chunks" in { consume(enumerator( "1\r\na", "\r\n2\r\nbc\r\n3\r\nd", "ef\r\n0\r\n\r", "\n" ) &> dechunk) must containTheSameElementsAs(Seq( "a", "bc", "def" )) } } def enumerator(elems: String*) = Enumerator.enumerate(elems.map(_.getBytes)) def consume(enumerator: Enumerator[Array[Byte]]) = Await.result( enumerator |>>> Iteratee.getChunks[Array[Byte]], Duration(5, TimeUnit.SECONDS) ).map(new String(_)) } Other Play Framework source code examplesHere is a short list of links related to this Play Framework ResultsSpec.scala source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.