Skip to content

Commit

Permalink
Refactor tests to use properties matchers
Browse files Browse the repository at this point in the history
Properties matchers are really nice way to check values of fields in case
classes.
  • Loading branch information
Kwestor committed Feb 16, 2015
1 parent e5d7585 commit dcb4cba
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 25 deletions.
Expand Up @@ -53,7 +53,7 @@ class DictionaryRepositoryTest extends BaseTest[Long] with LongTestUnicorn {
DictionaryRepository.deleteAll()

// then
DictionaryRepository.findAll() shouldBe 'empty
DictionaryRepository.findAll() shouldBe empty
}

}
@@ -1,7 +1,7 @@
package org.virtuslab.unicorn.repositories

import org.virtuslab.unicorn._
import org.scalatest.{ FlatSpecLike, Matchers }
import org.scalatest.{ OptionValues, FlatSpecLike, Matchers }
import org.virtuslab.unicorn.{ RollbackHelper, BaseTest }

trait AbstractUserTable {
Expand Down Expand Up @@ -37,7 +37,7 @@ trait AbstractUserTable {

}

trait UsersRepositoryTest {
trait UsersRepositoryTest extends OptionValues {
self: FlatSpecLike with Matchers with RollbackHelper[Long] with AbstractUserTable =>

import unicorn.driver.simple._
Expand All @@ -51,10 +51,14 @@ trait UsersRepositoryTest {
val userId = UsersRepository save user
val userOpt = UsersRepository findById userId

userOpt.map(_.email) shouldEqual Some(user.email)
userOpt.map(_.firstName) shouldEqual Some(user.firstName)
userOpt.map(_.lastName) shouldEqual Some(user.lastName)
userOpt.flatMap(_.id) shouldNot be(None)
userOpt shouldBe defined

userOpt.value should have(
'email(user.email),
'firstName(user.firstName),
'lastName(user.lastName)
)
userOpt.value.id shouldNot be(None)
}

it should "save and query multiple users" in rollback {
Expand All @@ -79,10 +83,12 @@ trait UsersRepositoryTest {
val userId = UsersRepository save user
val user2 = UsersRepository findExistingById userId

user2.email shouldEqual user.email
user2.firstName shouldEqual user.firstName
user2.lastName shouldEqual user.lastName
user2.id shouldNot be(None)
user2 should have(
'email(user.email),
'firstName(user.firstName),
'lastName(user.lastName)
)
user2.id shouldBe defined
}

it should "update existing user" in rollback {
Expand All @@ -98,10 +104,12 @@ trait UsersRepositoryTest {

user = UsersRepository findExistingById userId

user.email shouldEqual "test@email.com"
user.firstName shouldEqual "Jerzy"
user.lastName shouldEqual "Muller"
user.id shouldEqual Some(userId)
user should have(
'email("test@email.com"),
'firstName("Jerzy"),
'lastName("Muller"),
'id(Some(userId))
)
}

it should "query all ids" in rollback {
Expand Down Expand Up @@ -167,12 +175,15 @@ trait UsersRepositoryTest {
val id = UsersRepository save user

val idOfCopy = UsersRepository.copyAndSave(id)
val copiedUser = idOfCopy.flatMap(UsersRepository.findById).get
val copiedUser = idOfCopy.flatMap(UsersRepository.findById).value

copiedUser.id shouldNot be(user.id)
copiedUser.email shouldEqual user.email
copiedUser.firstName shouldEqual user.firstName
copiedUser.lastName shouldEqual user.lastName

copiedUser should have(
'email(user.email),
'firstName(user.firstName),
'lastName(user.lastName)
)
}

it should "delete user by id" in rollback {
Expand All @@ -188,7 +199,7 @@ trait UsersRepositoryTest {

val ids = UsersRepository saveAll users
val usersWithIds = (users zip ids).map { case (user, id) => user.copy(id = Some(id)) }
UsersRepository.findAll().size shouldEqual 3
UsersRepository.findAll() should have size users.size

UsersRepository.deleteById(ids(1))
val remainingUsers = Seq(usersWithIds.head, usersWithIds.last)
Expand All @@ -208,11 +219,11 @@ trait UsersRepositoryTest {
)

val ids = UsersRepository saveAll users
UsersRepository.findAll().size shouldEqual 3
UsersRepository.findAll() should have size users.size

UsersRepository.deleteAll()

UsersRepository.findAll() shouldEqual Seq()
UsersRepository.findAll() shouldBe empty
}

it should "create and drop table" in rollback {
Expand Down
Expand Up @@ -6,6 +6,7 @@ import play.api.test.FakeApplication

trait BasePlayTest
extends FlatSpecLike
with OptionValues
with Matchers
with BeforeAndAfterEach
with RollbackHelper[Long]
Expand Down
Expand Up @@ -32,7 +32,7 @@ class PlayCompanionTest extends BasePlayTest {
it should "have working implicit query string binder" in {
val qsb = implicitly[QueryStringBindable[UserId]]
val userId = UserId(123)
qsb.bind("id", Map("id" -> Seq("123"))).get shouldEqual Right(userId)
qsb.bind("id", Map("id" -> Seq("123"))).value shouldEqual Right(userId)
qsb.unbind("id", userId) shouldEqual "id=123"
}

Expand All @@ -49,7 +49,7 @@ class PlayCompanionTest extends BasePlayTest {
(JsPath \ "name").read[String]
)(User.apply _)

jsonUser.validate[User].get.id shouldEqual user.id
jsonUser.validate[User].get shouldEqual user

// Writes

Expand All @@ -76,7 +76,7 @@ class PlayCompanionTest extends BasePlayTest {
)

// Reads
userForm.bind(userMap).get.id shouldEqual user.id
userForm.bind(userMap).get shouldEqual user

// Writes - just check if it works without errors
userForm.fill(user)
Expand Down

0 comments on commit dcb4cba

Please sign in to comment.