a bit more testing

This commit is contained in:
Thibault Duplessis 2013-05-06 06:26:50 -03:00
parent 224daa6ea0
commit f7265e3705
4 changed files with 74 additions and 169 deletions

View file

@ -1,7 +1,8 @@
package lila
package lila.app
package game
import game._
import lila.game._
import lila.user._
class FeaturedTest extends LilaSpec {
@ -34,14 +35,16 @@ class FeaturedTest extends LilaSpec {
}
}
val game1 = DbGame(
val game1 = Game.make(
game = chess.Game(chess.Variant.default),
whitePlayer = DbPlayer.white.copy(elo = 1600.some),
blackPlayer = DbPlayer.black,
whitePlayer = Player.white.copy(elo = 1600.some),
blackPlayer = Player.black,
ai = None,
creatorColor = chess.Color.White,
mode = chess.Mode.default,
variant = chess.Variant.default)
variant = chess.Variant.default,
source = Source.Lobby,
pgnImport = None)
val game2 = game1.copy(
clock = chess.Clock(180,0).some,

View file

@ -1,4 +1,4 @@
package lila
package lila.app
import org.specs2.mutable._
import ornicar.scalalib.test.ValidationMatchers

View file

@ -1,162 +0,0 @@
package lila
package tournament
import tournament._
import ornicar.scalalib.Random.nextString
class PairingTest extends LilaSpec {
import Pairing._
val u1 = "u1"
val u2 = "u2"
val u3 = "u3"
val u4 = "u4"
val u5 = "u5"
val u6 = "u6"
"All pair combinations" should {
//"2 elems" in {
//val elems = List(u1, u2)
//allPairCombinations(elems) must contain(List(u1 -> u2)).only
//}
"4 elems" in {
val elems = List(u1, u2, u3, u4)
allPairCombinations(elems) must contain(
List(u1 -> u2, u3 -> u4),
List(u1 -> u3, u2 -> u4),
List(u1 -> u4, u2 -> u3)).only
}
"6 elems" in {
val elems = List(u1, u2, u3, u4, u5, u6)
"size" in {
allPairCombinations(elems).size must_== 15
}
"pairings" in {
allPairCombinations(elems) must contain(
List(u1 -> u2, u3 -> u4, u5 -> u6),
List(u1 -> u2, u3 -> u5, u4 -> u6),
List(u1 -> u2, u3 -> u6, u4 -> u5),
List(u1 -> u3, u2 -> u4, u5 -> u6),
List(u1 -> u3, u2 -> u5, u4 -> u6),
List(u1 -> u3, u2 -> u6, u4 -> u5),
List(u1 -> u4, u2 -> u3, u5 -> u6),
List(u1 -> u4, u2 -> u5, u3 -> u6),
List(u1 -> u4, u2 -> u6, u3 -> u5),
List(u1 -> u4, u2 -> u3, u5 -> u6),
List(u1 -> u5, u2 -> u3, u4 -> u6),
List(u1 -> u6, u2 -> u3, u4 -> u5))
}
}
"14 elems" in {
val elems = List.fill(14)(nextString(8))
"size" in {
allPairCombinations(elems).size must_== 3 * 5 * 7 * 9 * 11 * 13
}
}
}
"Create new pairings" should {
"initial pairings" in {
"even players" in {
val users = List.fill(100)(nextString(8))
pairs(users, Nil) must have size 50
}
"odd players" in {
val users = List.fill(99)(nextString(8))
pairs(users, Nil) must have size 49
}
}
"2 players" in {
val users = List(u1, u2)
"first pairing" in {
val pairings = List[Pairing]()
pairs(users, pairings) must_== List(u1 -> u2)
}
"finished pairing" in {
val pairings = List(mate(u1, u2))
pairs(users, pairings) must_== List(u1 -> u2)
}
"started pairing" in {
val pairings = List(started(u1, u2))
pairs(users, pairings) must_== Nil
}
"finished and started pairing" in {
val pairings = List(mate(u1, u2), started(u1, u2))
pairs(users, pairings) must_== Nil
}
}
}
"3 players" should {
val users = List(u1, u2, u3)
"first pairing" in {
val pairings = List[Pairing]()
pairs(users, pairings) must beOneOf(List(u1 -> u2), List(u1 -> u3), List(u2 -> u3))
}
"finished pairing" in {
val pairings = List(mate(u1, u2))
pairs(users, pairings) must beOneOf(List(u1 -> u3), List(u2 -> u3))
}
"started pairing" in {
val pairings = List(started(u1, u2))
pairs(users, pairings) must_== Nil
}
"finished and started pairing" in {
val pairings = List(mate(u1, u2), started(u1, u3))
pairs(users, pairings) must_== Nil
}
"many finished pairings" in {
"without ambiguity" in {
val pairings = List(mate(u1, u3), mate(u1, u2))
pairs(users, pairings) must beOneOf(List(u2 -> u3), List(u1 -> u2))
}
"favor longer idle" in {
val pairings = List(mate(u2, u3), mate(u1, u3), mate(u1, u2))
pairs(users, pairings) must beOneOf(List(u1 -> u2), List(u1 -> u3))
}
}
}
"4 players" should {
val users = List(u1, u2, u3, u4)
"finished pairing" in {
"one finished" in {
val pairings = List(mate(u1, u2))
"size" in {
pairs(users, pairings) must have size 2
}
"no rematch" in {
pairs(users, pairings) must not contain(u1 -> u2)
}
}
"two finished" in {
val pairings = List(mate(u1, u2), mate(u3, u4))
"size" in {
pairs(users, pairings) must have size 2
}
"no rematch" in {
pairs(users, pairings) must beOneOf(
List(u1 -> u3, u2 -> u4),
List(u1 -> u4, u2 -> u3))
}
}
}
"started pairing" in {
val pairings = List(started(u1, u2))
pairs(users, pairings) must_== List(u3 -> u4)
}
"finished and started pairing" in {
val pairings = List(started(u3, u4), mate(u1, u2))
pairs(users, pairings) must_== Nil
}
}
private def pairs(users: List[String], pairings: Pairings): List[(String, String)] =
createNewPairings(users, pairings, users.size) map (_.usersPair) map {
case (a, b) (a < b).fold(a -> b, b -> a)
}
private def started(a: String, b: String) =
Pairing(a, b) withStatus chess.Status.Started
private def mate(a: String, b: String) =
Pairing(a, b) withStatus chess.Status.Mate
}

64
test/user/RepoTest.scala Normal file
View file

@ -0,0 +1,64 @@
package lila.app
package user
import lila.user.{ User, UserRepo }
import lila.user.tube.userTube
import lila.db.Implicits._
import lila.db.api._
import lila.db.test.WithDb
import org.specs2.mutable.Specification
import play.api.test._
import play.api.libs.json._
import org.joda.time.DateTime
import org.scala_tools.time.Imports._
final class RepoTest extends Specification {
val user = User(
id = "thibault",
username = "Thibault",
elo = 1200,
nbGames = 10,
nbRatedGames = 5,
nbWins = 5,
nbLosses = 5,
nbDraws = 0,
nbWinsH = 5,
nbLossesH = 2,
nbDrawsH = 0,
nbAi = 3,
isChatBan = false,
enabled = true,
roles = Nil,
settings = Map.empty,
bio = None,
engine = false,
toints = 0,
createdAt = DateTime.now)
import makeTimeout.large
sequential
def cleanup {
println("cleaning up...")
($remove($select.all) >> $insert(user)).await
println("cleaning up done")
}
"The user repo" should {
"idempotency" in new WithDb {
cleanup
$find.one($select(user.id)).await must_== user.some
}
"date selector" in new WithDb {
cleanup
$find.one(Json.obj(
"createdAt" -> $gt($date(user.createdAt - RichInt(1).hours))
)).await must_== user.some
}
}
}