Skip to content

Instantly share code, notes, and snippets.

@mikegehard
Last active December 17, 2015 03:39
Test file and errors encountered when trying to run two browser based tests in the same Play test file.
package test.features
import org.specs2.mutable.Specification
import play.api.test.{Helpers, FakeApplication, WithBrowser}
import java.util.concurrent.TimeUnit
import play.api.db.DB
import slick.session.Database
import slick.jdbc.StaticQuery
import Database.threadLocalSession
import models.{BetaInvitationRequests, BetaInvitationRequest}
class BetaEmailSubmissionSpec extends Specification {
val additionalConfig = Map(
"db.default.url" -> "postgres://user:password@localhost/databaseName"
)
val app = FakeApplication(additionalConfiguration = additionalConfig)
"submitting emails" should {
"only allow email to be entered once" in new WithBrowser(webDriver = Helpers.FIREFOX, app = app) {
// TODO: Refactor this out somewhere common so you can share it
Database.forDataSource(DB.getDataSource()).withSession {
StaticQuery.updateNA("TRUNCATE beta_invitation_requests").execute()
}
browser.goTo("/")
browser.$("input[type=email]").text("mike@example.com")
browser.click("input[type=submit]")
browser.await.atMost(5, TimeUnit.SECONDS).until("[data-behavior=alert].success").hasText("Thank you for your interest. We will be in touch.")
browser.goTo("/")
browser.$("input[type=email]").text("mike@example.com")
browser.click("input[type=submit]")
browser.await.atMost(5, TimeUnit.SECONDS).until("[data-behavior=alert].error").hasText("This email has already been submitted.")
}
}
"confirming invitation request" should {
"mark invitation request as confirmed" in new WithBrowser(webDriver = Helpers.FIREFOX, app = app) {
// TODO: Refactor this out somewhere common so you can share it
Database.forDataSource(DB.getDataSource()).withSession {
StaticQuery.updateNA("TRUNCATE beta_invitation_requests").execute()
}
BetaInvitationRequests.create(
new BetaInvitationRequest(email = "mike@example.com", confirmed = false)
)
browser.goTo("/betaInvitationRequest/mike%40example.com/confirm")
browser.pageSource.contains("Beta Invitation Confirmed")
BetaInvitationRequests.forEmail("mike@example.com") must beSome.which(_.confirmed)
}
}
}
package test.features
import org.specs2.mutable.Specification
import play.api.test.{Helpers, FakeApplication, WithBrowser}
import java.util.concurrent.TimeUnit
import play.api.db.DB
import slick.session.Database
import slick.jdbc.StaticQuery
import Database.threadLocalSession
import models.{BetaInvitationRequests, BetaInvitationRequest}
class BetaEmailSubmissionSpec extends Specification {
val additionalConfig = Map(
"db.default.url" -> "postgres://user:password@localhost/databaseName"
)
"submitting emails" should {
"only allow email to be entered once" in new WithBrowser(webDriver = Helpers.FIREFOX, app = FakeApplication(additionalConfiguration = additionalConfig)) {
// TODO: Refactor this out somewhere common so you can share it
Database.forDataSource(DB.getDataSource()).withSession {
StaticQuery.updateNA("TRUNCATE beta_invitation_requests").execute()
}
browser.goTo("/")
browser.$("input[type=email]").text("mike@example.com")
browser.click("input[type=submit]")
browser.await.atMost(5, TimeUnit.SECONDS).until("[data-behavior=alert].success").hasText("Thank you for your interest. We will be in touch.")
browser.goTo("/")
browser.$("input[type=email]").text("mike@example.com")
browser.click("input[type=submit]")
browser.await.atMost(5, TimeUnit.SECONDS).until("[data-behavior=alert].error").hasText("This email has already been submitted.")
}
}
"confirming invitation request" should {
"mark invitation request as confirmed" in new WithBrowser(webDriver = Helpers.FIREFOX, app = FakeApplication(additionalConfiguration = additionalConfig)) {
// TODO: Refactor this out somewhere common so you can share it
Database.forDataSource(DB.getDataSource()).withSession {
StaticQuery.updateNA("TRUNCATE beta_invitation_requests").execute()
}
BetaInvitationRequests.create(
new BetaInvitationRequest(email = "mike@example.com", confirmed = false)
)
browser.goTo("/betaInvitationRequest/mike%40example.com/confirm")
browser.pageSource.contains("Beta Invitation Confirmed")
BetaInvitationRequests.forEmail("mike@example.com") must beSome.which(_.confirmed)
}
}
}
[info] Loading global plugins from /Users/mike/.sbt/plugins
[info] Loading project definition from /Users/mike/workspace/scalaDev/playSites/retrospectr/project
[info] Set current project to retrospectr (in build file:/Users/mike/workspace/scalaDev/playSites/retrospectr/)
[info] play - Starting application default Akka system.
[info] play - Shutdown application default Akka system.
Configuration error: Configuration error[Cannot connect to database [default]]
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:80)
at play.api.Configuration.reportError(Configuration.scala:558)
at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:251)
at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:242)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at play.api.db.BoneCPPlugin.onStart(DB.scala:242)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
at scala.collection.immutable.List.foreach(List.scala:309)
at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:63)
at play.api.Play$$anonfun$start$1.apply(Play.scala:63)
at play.api.Play$$anonfun$start$1.apply(Play.scala:63)
at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
at play.api.Play$.start(Play.scala:62)
at play.core.TestApplication.<init>(ApplicationProvider.scala:66)
at play.api.test.TestServer.start(Selenium.scala:124)
at play.api.test.Helpers$.running(Helpers.scala:54)
at play.api.test.WithBrowser.around(Specs.scala:57)
at org.specs2.mutable.Around$class.delayedInit(Around.scala:12)
at play.api.test.WithBrowser.delayedInit(Specs.scala:45)
at test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2$$anon$2.<init>(BetaEmailSubmissionSpec.scala:38)
at test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
at test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
at org.specs2.specification.FragmentsBuilder$$anon$1.asResult(FragmentsBuilder.scala:134)
at org.specs2.specification.FragmentsBuilder$$anon$1.asResult(FragmentsBuilder.scala:133)
at org.specs2.execute.AsResult$.apply(Result.scala:238)
at org.specs2.specification.Example$$anonfun$apply$1.apply(Fragment.scala:141)
at org.specs2.specification.Example$$anonfun$apply$1.apply(Fragment.scala:141)
at org.specs2.specification.Example.execute(Fragment.scala:104)
at org.specs2.specification.FragmentExecution$$anonfun$1.apply(FragmentExecution.scala:52)
at org.specs2.specification.FragmentExecution$$anonfun$1.apply(FragmentExecution.scala:52)
at org.specs2.execute.ResultExecution$class.execute(ResultExecution.scala:22)
at org.specs2.execute.ResultExecution$.execute(ResultExecution.scala:76)
at org.specs2.specification.FragmentExecution$class.executeBody(FragmentExecution.scala:28)
at org.specs2.runner.TestInterfaceConsoleReporter.executeBody(TestInterfaceRunner.scala:125)
at org.specs2.specification.FragmentExecution$class.execute(FragmentExecution.scala:52)
at org.specs2.runner.TestInterfaceConsoleReporter.execute(TestInterfaceRunner.scala:125)
at org.specs2.specification.FragmentExecution$$anonfun$executeFragment$1$$anonfun$apply$1.apply(FragmentExecution.scala:35)
at org.specs2.specification.FragmentExecution$$anonfun$executeFragment$1$$anonfun$apply$1.apply(FragmentExecution.scala:35)
at org.specs2.control.Exceptions$class.catchAllOr(Exceptions.scala:54)
at org.specs2.control.Exceptions$.catchAllOr(Exceptions.scala:109)
at org.specs2.specification.FragmentExecution$$anonfun$executeFragment$1.apply(FragmentExecution.scala:35)
at org.specs2.specification.FragmentExecution$$anonfun$executeFragment$1.apply(FragmentExecution.scala:35)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$org$specs2$reporter$DefaultExecutionStrategy$$executeSequence$1.apply(ExecutionStrategy.scala:99)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$org$specs2$reporter$DefaultExecutionStrategy$$executeSequence$1.apply(ExecutionStrategy.scala:99)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at org.specs2.reporter.DefaultExecutionStrategy$class.org$specs2$reporter$DefaultExecutionStrategy$$executeSequence(ExecutionStrategy.scala:99)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$execute$1$$anonfun$2.apply(ExecutionStrategy.scala:43)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$execute$1$$anonfun$2.apply(ExecutionStrategy.scala:41)
at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:144)
at scala.collection.TraversableOnce$$anonfun$foldLeft$1.apply(TraversableOnce.scala:144)
at scala.collection.GenTraversableViewLike$Mapped$$anonfun$foreach$2.apply(GenTraversableViewLike.scala:81)
at scala.collection.Iterator$class.foreach(Iterator.scala:727)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1156)
at scala.collection.IterableViewLike$Transformed$class.foreach(IterableViewLike.scala:42)
at scala.collection.SeqViewLike$AbstractTransformed.foreach(SeqViewLike.scala:43)
at scala.collection.GenTraversableViewLike$Appended$class.foreach(GenTraversableViewLike.scala:99)
at scala.collection.SeqViewLike$$anon$2.foreach(SeqViewLike.scala:77)
at scala.collection.GenTraversableViewLike$Mapped$class.foreach(GenTraversableViewLike.scala:80)
at scala.collection.SeqViewLike$$anon$3.foreach(SeqViewLike.scala:78)
at scala.collection.TraversableOnce$class.foldLeft(TraversableOnce.scala:144)
at scala.collection.SeqViewLike$AbstractTransformed.foldLeft(SeqViewLike.scala:43)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$execute$1.apply(ExecutionStrategy.scala:41)
at org.specs2.reporter.DefaultExecutionStrategy$$anonfun$execute$1.apply(ExecutionStrategy.scala:38)
at org.specs2.internal.scalaz.syntax.IdOps$class.$bar$greater(IdOps.scala:15)
at org.specs2.internal.scalaz.syntax.ToIdOps$$anon$1.$bar$greater(IdOps.scala:68)
at org.specs2.reporter.AllExporting$class.report(AllExporting.scala:15)
at org.specs2.runner.TestInterfaceConsoleReporter.report(TestInterfaceRunner.scala:125)
at org.specs2.runner.TestInterfaceRunner.runSpecification(TestInterfaceRunner.scala:61)
at org.specs2.runner.TestInterfaceRunner.run(TestInterfaceRunner.scala:54)
at sbt.ForkMain$Run.runTests(ForkMain.java:157)
at sbt.ForkMain$Run.run(ForkMain.java:169)
at sbt.ForkMain.main(ForkMain.java:84)
[info] BetaEmailSubmissionSpec
[info]
[info] submitting emails should
[info] + only allow email to be entered once
[info]
[info] confirming invitation request should
[error] ! mark invitation request as confirmed
[error] RuntimeException: Configuration error: Configuration error[Cannot connect to database [default]] (Helpers.scala:54)
[error] play.api.test.TestServer.start(Selenium.scala:128)
[error] play.api.test.Helpers$.running(Helpers.scala:54)
[error] play.api.test.WithBrowser.around(Specs.scala:57)
[error] play.api.test.WithBrowser.delayedInit(Specs.scala:45)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2$$anon$2.<init>(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[error] play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:80)
[error] play.api.Configuration.reportError(Configuration.scala:558)
[error] play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:251)
[error] play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:242)
[error] play.api.db.BoneCPPlugin.onStart(DB.scala:242)
[error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply(Play.scala:63)
[error] play.utils.Threads$.withContextClassLoader(Threads.scala:18)
[error] play.api.Play$.start(Play.scala:62)
[error] play.core.TestApplication.<init>(ApplicationProvider.scala:66)
[error] play.api.test.TestServer.start(Selenium.scala:124)
[error] play.api.test.Helpers$.running(Helpers.scala:54)
[error] play.api.test.WithBrowser.around(Specs.scala:57)
[error] play.api.test.WithBrowser.delayedInit(Specs.scala:45)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2$$anon$2.<init>(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[error] Configuration error[Cannot connect to database [default]]
[error] play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:80)
[error] play.api.Configuration.reportError(Configuration.scala:558)
[error] play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:251)
[error] play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:242)
[error] play.api.db.BoneCPPlugin.onStart(DB.scala:242)
[error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply(Play.scala:63)
[error] play.api.Play$$anonfun$start$1.apply(Play.scala:63)
[error] play.utils.Threads$.withContextClassLoader(Threads.scala:18)
[error] play.api.Play$.start(Play.scala:62)
[error] play.core.TestApplication.<init>(ApplicationProvider.scala:66)
[error] play.api.test.TestServer.start(Selenium.scala:124)
[error] play.api.test.Helpers$.running(Helpers.scala:54)
[error] play.api.test.WithBrowser.around(Specs.scala:57)
[error] play.api.test.WithBrowser.delayedInit(Specs.scala:45)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2$$anon$2.<init>(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[error] test.features.BetaEmailSubmissionSpec$$anonfun$4$$anonfun$apply$2.apply(BetaEmailSubmissionSpec.scala:38)
[info]
[info]
[info] Total for specification BetaEmailSubmissionSpec
[info] Finished in 11 seconds, 986 ms
[info] 2 examples, 0 failure, 1 error
[info]
[error] Error: Total 2, Failed 0, Errors 1, Passed 1, Skipped 0
[error] Error during tests:
[error] test.features.BetaEmailSubmissionSpec
java.lang.RuntimeException: Tests unsuccessful
at scala.sys.package$.error(package.scala:27)
at scala.Predef$.error(Predef.scala:123)
at sbt.Tests$.showResults(Tests.scala:192)
at sbt.Defaults$$anonfun$inputTests$2$$anonfun$apply$18$$anonfun$apply$19.apply(Defaults.scala:373)
at sbt.Defaults$$anonfun$inputTests$2$$anonfun$apply$18$$anonfun$apply$19.apply(Defaults.scala:373)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
at scala.Function1$$anonfun$compose$1.apply(Function1.scala:49)
at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:41)
at sbt.std.Transform$$anon$5.work(System.scala:71)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:232)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:238)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:232)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
[error] (test:test-only) Tests unsuccessful
[error] Total time: 15 s, completed May 8, 2013 8:26:51 PM
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment