package com.danielasfregola.randomdatagenerator.utils import org.scalacheck.rng.Seed import org.specs2.mock.Mockito import org.specs2.mutable._ import org.specs2.specification.Scope class SeedDetectorSpec extends SpecificationLike with Mockito { abstract class SeedDetectorSpecContext extends Scope { val myRandomLong = scala.util.Random.nextLong def buildSeedDetector(myEnvVariable: Option[String]) = new SeedDetector { override protected lazy val envVariable = myEnvVariable override protected def randomLong = myRandomLong } } "SeedDetector" should { "when RANDOM_DATA_GENERATOR_SEED is not defined" should { "randomly select a seed value" in new SeedDetectorSpecContext { val seedDetector = buildSeedDetector(myEnvVariable = None) seedDetector.seed === Seed(myRandomLong) } } "when RANDOM_DATA_GENERATOR_SEED is defined" should { "set seed to the variable value" in new SeedDetectorSpecContext { val mySeed = "1234567" val seedDetector = buildSeedDetector(myEnvVariable = Some(mySeed)) seedDetector.seed === Seed(mySeed.toLong) } "throw exception if the variable value is not numeric" in new SeedDetectorSpecContext { val mySeed = "not-a-valid-value" val seedDetector = buildSeedDetector(myEnvVariable = Some(mySeed)) seedDetector.seed should throwA[RuntimeException] } } } }