Over a million developers have joined DZone.

Testing Frontend integration with Play 2.x (Scala)

· Java Zone

Discover how AppDynamics steps in to upgrade your performance game and prevent your enterprise from these top 10 Java performance problems, brought to you in partnership with AppDynamics.

For people in hurry here is the code and the steps.

In continuation of Play 2.x (Scala) is it a Spring MVC contender? – Introduction, in this blog, I will demonstrate how we implement a simple test to test the Web layer using TestServer. I will continue from my earlier example of Implementing Controller using Play 2.x (Scala), ScalaMock where I did the mock testing.

Refer Build.scala for build configuration.

In this blog, I will be testing the routes refer CoffeesControllerTest.scala for more details, the snippet is as below,

it("POST /coffees/Colombian/delete should return SEE_OTHER") {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
 
    val Some(result) = route(FakeRequest(POST, "/coffees/Colombian/delete"))
    status(result) should equal(SEE_OTHER)
  }
}
 
it("POST wrong url /coffees/Colombian/delete1 should return None") {
  running(FakeApplication(additionalConfiguration = inMemoryDatabase())) {
 
    val result = route(FakeRequest(POST, "/coffees/Colombian/delete1"))
    result should equal(None)
  }
}

In the next block I will show how to do end to end testing from web layer using TestServer refer IntegrationTest.scala,

class IntegrationSpec extends Specification {
 
  "Application" should {
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
        browser.pageSource must contain("Colombian")
      }
    }
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
 
        browser.pageSource must contain("Colombian")
      }
    }
 
    "work from within a browser" in {
      running(TestServer(3333), HTMLUNIT) { browser =>
 
        browser.goTo("http://localhost:3333/coffees")
        browser.pageSource must not contain("Colombian1")
      }
    }
 
  }
}

Also while testing the application from web layer, we need to populate the data in the Global.scala as below,

object Global extends GlobalSettings {
 
  override def onStart(app: Application) {
 
    lazy val database = Database.forDataSource(DB.getDataSource())
 
    database withSession {
      // Create the tables, including primary and foreign keys
      val ddl = (Suppliers.ddl ++ Coffees.ddl)
 
      ddl.create
 
      // Insert some suppliers
      Suppliers.insertAll(
        Supplier(Some(101), "Acme, Inc.", "99 Market Street", "Groundsville", "CA", "95199"),
//...
      // Insert some coffees (using JDBC's batch insert feature, if supported by the DB)
      Coffees.insertAll(
        Coffee(Some("Colombian"), 101, 799, 0, 0),
    }
  }
}

I hope this blog helped you. In the next blog I will implement simple authentication.


 

The Java Zone is brought to you in partnership with AppDynamics. AppDynamics helps you gain the fundamentals behind application performance, and implement best practices so you can proactively analyze and act on performance problems as they arise, and more specifically with your Java applications. Start a Free Trial.

Topics:

Published at DZone with permission of Krishna Prasad , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}