diff --git a/modules/db/src/main/test/WithDb.scala b/modules/db/src/main/test/WithDb.scala index c94163fefb..ede52fb36e 100644 --- a/modules/db/src/main/test/WithDb.scala +++ b/modules/db/src/main/test/WithDb.scala @@ -7,8 +7,8 @@ abstract class WithDb extends WithApplication(WithDb.fakeApp) object WithDb { - val fakeApp = FakeApplication( + lazy val fakeApp = FakeApplication( additionalPlugins = Seq("play.modules.reactivemongo.ReactiveMongoPlugin"), - additionalConfiguration = Map("mongodb.db" -> "test") + additionalConfiguration = Map("mongodb.db" -> "lila-test") ) } diff --git a/modules/db/src/main/test/WithTestColl.scala b/modules/db/src/main/test/WithTestColl.scala index be644d2e9a..3405e3d5e8 100644 --- a/modules/db/src/main/test/WithTestColl.scala +++ b/modules/db/src/main/test/WithTestColl.scala @@ -3,37 +3,25 @@ package test import Types._ -import play.api.Play -import play.api.test._ import reactivemongo.api._ +import scala.concurrent._ +import scala.concurrent.duration._ import org.specs2.execute.{ Result, AsResult } -abstract class WithTestColl(a: FakeApplication = FakeApplication()) - extends WithApplication(a) { +trait WithColl { - implicit lazy val conn = new MongoDriver connection List("localhost:27017") + def withColl[A](f: Coll ⇒ A): A = { - implicit lazy val coll: Coll = { - val db = conn("test") + implicit val ec = ExecutionContext.Implicits.global + + val timeout = 1 seconds + + val conn = new MongoDriver connection List("localhost:27017") + val db = conn("lila-test") ~ { _.drop } val coll = db("test") - coll.drop().await - coll - } - - override def around[T: AsResult](t: ⇒ T): Result = { - running(app)(AsResult(t)) - } - - private def running[T](fakeApp: FakeApplication)(t: ⇒ T): T = synchronized { - try { - Play.start(fakeApp) - t - } - finally { - conn.close() - Play.stop() - play.api.libs.ws.WS.resetClient() - } + val res = f(coll) + conn.close + res } } diff --git a/modules/db/src/test/DateTest.scala b/modules/db/src/test/DateTest.scala index b9fcaf5f28..8ea1be722a 100644 --- a/modules/db/src/test/DateTest.scala +++ b/modules/db/src/test/DateTest.scala @@ -1,7 +1,7 @@ package lila.db -import test.WithTestColl import Implicits._ +import api._ import org.specs2.specification._ import org.specs2.mutable._ @@ -13,10 +13,18 @@ import reactivemongo.api._ import reactivemongo.bson._ import org.joda.time.DateTime -class DateTest extends Specification { +class DateTest extends Specification with test.WithColl { + + case class TestEvent(id: String, on: DateTime) + + import Tube.Helpers._ + implicit val eTube: Tube[TestEvent] = Tube[TestEvent]( + reader = (__.json update readDate('on)) andThen Json.reads[TestEvent], + writer = Json.writes[TestEvent], + writeTransformer = (__.json update writeDate('on)).some + ) val date = DateTime.now - import api.Free._ import play.modules.reactivemongo.json.ImplicitBSONHandlers._ "date conversion" should { @@ -24,23 +32,36 @@ class DateTest extends Specification { val doc = JsObjectWriter.write(Json.obj( "ca" -> $gt($date(date)) )) - doc.getAsTry[BSONDocument]("ca") flatMap { gt => + doc.getAsTry[BSONDocument]("ca") flatMap { gt ⇒ gt.getAsTry[BSONDateTime]("$gt") } must_== scala.util.Success(BSONDateTime(date.getMillis)) } } - // "save and retrieve" should { + "save and retrieve" should { - // val trans = __.json update Tube.Helpers.readDate('ca) + sequential - // "JsObject" in new WithTestColl { - // (coll.insert(Json.obj("ca" -> $date(date))) >> - // coll.find(Json.obj()).one[JsObject] - // ).await flatMap (x ⇒ (x transform trans).asOpt) must beSome.like { - // case o ⇒ o \ "ca" must_== date - // } - // } + val trans = __.json update Tube.Helpers.readDate('ca) + + // "raw reactive" in { + // withColl { coll ⇒ + // (coll.insert(Json.obj("ca" -> $date(date))) >> + // coll.find(Json.obj()).one[JsObject] + // ).await flatMap (x ⇒ (x transform trans).asOpt) must beSome.like { + // case o ⇒ o \ "ca" must_== date + // } + // } + // } + "tube" in { + val event = TestEvent("test", date) + withColl { coll ⇒ + implicit val tube = eTube inColl coll + ($insert(event) >> $find.one(Json.obj())).await must beSome.like { + case TestEvent("test", d) ⇒ d must_== date + } + } + } // "BSONDocument" in new WithTestColl { // val doc = BSONDocument( // "ca" -> BSONDateTime(date.getMillis) @@ -57,5 +78,5 @@ class DateTest extends Specification { // $set("foo" -> date) must_== Json.obj( // "$set" -> Json.obj("foo" -> Json.obj("$date" -> date.getMillis))) // } - // } + } } diff --git a/modules/db/src/test/DbApiTest.scala b/modules/db/src/test/DbApiTest.scala index f892da6be6..2ee8fdb84f 100644 --- a/modules/db/src/test/DbApiTest.scala +++ b/modules/db/src/test/DbApiTest.scala @@ -11,7 +11,7 @@ import org.joda.time.DateTime class DbApiTest extends Specification { - import DbApi._ + import api._ val date = DateTime.now