aboutsummaryrefslogtreecommitdiff
path: root/src/test/scala/xyz/driver/pdsuicommon/Mocks.scala
blob: 51d39e592b9601f462234ee661e80bc9b24bf232 (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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package xyz.driver.pdsuicommon

import java.io.{Closeable, PrintWriter}
import java.net.URL
import java.sql.Connection
import java.util.logging.Logger
import javax.sql.DataSource

import com.typesafe.config.ConfigFactory
import xyz.driver.pdsuicommon.db._
import xyz.driver.pdsuicommon.http.HttpFetcher

import scala.concurrent.Future

class MockDataSource extends DataSource with Closeable {
  override def getConnection: Connection = throw new NotImplementedError("MockDataSource.getConnection")
  override def getConnection(username: String, password: String): Connection = {
    throw new NotImplementedError(s"MockDataSource.getConnection($username, $password)")
  }
  override def close(): Unit                          = throw new NotImplementedError("MockDataSource.close")
  override def setLogWriter(out: PrintWriter): Unit   = throw new NotImplementedError("MockDataSource.setLogWriter")
  override def getLoginTimeout: Int                   = throw new NotImplementedError("MockDataSource.getLoginTimeout")
  override def setLoginTimeout(seconds: Int): Unit    = throw new NotImplementedError("MockDataSource.setLoginTimeout")
  override def getParentLogger: Logger                = throw new NotImplementedError("MockDataSource.getParentLogger")
  override def getLogWriter: PrintWriter              = throw new NotImplementedError("MockDataSource.getLogWriter")
  override def unwrap[T](iface: Class[T]): T          = throw new NotImplementedError("MockDataSource.unwrap")
  override def isWrapperFor(iface: Class[_]): Boolean = throw new NotImplementedError("MockDataSource.isWrapperFor")
}

object MockMySqlContext {

  val Settings = MySqlContext.Settings(
    credentials = MySqlContext.DbCredentials(
      user = "test",
      password = "test",
      host = "localhost",
      port = 3248,
      dbName = "test",
      dbCreateFlag = false,
      dbContext = "test",
      connectionParams = "",
      url = ""
    ),
    connection = ConfigFactory.empty(),
    threadPoolSize = 10
  )
}

class MockMySqlContext() extends MySqlContext(new MockDataSource, MockMySqlContext.Settings) {
  override protected def withConnection[T](f: Connection => T): Nothing = {
    throw new NotImplementedError("MockSqlContext.withConnection")
  }
}

class MockFactory()(implicit val sqlContext: MySqlContext) {
  val MockHttpFetcher: HttpFetcher = { (url: URL) =>
    Future.successful(Array.empty[Byte])
  }
}

object MockQueryBuilder {

  type MockRunnerIn       = (SearchFilterExpr, Sorting, Option[Pagination])
  type MockRunnerOut[T]   = Seq[T]
  type MockCountRunnerOut = QueryBuilder.CountResult

  def apply[T](matcher: PartialFunction[MockRunnerIn, MockRunnerOut[T]])(
          countMatcher: PartialFunction[MockRunnerIn, MockCountRunnerOut])(
          implicit context: MySqlContext): MysqlQueryBuilder[T] = {

    val runner: QueryBuilder.Runner[T] = { parameters =>
      matcher((parameters.filter, parameters.sorting, parameters.pagination))
    }

    val countRunner: QueryBuilder.CountRunner = { parameters =>
      countMatcher((parameters.filter, parameters.sorting, parameters.pagination))
    }

    MysqlQueryBuilder[T](
      tableName = "",
      lastUpdateFieldName = Option.empty[String],
      nullableFields = Set.empty[String],
      links = Set.empty[TableLink],
      runner = runner,
      countRunner = countRunner
    )
  }
}