Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F88846750
DashboardProblemDatabaseTest.scala
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Oct 20, 23:37
Size
4 KB
Mime Type
text/x-c++
Expires
Tue, Oct 22, 23:37 (1 d, 23 h)
Engine
blob
Format
Raw Data
Handle
21822178
Attached To
R2664 SHRINE MedCo Fork
DashboardProblemDatabaseTest.scala
View Options
package net.shrine.problem
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.{BeforeAndAfter, FlatSpec, Matchers}
import slick.driver.H2Driver.api._
import scala.concurrent.duration._
/**
* Test creation, insertion, querying, and deletion of ProblemDigest values into an
* in-memory H2 database. Demonstrates proof of concept mapping of ProblemDigest
* case class into a database.
*/
class DashboardProblemDatabaseTest extends FlatSpec with BeforeAndAfter with ScalaFutures with Matchers {
implicit val timeout = 10.seconds
val connector = Problems.DatabaseConnector
val IO = connector.IO
val problemDigests = Seq(
ProblemDigest("MJPG", "01:01:01", "summary here", "description here" , <details>uh not sure</details> , 2),
ProblemDigest("wewu", "01:02:01", "coffee spill", "coffee everywhere" , <details>He chose decaf</details> , 1),
ProblemDigest("wuwu", "02:01:01", "squirrel" , "chewed all the cables", <details>Like ALL of them</details>, 0),
ProblemDigest("code", "10:01:02", "such summary", "such description" , <details>Wow</details> , 3))
before {
connector.runBlocking(IO.dropIfExists >> IO.tableExists) shouldBe false
connector.runBlocking(IO.createIfNotExists >> IO.tableExists) shouldBe true
connector.runBlocking(IO.createIfNotExists) shouldBe NoOperation
connector.runBlocking(IO.selectAll) shouldBe empty
}
after {
connector.runBlocking(IO.tableExists) shouldBe true
connector.runBlocking(IO.dropIfExists >> IO.tableExists) shouldBe false
connector.runBlocking(IO.dropIfExists) shouldBe NoOperation
}
"The Database" should "Connect without any problems" in {
// Insert the suppliers and ProblemDigests
connector.executeTransactionBlocking(IO.problems ++= problemDigests)
// Test that they are all in the table
var * = connector.runBlocking(IO.selectAll)
* should contain theSameElementsAs problemDigests
* should have length problemDigests.length
// Reset the table
connector.runBlocking(IO.resetTable >> IO.selectAll) shouldBe empty
// Run the test again
connector.executeTransactionBlocking(IO.problems += problemDigests.head,
IO.problems += problemDigests(1),
IO.problems += problemDigests(2),
IO.problems += problemDigests(3))
// Test that they are all in the table
* = connector.runBlocking(IO.selectAll)
* should contain theSameElementsAs problemDigests
* should have length problemDigests.length
// Test that the simple select and filter queries work
val filtered = connector.runBlocking(IO.problems.filter(_.codec === "code").map(_.description).result)
filtered should have length 1
filtered.head shouldBe problemDigests(3).description
// This also tests that our conversion from xml to strings works
val xml = connector.runBlocking(IO.problems.map(_.xml).result)
xml should have length problemDigests.length
xml should contain theSameElementsAs problemDigests.map(_.detailsXml.toString())
val result = connector.runBlocking(IO.sizeAndProblemDigest(2))
result._1 should have length 2
result._2 shouldBe problemDigests.length
result._1.head shouldBe problemDigests(3)
result._1(1) shouldBe problemDigests.head
val resultOverLength = connector.runBlocking(IO.sizeAndProblemDigest(10))
resultOverLength._1 should have length 4
resultOverLength._1 should contain theSameElementsAs problemDigests
connector.runBlocking(IO.problems.size.result) shouldBe problemDigests.size
val testProblem = ProblemDatabaseTestProblem(ProblemSources.Unknown)
connector.runBlocking(IO.problems.size.result) shouldBe problemDigests.size + 1
}
}
case class ProblemDatabaseTestProblem(source: ProblemSources.ProblemSource) extends AbstractProblem(source: ProblemSources.ProblemSource) {
override def summary: String = "This is a test problem! No user should ever see this."
override def description: String = "Wow, this is a nice looking problem. I mean really, just look at it."
}
Event Timeline
Log In to Comment