diff options
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() + } +} |