diff options
author | Jakob Odersky <jakob@driver.xyz> | 2018-10-09 14:37:57 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-10-09 16:19:39 -0700 |
commit | 46d7e38b4651caff2a7fb9dc9ee1aa398807db44 (patch) | |
tree | 8939ecc030442069e4938c5e59b53fa91e486c81 /core-testkit/src/main/scala/xyz/driver/core/testkit/FixtureDatabase.scala | |
parent | d858e1ca733407aeeb39d9d85edb26373443a9b9 (diff) | |
download | driver-core-d135420030afddd326c03435d9e74a2c077c23b5.tar.gz driver-core-d135420030afddd326c03435d9e74a2c077c23b5.tar.bz2 driver-core-d135420030afddd326c03435d9e74a2c077c23b5.zip |
Add testkit modulev2.0.0-M2
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() + } +} |