|
Play Framework/Scala example source code file (Fakes.scala)
The Fakes.scala Play Framework example source code/* * Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com> */ package play.api.test import play.api.mvc._ import play.api.libs.json.JsValue import scala.concurrent.Future import xml.NodeSeq import play.core.Router import scala.runtime.AbstractPartialFunction import play.api.libs.Files.TemporaryFile /** * Fake HTTP headers implementation. * * @param data Headers data. */ case class FakeHeaders(override val data: Seq[(String, Seq[String])] = Seq.empty) extends Headers /** * Fake HTTP request implementation. * * @tparam A The body type. * @param method The request HTTP method. * @param uri The request uri. * @param headers The request HTTP headers. * @param body The request body. * @param remoteAddress The client IP. */ case class FakeRequest[A](method: String, uri: String, headers: FakeHeaders, body: A, remoteAddress: String = "127.0.0.1", version: String = "HTTP/1.1", id: Long = 666, tags: Map[String, String] = Map.empty[String, String], secure: Boolean = false) extends Request[A] { private def _copy[B]( id: Long = this.id, tags: Map[String, String] = this.tags, uri: String = this.uri, path: String = this.path, method: String = this.method, version: String = this.version, headers: FakeHeaders = this.headers, remoteAddress: String = this.remoteAddress, secure: Boolean = this.secure, body: B = this.body): FakeRequest[B] = { new FakeRequest[B]( method, uri, headers, body, remoteAddress, version, id, tags, secure ) } /** * The request path. */ lazy val path = uri.split('?').take(1).mkString /** * The request query String */ lazy val queryString: Map[String, Seq[String]] = play.core.parsers.FormUrlEncodedParser.parse(rawQueryString) /** * Constructs a new request with additional headers. Any existing headers of the same name will be replaced. */ def withHeaders(newHeaders: (String, String)*): FakeRequest[A] = { _copy(headers = FakeHeaders({ val newData = newHeaders.map { case (k, v) => (k, Seq(v)) } (Map() ++ (headers.data ++ newData)).toSeq })) } /** * Constructs a new request with additional Flash. */ def withFlash(data: (String, String)*): FakeRequest[A] = { withHeaders(play.api.http.HeaderNames.COOKIE -> Cookies.merge(headers.get(play.api.http.HeaderNames.COOKIE).getOrElse(""), Seq(Flash.encodeAsCookie(new Flash(flash.data ++ data))) ) ) } /** * Constructs a new request with additional Cookies. */ def withCookies(cookies: Cookie*): FakeRequest[A] = { withHeaders(play.api.http.HeaderNames.COOKIE -> Cookies.merge(headers.get(play.api.http.HeaderNames.COOKIE).getOrElse(""), cookies) ) } /** * Constructs a new request with additional session. */ def withSession(newSessions: (String, String)*): FakeRequest[A] = { withHeaders(play.api.http.HeaderNames.COOKIE -> Cookies.merge(headers.get(play.api.http.HeaderNames.COOKIE).getOrElse(""), Seq(Session.encodeAsCookie(new Session(session.data ++ newSessions))) ) ) } /** * Set a Form url encoded body to this request. */ def withFormUrlEncodedBody(data: (String, String)*): FakeRequest[AnyContentAsFormUrlEncoded] = { _copy(body = AnyContentAsFormUrlEncoded(play.utils.OrderPreserving.groupBy(data.toSeq)(_._1))) } def certs = Future.successful(IndexedSeq.empty) /** * Adds a JSON body to the request. */ def withJsonBody(json: JsValue): FakeRequest[AnyContentAsJson] = { _copy(body = AnyContentAsJson(json)) } /** * Adds an XML body to the request. */ def withXmlBody(xml: NodeSeq): FakeRequest[AnyContentAsXml] = { _copy(body = AnyContentAsXml(xml)) } /** * Adds a text body to the request. */ def withTextBody(text: String): FakeRequest[AnyContentAsText] = { _copy(body = AnyContentAsText(text)) } /** * Adds a raw body to the request */ def withRawBody(bytes: Array[Byte]): FakeRequest[AnyContentAsRaw] = { _copy(body = AnyContentAsRaw(RawBuffer(bytes.length, bytes))) } /** * Adds a multipart form data body to the request */ def withMultipartFormDataBody(form: MultipartFormData[TemporaryFile]) = { _copy(body = AnyContentAsMultipartFormData(form)) } /** * Adds a body to the request. */ def withBody[B](body: B): FakeRequest[B] = { _copy(body = body) } /** * Returns the current method */ def getMethod: String = method } /** * Helper utilities to build FakeRequest values. */ object FakeRequest { /** * Constructs a new GET / fake request. */ def apply(): FakeRequest[AnyContentAsEmpty.type] = { FakeRequest("GET", "/", FakeHeaders(), AnyContentAsEmpty) } /** * Constructs a new request. */ def apply(method: String, path: String): FakeRequest[AnyContentAsEmpty.type] = { FakeRequest(method, path, FakeHeaders(), AnyContentAsEmpty) } def apply(call: Call): FakeRequest[AnyContentAsEmpty.type] = { apply(call.method, call.url) } } /** * A Fake application. * * @param path The application path * @param classloader The application classloader * @param additionalPlugins Additional plugins class names loaded by this application * @param withoutPlugins Plugins class names to disable * @param additionalConfiguration Additional configuration * @param withRoutes A partial function of method name and path to a handler for handling the request */ import play.api.{ Application, WithDefaultConfiguration, WithDefaultGlobal, WithDefaultPlugins } case class FakeApplication( override val path: java.io.File = new java.io.File("."), override val classloader: ClassLoader = classOf[FakeApplication].getClassLoader, val additionalPlugins: Seq[String] = Nil, val withoutPlugins: Seq[String] = Nil, val additionalConfiguration: Map[String, _ <: Any] = Map.empty, val withGlobal: Option[play.api.GlobalSettings] = None, val withRoutes: PartialFunction[(String, String), Handler] = PartialFunction.empty) extends { override val sources = None override val mode = play.api.Mode.Test } with Application with WithDefaultConfiguration with WithDefaultGlobal with WithDefaultPlugins { override def pluginClasses = { additionalPlugins ++ super.pluginClasses.diff(withoutPlugins) } override def configuration = { super.configuration ++ play.api.Configuration.from(additionalConfiguration) } override lazy val global = withGlobal.getOrElse(super.global) override lazy val routes: Option[Router.Routes] = { val parentRoutes = loadRoutes Some(new Router.Routes() { def documentation = parentRoutes.map(_.documentation).getOrElse(Nil) // Use withRoutes first, then delegate to the parentRoutes if no route is defined val routes = new AbstractPartialFunction[RequestHeader, Handler] { override def applyOrElse[A <: RequestHeader, B >: Handler](rh: A, default: A => B) = withRoutes.applyOrElse((rh.method, rh.path), (_: (String, String)) => default(rh)) def isDefinedAt(rh: RequestHeader) = withRoutes.isDefinedAt((rh.method, rh.path)) } orElse new AbstractPartialFunction[RequestHeader, Handler] { override def applyOrElse[A <: RequestHeader, B >: Handler](rh: A, default: A => B) = parentRoutes.map(_.routes.applyOrElse(rh, default)).getOrElse(default(rh)) def isDefinedAt(x: RequestHeader) = parentRoutes.map(_.routes.isDefinedAt(x)).getOrElse(false) } def setPrefix(prefix: String) { parentRoutes.foreach(_.setPrefix(prefix)) } def prefix = parentRoutes.map(_.prefix).getOrElse("") }) } } Other Play Framework source code examplesHere is a short list of links related to this Play Framework Fakes.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.