diff options
author | Kseniya Tomskikh <ktomskikh@driver.xyz> | 2018-10-17 17:02:58 +0800 |
---|---|---|
committer | Kseniya Tomskikh <ktomskikh@driver.xyz> | 2018-10-17 17:02:58 +0800 |
commit | 95c3aeecd7e6ad04ce8d216c09e779f5ca38aa6a (patch) | |
tree | dfc94f20d00c84f9dde120f065bfc9298bdff0dc /core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala | |
parent | f5d0b038457ed9d01687f0949e22e08a6b116066 (diff) | |
parent | a43556851bf986b81351fc9f1ae5ba51bf21dc47 (diff) | |
download | driver-core-95c3aeecd7e6ad04ce8d216c09e779f5ca38aa6a.tar.gz driver-core-95c3aeecd7e6ad04ce8d216c09e779f5ca38aa6a.tar.bz2 driver-core-95c3aeecd7e6ad04ce8d216c09e779f5ca38aa6a.zip |
Merge branch 'master' into kseniya/typized-idkseniya/typized-id
Diffstat (limited to 'core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala')
-rw-r--r-- | core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala b/core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala new file mode 100644 index 0000000..aa07668 --- /dev/null +++ b/core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala @@ -0,0 +1,60 @@ +package xyz.driver.core.testkit + +import java.nio.file.{Files, Path} + +import scala.concurrent.Await +import scala.concurrent.duration._ + +import org.scalatest.{BeforeAndAfterEach, Suite} +import slick.basic.BasicProfile +import slick.jdbc.JdbcProfile +import slick.relational.RelationalProfile + +trait FixtureDatabase[P <: BasicProfile] { self: Suite => + val profile: P + val database: P#Backend#DatabaseDef +} + +trait CreateAndDropSchemaForEach[P <: RelationalProfile] extends BeforeAndAfterEach { + self: Suite with FixtureDatabase[P] => + import profile.api._ + def schema: profile.SchemaDescription + + override protected def beforeEach() = { + Await.result(database.run(schema.create), 5.seconds) + super.beforeEach() + } + + override protected def afterEach() = { + try super.afterEach() + finally Await.result(database.run(schema.drop), 5.seconds) + } +} + +trait TruncateSchemaAfterEach[P <: RelationalProfile] extends BeforeAndAfterEach { + self: Suite with FixtureDatabase[P] => + import profile.api._ + + def schema: profile.SchemaDescription + + override protected def afterEach() = { + try super.afterEach() + finally Await.result(database.run(schema.truncate), 5.seconds) + } +} + +trait InsertBeforeEach[P <: JdbcProfile] extends BeforeAndAfterEach { self: Suite with FixtureDatabase[P] => + import profile.api._ + + val insertsFiles: Set[Path] + + def insertTestData(insertsFile: Path): DBIO[Int] = { + val rawInserts = new String(Files.readAllBytes(insertsFile), "UTF-8") + sql"#$rawInserts".asUpdate + } + + override protected def beforeEach(): Unit = { + concurrent.Await.result(database.run(DBIO.sequence(insertsFiles.toList.map(insertTestData))), 30.seconds) + super.beforeEach() + } +} |