aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/xyz/driver/common/BaseSuite.scala
blob: b4c3d03a926cbbc2b0fde106f8e3c00782d4fb90 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package xyz.driver.common

import java.time.{LocalDateTime, ZoneId}

import org.scalatest.FreeSpecLike
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.time.{Millis, Span}
import xyz.driver.common.db.{MysqlQueryBuilder, SearchFilterExpr, SqlContext, Transactions}
import xyz.driver.common.domain.{Email, LongId, PasswordHash, User}
import xyz.driver.common.error.UnexpectedFilterException
import xyz.driver.common.utils.DiffUtils

import scala.concurrent.ExecutionContext.Implicits._
import scala.concurrent.Future

trait BaseSuite extends FreeSpecLike with DiffUtils with ScalaFutures {

  implicit val defaultPatience = PatienceConfig(timeout = Span(1000, Millis), interval = Span(20, Millis))
  implicit val sqlContext = new MockSqlContext(global)

  def sampleUser(role: User.Role,
                 email: String = "test@example.com",
                 password: String = "123") = User(
    id = LongId(2001),
    email = Email(email),
    name = "Test",
    role = role,
    passwordHash = PasswordHash(password),
    latestActivity = Some(LocalDateTime.now(ZoneId.of("Z"))),
    deleted = None
  )

  def createMockQueryBuilder[T](isExpectedFilter: SearchFilterExpr => Boolean): MysqlQueryBuilder[T] = {
    MockQueryBuilder[T] {
      case (filter, _, _) if isExpectedFilter(filter) =>
        Future.successful(Seq.empty)
      case (filter, _, _) =>
        Future.failed(new UnexpectedFilterException(s"Filter is unexpected: $filter"))
    } {
      case _ =>
        Future.successful((0, Option.empty[LocalDateTime]))
    }
  }

  def transactions = new Transactions {
    override def run[T](f: (SqlContext) => T): Future[T] = {
      Future(f(sqlContext))
    }
  }

}