diff options
Diffstat (limited to 'src/test/scala')
-rw-r--r-- | src/test/scala/com/drivergrp/core/AuthTest.scala | 77 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/AuthTest.scala | 79 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/CoreTest.scala (renamed from src/test/scala/com/drivergrp/core/CoreTest.scala) | 16 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/FileTest.scala (renamed from src/test/scala/com/drivergrp/core/FileTest.scala) | 16 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/GeneratorsTest.scala (renamed from src/test/scala/com/drivergrp/core/GeneratorsTest.scala) | 38 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/JsonTest.scala (renamed from src/test/scala/com/drivergrp/core/JsonTest.scala) | 64 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/MessagesTest.scala (renamed from src/test/scala/com/drivergrp/core/MessagesTest.scala) | 20 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/StatsTest.scala (renamed from src/test/scala/com/drivergrp/core/StatsTest.scala) | 10 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/TestTypes.scala | 14 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/TimeTest.scala (renamed from src/test/scala/com/drivergrp/core/TimeTest.scala) | 12 |
10 files changed, 199 insertions, 147 deletions
diff --git a/src/test/scala/com/drivergrp/core/AuthTest.scala b/src/test/scala/com/drivergrp/core/AuthTest.scala deleted file mode 100644 index 42f9155..0000000 --- a/src/test/scala/com/drivergrp/core/AuthTest.scala +++ /dev/null @@ -1,77 +0,0 @@ -package com.drivergrp.core - -import com.drivergrp.core.auth._ -import akka.http.scaladsl.testkit.ScalatestRouteTest -import akka.http.scaladsl.server._ -import Directives._ -import akka.http.scaladsl.model.headers.{HttpChallenges, RawHeader} -import akka.http.scaladsl.server.AuthenticationFailedRejection.CredentialsRejected -import org.scalatest.mock.MockitoSugar -import org.scalatest.{FlatSpec, Matchers} - -import scala.concurrent.Future -import scalaz.OptionT - -class AuthTest extends FlatSpec with Matchers with MockitoSugar with ScalatestRouteTest { - - val authStatusService: AuthService[User] = new AuthService[User] { - override def authStatus(authToken: AuthToken): OptionT[Future, User] = OptionT.optionT[Future] { - Future.successful(Some(new User() { - override def id: Id[User] = Id[User](1L) - override def roles: Set[Role] = Set(PathologistRole) - })) - } - } - - import authStatusService._ - - "'authorize' directive" should "throw error is auth token is not in the request" in { - - Get("/naive/attempt") ~> - authorize(CanSignOutReport) { - case (authToken, user) => - complete("Never going to be here") - } ~> - check { - handled shouldBe false - rejections should contain(MissingHeaderRejection("WWW-Authenticate")) - } - } - - it should "throw error is authorized user is not having the requested permission" in { - - val referenceAuthToken = AuthToken(Base64("I am a pathologist's token")) - - Post("/administration/attempt").addHeader( - RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) - ) ~> - authorize(CanAssignRoles) { - case (authToken, user) => - complete("Never going to get here") - } ~> - check { - handled shouldBe false - rejections should contain( - AuthenticationFailedRejection( - CredentialsRejected, - HttpChallenges.basic("User does not have the required permission CanAssignRoles"))) - } - } - - it should "pass and retrieve the token to client code, if token is in request and user has permission" in { - - val referenceAuthToken = AuthToken(Base64("I am token")) - - Get("/valid/attempt/?a=2&b=5").addHeader( - RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value.value) - ) ~> - authorize(CanSignOutReport) { - case (authToken, user) => - complete("Alright, \"" + authToken.value.value + "\" is handled") - } ~> - check { - handled shouldBe true - responseAs[String] shouldBe "Alright, \"I am token\" is handled" - } - } -} diff --git a/src/test/scala/xyz/driver/core/AuthTest.scala b/src/test/scala/xyz/driver/core/AuthTest.scala new file mode 100644 index 0000000..f4d4d2a --- /dev/null +++ b/src/test/scala/xyz/driver/core/AuthTest.scala @@ -0,0 +1,79 @@ +package xyz.driver.core + +import akka.http.scaladsl.testkit.ScalatestRouteTest +import akka.http.scaladsl.server._ +import Directives._ +import akka.http.scaladsl.model.headers.{HttpChallenges, RawHeader} +import akka.http.scaladsl.server.AuthenticationFailedRejection.CredentialsRejected +import org.scalatest.mock.MockitoSugar +import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.auth._ +import xyz.driver.core.rest.ServiceRequestContext + +import scala.concurrent.Future +import scalaz.OptionT + +class AuthTest extends FlatSpec with Matchers with MockitoSugar with ScalatestRouteTest { + + val authStatusService: AuthService[User] = new AuthService[User] { + override def authStatus(context: ServiceRequestContext): OptionT[Future, User] = OptionT.optionT[Future] { + if (context.contextHeaders.keySet.contains(AuthService.AuthenticationTokenHeader)) { + Future.successful(Some(new User { + override def id: Id[User] = Id[User]("1") + override def roles: Set[Role] = Set(PathologistRole) + }: User)) + } else { + Future.successful(Option.empty[User]) + } + } + } + + import authStatusService._ + + "'authorize' directive" should "throw error is auth token is not in the request" in { + + Get("/naive/attempt") ~> + authorize(CanSignOutReport) { user => + complete("Never going to be here") + } ~> + check { + // handled shouldBe false + rejections should contain(ValidationRejection("Wasn't able to find authenticated user for the token provided")) + } + } + + it should "throw error is authorized user is not having the requested permission" in { + + val referenceAuthToken = AuthToken("I am a pathologist's token") + + Post("/administration/attempt").addHeader( + RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value) + ) ~> + authorize(CanAssignRoles) { user => + complete("Never going to get here") + } ~> + check { + handled shouldBe false + rejections should contain( + AuthenticationFailedRejection( + CredentialsRejected, + HttpChallenges.basic("User does not have the required permissions: CanAssignRoles"))) + } + } + + it should "pass and retrieve the token to client code, if token is in request and user has permission" in { + + val referenceAuthToken = AuthToken("I am token") + + Get("/valid/attempt/?a=2&b=5").addHeader( + RawHeader(AuthService.AuthenticationTokenHeader, referenceAuthToken.value) + ) ~> + authorize(CanSignOutReport) { user => + complete("Alright, user \"" + user.id + "\" is authorized") + } ~> + check { + handled shouldBe true + responseAs[String] shouldBe "Alright, user \"1\" is authorized" + } + } +} diff --git a/src/test/scala/com/drivergrp/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index 19e685c..3eb9eaa 100644 --- a/src/test/scala/com/drivergrp/core/CoreTest.scala +++ b/src/test/scala/xyz/driver/core/CoreTest.scala @@ -1,11 +1,11 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.ByteArrayOutputStream -import com.drivergrp.core.revision.Revision +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ +import xyz.driver.core.revision.Revision class CoreTest extends FlatSpec with Matchers with MockitoSugar { @@ -31,12 +31,12 @@ class CoreTest extends FlatSpec with Matchers with MockitoSugar { "Id" should "have equality and ordering working correctly" in { - (Id[String](1234213L) === Id[String](1234213L)) should be(true) - (Id[String](1234213L) === Id[String](213414L)) should be(false) - (Id[String](213414L) === Id[String](1234213L)) should be(false) + (Id[String]("1234213") === Id[String]("1234213")) should be(true) + (Id[String]("1234213") === Id[String]("213414")) should be(false) + (Id[String]("213414") === Id[String]("1234213")) should be(false) - Seq(Id[String](4L), Id[String](3L), Id[String](2L), Id[String](1L)).sorted should contain - theSameElementsInOrderAs(Seq(Id[String](1L), Id[String](2L), Id[String](3L), Id[String](4L))) + Seq(Id[String]("4"), Id[String]("3"), Id[String]("2"), Id[String]("1")).sorted should contain + theSameElementsInOrderAs(Seq(Id[String]("1"), Id[String]("2"), Id[String]("3"), Id[String]("4"))) } "Name" should "have equality and ordering working correctly" in { diff --git a/src/test/scala/com/drivergrp/core/FileTest.scala b/src/test/scala/xyz/driver/core/FileTest.scala index 2c9c2c9..57af1c2 100644 --- a/src/test/scala/com/drivergrp/core/FileTest.scala +++ b/src/test/scala/xyz/driver/core/FileTest.scala @@ -1,15 +1,15 @@ -package com.drivergrp.core +package xyz.driver.core import java.io.File import java.nio.file.Paths import com.amazonaws.services.s3.AmazonS3 import com.amazonaws.services.s3.model._ -import com.drivergrp.core.file.{FileSystemStorage, S3Storage} +import org.mockito.Matchers._ +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ -import org.mockito.Matchers._ +import xyz.driver.core.file.{FileSystemStorage, S3Storage} import scala.concurrent.Await import scala.concurrent.duration._ @@ -44,14 +44,14 @@ class FileTest extends FlatSpec with Matchers with MockitoSugar { false, // after file is uploaded it contains this one file (one page) false) // after file is deleted it is empty (zero pages) again when(s3ResultsMock.getObjectSummaries).thenReturn( - // before file created it is empty, `getObjectSummaries` is never called - List[S3ObjectSummary](s3ObjectSummaryMock).asJava, // after file is uploaded it contains this one file - List.empty[S3ObjectSummary].asJava) // after file is deleted it is empty again + // before file created it is empty, `getObjectSummaries` is never called + List[S3ObjectSummary](s3ObjectSummaryMock).asJava, // after file is uploaded it contains this one file + List.empty[S3ObjectSummary].asJava) // after file is deleted it is empty again val s3ObjectMetadataMock = mock[ObjectMetadata] val amazonS3Mock = mock[AmazonS3] when(amazonS3Mock.listObjectsV2(any[ListObjectsV2Request]())).thenReturn(s3ResultsMock) - when(amazonS3Mock.putObject(testBucket, testFilePath.toString, sourceTestFile)).thenReturn(s3PutMock) + when(amazonS3Mock.putObject(testBucket.value, testFilePath.toString, sourceTestFile)).thenReturn(s3PutMock) when(amazonS3Mock.getObject(any[GetObjectRequest](), any[File]())).thenReturn(s3ObjectMetadataMock) val s3Storage = new S3Storage(amazonS3Mock, testBucket, scala.concurrent.ExecutionContext.global) diff --git a/src/test/scala/com/drivergrp/core/GeneratorsTest.scala b/src/test/scala/xyz/driver/core/GeneratorsTest.scala index 631149e..4ec73ec 100644 --- a/src/test/scala/com/drivergrp/core/GeneratorsTest.scala +++ b/src/test/scala/xyz/driver/core/GeneratorsTest.scala @@ -1,4 +1,4 @@ -package com.drivergrp.core +package xyz.driver.core import org.scalatest.{Assertions, FlatSpec, Matchers} @@ -11,25 +11,25 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { val generatedId2 = nextId[String]() val generatedId3 = nextId[Long]() - generatedId1 should be >= 0L - generatedId2 should be >= 0L - generatedId3 should be >= 0L + generatedId1.length should be >= 0 + generatedId2.length should be >= 0 + generatedId3.length should be >= 0 generatedId1 should not be generatedId2 generatedId2 should !==(generatedId3) } it should "be able to generate com.drivergrp.core.Id identifiers with max value" in { - val generatedLimitedId1 = nextId[String](10000) - val generatedLimitedId2 = nextId[String](1000) - val generatedLimitedId3 = nextId[Long](2000) + val generatedLimitedId1 = nextId[String](5) + val generatedLimitedId2 = nextId[String](4) + val generatedLimitedId3 = nextId[Long](3) - generatedLimitedId1 should be >= 0L - generatedLimitedId1 should be < 10000L - generatedLimitedId2 should be >= 0L - generatedLimitedId2 should be < 1000L - generatedLimitedId3 should be >= 0L - generatedLimitedId3 should be < 2000L + generatedLimitedId1.length should be >= 0 + generatedLimitedId1.length should be < 6 + generatedLimitedId2.length should be >= 0 + generatedLimitedId2.length should be < 5 + generatedLimitedId3.length should be >= 0 + generatedLimitedId3.length should be < 4 generatedLimitedId1 should not be generatedLimitedId2 generatedLimitedId2 should !==(generatedLimitedId3) } @@ -37,11 +37,11 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { it should "be able to generate com.drivergrp.core.Name names" in { nextName[String]() should not be nextName[String]() - nextName[String]().length should be >= 0 + nextName[String]().value.length should be >= 0 val fixedLengthName = nextName[String](10) fixedLengthName.length should be <= 10 - assert(!fixedLengthName.exists(_.isControl)) + assert(!fixedLengthName.value.exists(_.isControl)) } it should "be able to generate proper UUIDs" in { @@ -82,11 +82,11 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { val generatedPair = nextPair(nextId[Int](), nextName[Int]()) - generatedPair._1 should be > 0L + generatedPair._1.length should be > 0 generatedPair._2.length should be > 0 nextPair(nextId[Int](), nextName[Int]()) should not be - nextPair(nextId[Int](), nextName[Int]()) + nextPair(nextId[Int](), nextName[Int]()) } it should "be able to generate a triad of two generated values" in { @@ -98,12 +98,12 @@ class GeneratorsTest extends FlatSpec with Matchers with Assertions { val generatedTriad = nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) - generatedTriad._1 should be > 0L + generatedTriad._1.length should be > 0 generatedTriad._2.length should be > 0 generatedTriad._3 should be >= BigDecimal(0.00) nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) should not be - nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) + nextTriad(nextId[Int](), nextName[Int](), nextBigDecimal()) } it should "be able to generate a time value" in { diff --git a/src/test/scala/com/drivergrp/core/JsonTest.scala b/src/test/scala/xyz/driver/core/JsonTest.scala index 125e97c..eb8d5d8 100644 --- a/src/test/scala/com/drivergrp/core/JsonTest.scala +++ b/src/test/scala/xyz/driver/core/JsonTest.scala @@ -1,20 +1,22 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.json.{EnumJsonFormat, ValueClassFormat} -import com.drivergrp.core.revision.Revision -import com.drivergrp.core.time.provider.SystemTimeProvider import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.json.{EnumJsonFormat, GadtJsonFormat, ValueClassFormat} +import xyz.driver.core.revision.Revision +import xyz.driver.core.time.provider.SystemTimeProvider +import spray.json._ +import xyz.driver.core.TestTypes.CustomGADT class JsonTest extends FlatSpec with Matchers { "Json format for Id" should "read and write correct JSON" in { - val referenceId = Id[String](1312L) + val referenceId = Id[String]("1312-34A") - val writtenJson = com.drivergrp.core.json.idFormat.write(referenceId) - writtenJson.prettyPrint should be("1312") + val writtenJson = json.idFormat.write(referenceId) + writtenJson.prettyPrint should be("\"1312-34A\"") - val parsedId = com.drivergrp.core.json.idFormat.read(writtenJson) + val parsedId = json.idFormat.read(writtenJson) parsedId should be(referenceId) } @@ -22,10 +24,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceName = Name[String]("Homer") - val writtenJson = com.drivergrp.core.json.nameFormat.write(referenceName) + val writtenJson = json.nameFormat.write(referenceName) writtenJson.prettyPrint should be("\"Homer\"") - val parsedName = com.drivergrp.core.json.nameFormat.read(writtenJson) + val parsedName = json.nameFormat.read(writtenJson) parsedName should be(referenceName) } @@ -33,10 +35,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceTime = new SystemTimeProvider().currentTime() - val writtenJson = com.drivergrp.core.json.timeFormat.write(referenceTime) + val writtenJson = json.timeFormat.write(referenceTime) writtenJson.prettyPrint should be("{\n \"timestamp\": " + referenceTime.millis + "\n}") - val parsedTime = com.drivergrp.core.json.timeFormat.read(writtenJson) + val parsedTime = json.timeFormat.read(writtenJson) parsedTime should be(referenceTime) } @@ -44,10 +46,10 @@ class JsonTest extends FlatSpec with Matchers { val referenceRevision = Revision[String]("037e2ec0-8901-44ac-8e53-6d39f6479db4") - val writtenJson = com.drivergrp.core.json.revisionFormat.write(referenceRevision) + val writtenJson = json.revisionFormat.write(referenceRevision) writtenJson.prettyPrint should be("\"" + referenceRevision.id + "\"") - val parsedRevision = com.drivergrp.core.json.revisionFormat.read(writtenJson) + val parsedRevision = json.revisionFormat.read(writtenJson) parsedRevision should be(referenceRevision) } @@ -98,4 +100,38 @@ class JsonTest extends FlatSpec with Matchers { parsedValue1 should be(referenceValue1) parsedValue2 should be(referenceValue2) } + + "Json format for classes GADT" should "read and write correct JSON" in { + + import CustomGADT._ + import DefaultJsonProtocol._ + implicit val case1Format = jsonFormat1(GadtCase1) + implicit val case2Format = jsonFormat1(GadtCase2) + implicit val case3Format = jsonFormat1(GadtCase3) + + val format = GadtJsonFormat.create[CustomGADT]("gadtTypeField") { + case t1: CustomGADT.GadtCase1 => "case1" + case t2: CustomGADT.GadtCase2 => "case2" + case t3: CustomGADT.GadtCase3 => "case3" + } { + case "case1" => case1Format + case "case2" => case2Format + case "case3" => case3Format + } + + val referenceValue1 = CustomGADT.GadtCase1("4") + val referenceValue2 = CustomGADT.GadtCase2("Hi!") + + val writtenJson1 = format.write(referenceValue1) + writtenJson1 should be("{\n \"field\": \"4\",\n\"gadtTypeField\": \"case1\"\n}".parseJson) + + val writtenJson2 = format.write(referenceValue2) + writtenJson2 should be("{\"field\":\"Hi!\",\"gadtTypeField\":\"case2\"}".parseJson) + + val parsedValue1 = format.read(writtenJson1) + val parsedValue2 = format.read(writtenJson2) + + parsedValue1 should be(referenceValue1) + parsedValue2 should be(referenceValue2) + } } diff --git a/src/test/scala/com/drivergrp/core/MessagesTest.scala b/src/test/scala/xyz/driver/core/MessagesTest.scala index 21fe30a..dc44ee1 100644 --- a/src/test/scala/com/drivergrp/core/MessagesTest.scala +++ b/src/test/scala/xyz/driver/core/MessagesTest.scala @@ -1,13 +1,13 @@ -package com.drivergrp.core +package xyz.driver.core import java.util.Locale -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.messages.Messages import com.typesafe.config.{ConfigException, ConfigFactory} import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.logging.Logger +import xyz.driver.core.messages.Messages import scala.collection.JavaConversions._ @@ -33,11 +33,11 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { val log = mock[Logger] val messagesConfig = ConfigFactory.parseMap( - englishLocaleMessages ++ Map( - "zh.hello" -> "你好,世界!", - "zh.greeting" -> "你好,{0}!", - "zh.greetingFullName" -> "你好,{0} {1} {2}!" - )) + englishLocaleMessages ++ Map( + "zh.hello" -> "你好,世界!", + "zh.greeting" -> "你好,{0}!", + "zh.greetingFullName" -> "你好,{0} {1} {2}!" + )) val englishMessages = Messages.messages(messagesConfig, log, Locale.US) val englishMessagesToo = Messages.messages(messagesConfig, log, Locale.ENGLISH) @@ -50,7 +50,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { englishMessagesToo("hello") should be(englishMessages("hello")) englishMessagesToo("greeting", "Homer") should be(englishMessages("greeting", "Homer")) englishMessagesToo("greetingFullName", "Homer", "J", "Simpson") should be( - englishMessages("greetingFullName", "Homer", "J", "Simpson")) + englishMessages("greetingFullName", "Homer", "J", "Simpson")) chineseMessages("hello") should be("你好,世界!") chineseMessages("greeting", "Homer") should be("你好,Homer!") @@ -63,7 +63,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages) an[ConfigException.Missing] should be thrownBy - Messages.messages(messagesConfig, log, Locale.GERMAN) + Messages.messages(messagesConfig, log, Locale.GERMAN) } it should "log a problem, when there is no message for key" in { diff --git a/src/test/scala/com/drivergrp/core/StatsTest.scala b/src/test/scala/xyz/driver/core/StatsTest.scala index c4f449b..27ea1bd 100644 --- a/src/test/scala/com/drivergrp/core/StatsTest.scala +++ b/src/test/scala/xyz/driver/core/StatsTest.scala @@ -1,11 +1,11 @@ -package com.drivergrp.core +package xyz.driver.core -import com.drivergrp.core.logging.Logger -import com.drivergrp.core.stats.LogStats -import com.drivergrp.core.time.{Time, TimeRange} +import org.mockito.Mockito._ import org.scalatest.mock.MockitoSugar import org.scalatest.{FlatSpec, Matchers} -import org.mockito.Mockito._ +import xyz.driver.core.logging.Logger +import xyz.driver.core.stats.LogStats +import xyz.driver.core.time.{Time, TimeRange} class StatsTest extends FlatSpec with Matchers with MockitoSugar { diff --git a/src/test/scala/xyz/driver/core/TestTypes.scala b/src/test/scala/xyz/driver/core/TestTypes.scala new file mode 100644 index 0000000..bb25deb --- /dev/null +++ b/src/test/scala/xyz/driver/core/TestTypes.scala @@ -0,0 +1,14 @@ +package xyz.driver.core + +object TestTypes { + + sealed trait CustomGADT { + val field: String + } + + object CustomGADT { + final case class GadtCase1(field: String) extends CustomGADT + final case class GadtCase2(field: String) extends CustomGADT + final case class GadtCase3(field: String) extends CustomGADT + } +} diff --git a/src/test/scala/com/drivergrp/core/TimeTest.scala b/src/test/scala/xyz/driver/core/TimeTest.scala index b928413..76ef42c 100644 --- a/src/test/scala/com/drivergrp/core/TimeTest.scala +++ b/src/test/scala/xyz/driver/core/TimeTest.scala @@ -1,13 +1,13 @@ -package com.drivergrp.core +package xyz.driver.core import java.util.TimeZone -import com.drivergrp.core.time.{Time, _} -import org.scalacheck.{Arbitrary, Gen} -import org.scalatest.{FlatSpec, Matchers} -import org.scalatest.prop.Checkers import org.scalacheck.Arbitrary._ import org.scalacheck.Prop.BooleanOperators +import org.scalacheck.{Arbitrary, Gen} +import org.scalatest.prop.Checkers +import org.scalatest.{FlatSpec, Matchers} +import xyz.driver.core.time.{Time, _} import scala.concurrent.duration._ @@ -56,7 +56,7 @@ class TimeTest extends FlatSpec with Matchers with Checkers { it should "have ordering defined correctly" in { Seq(Time(321L), Time(123L), Time(231L)).sorted should - contain theSameElementsInOrderAs Seq(Time(123L), Time(231L), Time(321L)) + contain theSameElementsInOrderAs Seq(Time(123L), Time(231L), Time(321L)) check { times: List[Time] => times.sorted.sliding(2).filter(_.size == 2).forall { |