Monday, April 4, 2016

Slick 3 session with rollback

Leave a Comment

I am using slick 3 and I am trying to perform some integration tests with some inserts, some code that uses the db and then I want to rollback all the insert or deletion at the end of the test itself but I cannot find any documentation about it.

Is it possible? How can I achieve it?

2 Answers

Answers 1

I can advice to drop and create table schema before and after test using BeforeAndAfter scala-test trait with next code:

def createTable(): Future[Unit] = {         db.run(DBIO.seq(           MTable.getTables.map(tables =>             if (!tables.exists(_.name.name == table.baseTableRow.tableName))               db.run(table.schema.create)           )         )) }  def dropTable(): Future[Unit] = db.run(table.schema.drop) 

Answers 2

You need to use . transactionally around the DBIOAction

eg

val a = (for {   ns <- coffees.filter(_.name.startsWith("ESPRESSO")).map(_.name).result   _ <- DBIO.seq(ns.map(n => coffees.filter(_.name === n).delete): _*) } yield ()).transactionally  val f: Future[Unit] = db.run(a) 

For more see http://slick.typesafe.com/doc/3.1.1/dbio.html#transactions-and-pinned-sessions

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment