org.mockito.ArgumentCaptor Scala Examples
The following examples show how to use org.mockito.ArgumentCaptor.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: PersonalDetailsControllerSpec.scala From pertax-frontend with Apache License 2.0 | 6 votes |
package controllers.address import config.ConfigDecorator import controllers.auth.requests.UserRequest import controllers.auth.{AuthJourney, WithActiveTabAction} import controllers.controllershelpers.{AddressJourneyCachingHelper, PersonalDetailsCardGenerator} import models.AddressJourneyTTLModel import models.dto.AddressPageVisitedDto import org.mockito.ArgumentCaptor import org.mockito.Mockito.{times, verify, when} import org.mockito.Matchers.{eq => meq, _} import org.scalatestplus.mockito.MockitoSugar import play.api.http.Status.OK import play.api.libs.json.Json import play.api.mvc.{MessagesControllerComponents, Request, Result} import play.api.test.FakeRequest import repositories.EditAddressLockRepository import services.{LocalSessionCache, NinoDisplayService} import uk.gov.hmrc.http.cache.client.CacheMap import uk.gov.hmrc.play.audit.http.connector.{AuditConnector, AuditResult} import uk.gov.hmrc.play.audit.model.DataEvent import uk.gov.hmrc.renderer.TemplateRenderer import util.UserRequestFixture.buildUserRequest import util.{ActionBuilderFixture, BaseSpec, Fixtures, LocalPartialRetriever} import views.html.interstitial.DisplayAddressInterstitialView import views.html.personaldetails.{AddressAlreadyUpdatedView, CannotUseServiceView, PersonalDetailsView} import scala.concurrent.{ExecutionContext, Future} class PersonalDetailsControllerSpec extends AddressBaseSpec { val ninoDisplayService = mock[NinoDisplayService] trait LocalSetup extends AddressControllerSetup { when(ninoDisplayService.getNino(any(), any())).thenReturn { Future.successful(Some(Fixtures.fakeNino)) } def currentRequest[A]: Request[A] = FakeRequest().asInstanceOf[Request[A]] def controller = new PersonalDetailsController( injected[PersonalDetailsCardGenerator], mockEditAddressLockRepository, ninoDisplayService, mockAuthJourney, addressJourneyCachingHelper, withActiveTabAction, mockAuditConnector, cc, displayAddressInterstitialView, injected[PersonalDetailsView] ) {} "Calling AddressController.onPageLoad" should { "call citizenDetailsService.fakePersonDetails and return 200" in new LocalSetup { override def sessionCacheResponse: Option[CacheMap] = Some(CacheMap("id", Map("addressPageVisitedDto" -> Json.toJson(AddressPageVisitedDto(true))))) val result = controller.onPageLoad()(FakeRequest()) status(result) shouldBe OK verify(mockLocalSessionCache, times(1)) .cache(meq("addressPageVisitedDto"), meq(AddressPageVisitedDto(true)))(any(), any(), any()) verify(mockEditAddressLockRepository, times(1)).get(any()) } "send an audit event when user arrives on personal details page" in new LocalSetup { override def sessionCacheResponse: Option[CacheMap] = Some(CacheMap("id", Map("addressPageVisitedDto" -> Json.toJson(AddressPageVisitedDto(true))))) val result = controller.onPageLoad()(FakeRequest()) val eventCaptor = ArgumentCaptor.forClass(classOf[DataEvent]) status(result) shouldBe OK verify(mockAuditConnector, times(1)).sendEvent(eventCaptor.capture())(any(), any()) } } } }
Example 2
Source File: LogAppendingCommitStrategySpec.scala From daml with Apache License 2.0 | 5 votes |
// Copyright (c) 2020 Digital Asset (Switzerland) GmbH and/or its affiliates. All rights reserved. // SPDX-License-Identifier: Apache-2.0 package com.daml.ledger.validator import org.scalatest.mockito.MockitoSugar import org.scalatest.{AsyncWordSpec, Matchers} import TestHelper._ import com.daml.ledger.participant.state.kvutils.DamlKvutils.{DamlStateKey, DamlStateValue} import com.daml.ledger.participant.state.kvutils.Envelope import com.daml.ledger.validator.LedgerStateOperations.{Key, Value} import com.google.protobuf.ByteString import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers._ import org.mockito.Mockito.{times, verify, when} import scala.concurrent.Future class LogAppendingCommitStrategySpec extends AsyncWordSpec with Matchers with MockitoSugar { "commit" should { "return index from appendToLog" in { val mockLedgerStateOperations = mock[LedgerStateOperations[Long]] val expectedIndex = 1234L when(mockLedgerStateOperations.appendToLog(any[Key](), any[Value]())) .thenReturn(Future.successful(expectedIndex)) val instance = new LogAppendingCommitStrategy[Long]( mockLedgerStateOperations, DefaultStateKeySerializationStrategy) instance .commit(aParticipantId, "a correlation ID", aLogEntryId(), aLogEntry, Map.empty, Map.empty) .map { actualIndex => verify(mockLedgerStateOperations, times(1)).appendToLog(any[Key](), any[Value]()) verify(mockLedgerStateOperations, times(0)).writeState(any[Seq[(Key, Value)]]()) actualIndex should be(expectedIndex) } } "write keys serialized according to strategy" in { val mockLedgerStateOperations = mock[LedgerStateOperations[Long]] val actualOutputStateBytesCaptor = ArgumentCaptor .forClass(classOf[Seq[(Key, Value)]]) .asInstanceOf[ArgumentCaptor[Seq[(Key, Value)]]] when(mockLedgerStateOperations.writeState(actualOutputStateBytesCaptor.capture())) .thenReturn(Future.unit) when(mockLedgerStateOperations.appendToLog(any[Key](), any[Value]())) .thenReturn(Future.successful(0L)) val mockStateKeySerializationStrategy = mock[StateKeySerializationStrategy] val expectedStateKey = ByteString.copyFromUtf8("some key") when(mockStateKeySerializationStrategy.serializeStateKey(any[DamlStateKey]())) .thenReturn(expectedStateKey) val expectedOutputStateBytes = Seq((expectedStateKey, Envelope.enclose(aStateValue))) val instance = new LogAppendingCommitStrategy[Long]( mockLedgerStateOperations, mockStateKeySerializationStrategy) instance .commit( aParticipantId, "a correlation ID", aLogEntryId(), aLogEntry, Map.empty, Map(aStateKey -> aStateValue)) .map { _: Long => verify(mockStateKeySerializationStrategy, times(1)).serializeStateKey(aStateKey) verify(mockLedgerStateOperations, times(1)).writeState(any[Seq[(Key, Value)]]()) actualOutputStateBytesCaptor.getValue should be(expectedOutputStateBytes) } } } private val aStateKey: DamlStateKey = DamlStateKey .newBuilder() .setContractId(1.toString) .build private val aStateValue: DamlStateValue = DamlStateValue.getDefaultInstance }
Example 3
Source File: Utils.scala From drizzle-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import java.util.Collections import scala.collection.JavaConverters._ import org.apache.mesos.Protos._ import org.apache.mesos.Protos.Value.{Range => MesosRange, Ranges, Scalar} import org.apache.mesos.SchedulerDriver import org.mockito.{ArgumentCaptor, Matchers} import org.mockito.Mockito._ object Utils { def createOffer( offerId: String, slaveId: String, mem: Int, cpus: Int, ports: Option[(Long, Long)] = None, gpus: Int = 0): Offer = { val builder = Offer.newBuilder() builder.addResourcesBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(mem)) builder.addResourcesBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(cpus)) ports.foreach { resourcePorts => builder.addResourcesBuilder() .setName("ports") .setType(Value.Type.RANGES) .setRanges(Ranges.newBuilder().addRange(MesosRange.newBuilder() .setBegin(resourcePorts._1).setEnd(resourcePorts._2).build())) } if (gpus > 0) { builder.addResourcesBuilder() .setName("gpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(gpus)) } builder.setId(createOfferId(offerId)) .setFrameworkId(FrameworkID.newBuilder() .setValue("f1")) .setSlaveId(SlaveID.newBuilder().setValue(slaveId)) .setHostname(s"host${slaveId}") .build() } def verifyTaskLaunched(driver: SchedulerDriver, offerId: String): List[TaskInfo] = { val captor = ArgumentCaptor.forClass(classOf[java.util.Collection[TaskInfo]]) verify(driver, times(1)).launchTasks( Matchers.eq(Collections.singleton(createOfferId(offerId))), captor.capture()) captor.getValue.asScala.toList } def createOfferId(offerId: String): OfferID = { OfferID.newBuilder().setValue(offerId).build() } def createSlaveId(slaveId: String): SlaveID = { SlaveID.newBuilder().setValue(slaveId).build() } def createExecutorId(executorId: String): ExecutorID = { ExecutorID.newBuilder().setValue(executorId).build() } def createTaskId(taskId: String): TaskID = { TaskID.newBuilder().setValue(taskId).build() } }
Example 4
Source File: MockHttp.scala From vat-api with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.vatapi.mocks import org.mockito.ArgumentCaptor import org.mockito.stubbing.OngoingStubbing import org.scalatest.Suite import play.api.libs.json.Writes import uk.gov.hmrc.http.{HeaderCarrier, HttpReads, HttpResponse} import uk.gov.hmrc.play.bootstrap.http.DefaultHttpClient import scala.concurrent.{ExecutionContext, Future} trait MockHttp extends Mock { _: Suite => val mockHttp: DefaultHttpClient = mock[DefaultHttpClient] override protected def beforeEach(): Unit = { super.beforeEach() reset(mockHttp) } private val headerCarrierCaptor = ArgumentCaptor.forClass(classOf[HeaderCarrier]) object MockHttp { def GET[T](url: String): OngoingStubbing[Future[T]] = { when(mockHttp.GET[T](eqTo(url))(any(), headerCarrierCaptor.capture(), any())) } def fetchHeaderCarrier: HeaderCarrier = headerCarrierCaptor.getValue } def setupMockHttpGet(url: String)(response: HttpResponse): OngoingStubbing[Future[HttpResponse]] = when(mockHttp.GET[HttpResponse](eqTo(url)) (any(), any(), any())).thenReturn(Future.successful(response)) def setupMockFailedHttpGet(url: String)(response: HttpResponse): OngoingStubbing[Future[HttpResponse]] = when(mockHttp.GET[HttpResponse](eqTo(url)) (any(), any(), any())).thenReturn(Future.failed(new Exception)) def setupMockHttpPost[T, R](url: String, elem: T)(response: R): OngoingStubbing[Future[R]] ={ when( mockHttp.POST[T, R](eqTo(url), eqTo[T](elem), any[Seq[(String, String)]]()) (any[Writes[T]](), any[HttpReads[R]](), any[HeaderCarrier](), any[ExecutionContext]()) ).thenReturn( Future.successful(response)) } def setupMockHttpPostString[R](url: String, elem: String)(response: R): OngoingStubbing[Future[R]] ={ when( mockHttp.POSTString[R](eqTo(url), eqTo[String](elem), any[Seq[(String, String)]]()) (any[HttpReads[R]](), headerCarrierCaptor.capture(), any[ExecutionContext]()) ).thenReturn( Future.successful(response)) } }
Example 5
Source File: CoreSpanSpec.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.core import com.comcast.money.api.{ SpanInfo, SpanHandler, SpanId } import com.comcast.money.core.handlers.TestData import org.mockito.ArgumentCaptor import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar import org.scalatest.{ Matchers, WordSpec } class CoreSpanSpec extends WordSpec with Matchers with TestData with MockitoSugar { "CoreSpan" should { "set the startTimeMillis and startTimeMicros when started" in { val underTest = CoreSpan(new SpanId(), "test", null) underTest.start() val state = underTest.info state.startTimeMicros.toInt should not be 0 state.startTimeMillis.toInt should not be 0 } "record a timer" in { val underTest = CoreSpan(new SpanId(), "test", null) underTest.startTimer("foo") underTest.stopTimer("foo") underTest.info.notes should contain key "foo" } "record a note" in { val underTest = CoreSpan(new SpanId(), "test", null) underTest.record(testLongNote) underTest.info.notes should contain value testLongNote } "set the endTimeMillis and endTimeMicros when stopped" in { val handler = mock[SpanHandler] val underTest = CoreSpan(new SpanId(), "test", handler) underTest.stop(true) val state = underTest.info state.endTimeMicros.toInt should not be 0 state.endTimeMillis.toInt should not be 0 } "invoke the span handler when stopped" in { val handler = mock[SpanHandler] val handleCaptor = ArgumentCaptor.forClass(classOf[SpanInfo]) val underTest = CoreSpan(new SpanId(), "test", handler) underTest.start() underTest.record(testLongNote) underTest.stop(true) verify(handler).handle(handleCaptor.capture()) val handledInfo = handleCaptor.getValue handledInfo.id shouldBe underTest.id handledInfo.startTimeMicros.toInt should not be 0 handledInfo.startTimeMillis.toInt should not be 0 handledInfo.endTimeMicros.toInt should not be 0 handledInfo.endTimeMillis.toInt should not be 0 handledInfo.notes should contain value testLongNote } } }
Example 6
Source File: KafkaSpanHandlerSpec.scala From money with Apache License 2.0 | 5 votes |
package com.comcast.money.kafka import com.comcast.money.api.Note import com.comcast.money.{ api, core } import com.typesafe.config.{ Config, ConfigFactory } import kafka.message.{ CompressionCodec, GZIPCompressionCodec } import kafka.producer.{ KeyedMessage, Producer } import org.mockito.ArgumentCaptor import org.mockito.Mockito._ import org.scalatest.mockito.MockitoSugar import org.scalatest.{ BeforeAndAfterAll, Matchers, WordSpec } import scala.collection.JavaConverters._ trait MockProducerMaker extends ProducerMaker { val mockProducer = mock(classOf[Producer[Array[Byte], Array[Byte]]]) def makeProducer(conf: Config): Producer[Array[Byte], Array[Byte]] = mockProducer } class TestKafkaSpanHandler extends KafkaSpanHandler { var producerWasMade = false val mockProducer = mock(classOf[Producer[Array[Byte], Array[Byte]]]) override def makeProducer(conf: Config): Producer[Array[Byte], Array[Byte]] = { producerWasMade = true mockProducer } } class KafkaSpanHandlerSpec extends WordSpec with Matchers with MockitoSugar with BeforeAndAfterAll { trait KafkaFixture { val testConfig = mock[Config] when(testConfig.getString("topic")).thenReturn("test-topic") val underTest = new TestKafkaSpanHandler() underTest.configure(testConfig) val testProducer = underTest.mockProducer val sampleData = core.CoreSpanInfo( id = new api.SpanId("foo", 1L), name = "key", appName = "app", host = "host", startTimeMillis = 1L, success = true, durationMicros = 35L, notes = Map[String, Note[_]]("what" -> api.Note.of("what", 1L), "when" -> api.Note.of("when", 2L), "bob" -> api.Note.of("bob", "craig")).asJava) } "A KafkaEmitter" should { "make a producer in configure" in new KafkaFixture { underTest.producerWasMade shouldBe true } "send a message to the producer for a span" in new KafkaFixture { underTest.handle(sampleData) val captor = ArgumentCaptor.forClass(classOf[KeyedMessage[Array[Byte], Array[Byte]]]) verify(testProducer).send(captor.capture()) } } "A ConfigDrivenProducerMaker" should { "set the properties from the config" in { val config = ConfigFactory.parseString( """ | topic = "money" | compression.codec = "1" | producer.type = "async" | batch.num.messages = "1" | message.send.max.retries = "3" | request.required.acks = "0" | metadata.broker.list = "localhost:9092" """.stripMargin) val testHandler = new KafkaSpanHandler() testHandler.configure(config) val producerConfig = testHandler.producer.config producerConfig.brokerList shouldBe "localhost:9092" producerConfig.compressionCodec shouldBe GZIPCompressionCodec producerConfig.producerType shouldBe "async" producerConfig.batchNumMessages shouldBe 1 producerConfig.messageSendMaxRetries shouldBe 3 producerConfig.requestRequiredAcks shouldBe 0 } } }
Example 7
Source File: Utils.scala From sparkoscope with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import java.util.Collections import scala.collection.JavaConverters._ import org.apache.mesos.Protos._ import org.apache.mesos.Protos.Value.{Range => MesosRange, Ranges, Scalar} import org.apache.mesos.SchedulerDriver import org.mockito.{ArgumentCaptor, Matchers} import org.mockito.Mockito._ object Utils { def createOffer( offerId: String, slaveId: String, mem: Int, cpus: Int, ports: Option[(Long, Long)] = None, gpus: Int = 0): Offer = { val builder = Offer.newBuilder() builder.addResourcesBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(mem)) builder.addResourcesBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(cpus)) ports.foreach { resourcePorts => builder.addResourcesBuilder() .setName("ports") .setType(Value.Type.RANGES) .setRanges(Ranges.newBuilder().addRange(MesosRange.newBuilder() .setBegin(resourcePorts._1).setEnd(resourcePorts._2).build())) } if (gpus > 0) { builder.addResourcesBuilder() .setName("gpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(gpus)) } builder.setId(createOfferId(offerId)) .setFrameworkId(FrameworkID.newBuilder() .setValue("f1")) .setSlaveId(SlaveID.newBuilder().setValue(slaveId)) .setHostname(s"host${slaveId}") .build() } def verifyTaskLaunched(driver: SchedulerDriver, offerId: String): List[TaskInfo] = { val captor = ArgumentCaptor.forClass(classOf[java.util.Collection[TaskInfo]]) verify(driver, times(1)).launchTasks( Matchers.eq(Collections.singleton(createOfferId(offerId))), captor.capture()) captor.getValue.asScala.toList } def createOfferId(offerId: String): OfferID = { OfferID.newBuilder().setValue(offerId).build() } def createSlaveId(slaveId: String): SlaveID = { SlaveID.newBuilder().setValue(slaveId).build() } def createExecutorId(executorId: String): ExecutorID = { ExecutorID.newBuilder().setValue(executorId).build() } def createTaskId(taskId: String): TaskID = { TaskID.newBuilder().setValue(taskId).build() } }
Example 8
Source File: HttpDeleteSpec.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.http import akka.actor.ActorSystem import com.typesafe.config.Config import org.mockito.ArgumentCaptor import org.mockito.Matchers.{any, eq => is} import org.mockito.Mockito._ import org.scalatest.concurrent.PatienceConfiguration.{Interval, Timeout} import org.scalatest.time.{Millis, Seconds, Span} import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.matchers.should.Matchers import org.scalatestplus.mockito.MockitoSugar import uk.gov.hmrc.http.hooks.HttpHook import scala.concurrent.{ExecutionContext, Future} import uk.gov.hmrc.http.HttpReads.Implicits._ class HttpDeleteSpec extends AnyWordSpecLike with Matchers with MockitoSugar with CommonHttpBehaviour { import ExecutionContext.Implicits.global class StubbedHttpDelete(doDeleteResult: Future[HttpResponse], doDeleteWithHeaderResult: Future[HttpResponse]) extends HttpDelete with ConnectionTracingCapturing { val testHook1 = mock[HttpHook] val testHook2 = mock[HttpHook] val hooks = Seq(testHook1, testHook2) override def configuration: Option[Config] = None override protected def actorSystem: ActorSystem = ActorSystem("test-actor-system") def appName: String = ??? def doDelete(url: String, headers: Seq[(String, String)])(implicit hc: HeaderCarrier, ec: ExecutionContext) = doDeleteResult } "HttpDelete" should { "be able to return plain responses" in { val response = HttpResponse(200, testBody) val testDelete = new StubbedHttpDelete(Future.successful(response), Future.successful(response)) testDelete.DELETE[HttpResponse](url, Seq("foo" -> "bar")).futureValue shouldBe response } "be able to return objects deserialised from JSON" in { val testDelete = new StubbedHttpDelete(Future.successful(HttpResponse(200, """{"foo":"t","bar":10}""")), Future.successful(HttpResponse(200, """{"foo":"t","bar":10}"""))) testDelete .DELETE[TestClass](url, Seq("foo" -> "bar")) .futureValue(Timeout(Span(2, Seconds)), Interval(Span(15, Millis))) shouldBe TestClass("t", 10) } behave like anErrorMappingHttpCall("DELETE", (url, responseF) => new StubbedHttpDelete(responseF, responseF).DELETE[HttpResponse](url, Seq("foo" -> "bar"))) behave like aTracingHttpCall("DELETE", "DELETE", new StubbedHttpDelete(defaultHttpResponse, defaultHttpResponse)) { _.DELETE[HttpResponse](url, Seq("foo" -> "bar")) } "Invoke any hooks provided" in { val dummyResponse = HttpResponse(200, testBody) val dummyResponseFuture = Future.successful(dummyResponse) val dummyHeader = Future.successful(dummyResponse) val testDelete = new StubbedHttpDelete(dummyResponseFuture, dummyHeader) testDelete.DELETE[HttpResponse](url, Seq("header" -> "foo")).futureValue val respArgCaptor1 = ArgumentCaptor.forClass(classOf[Future[HttpResponse]]) val respArgCaptor2 = ArgumentCaptor.forClass(classOf[Future[HttpResponse]]) verify(testDelete.testHook1).apply(is(url), is("DELETE"), is(None), respArgCaptor1.capture())(any(), any()) verify(testDelete.testHook2).apply(is(url), is("DELETE"), is(None), respArgCaptor2.capture())(any(), any()) // verifying directly without ArgumentCaptor didn't work as Futures were different instances // e.g. Future.successful(5) != Future.successful(5) respArgCaptor1.getValue.futureValue shouldBe dummyResponse respArgCaptor2.getValue.futureValue shouldBe dummyResponse } } }
Example 9
Source File: HttpPatchSpec.scala From http-verbs with Apache License 2.0 | 5 votes |
package uk.gov.hmrc.http import akka.actor.ActorSystem import com.typesafe.config.Config import org.mockito.ArgumentCaptor import org.mockito.Matchers.{any, eq => is} import org.mockito.Mockito._ import org.scalatestplus.mockito.MockitoSugar import org.scalatest.wordspec.AnyWordSpecLike import org.scalatest.matchers.should.Matchers import play.api.libs.json.{Json, Writes} import uk.gov.hmrc.http.hooks.{HookData, HttpHook} import scala.concurrent.{ExecutionContext, Future} import uk.gov.hmrc.http.HttpReads.Implicits._ class HttpPatchSpec extends AnyWordSpecLike with Matchers with CommonHttpBehaviour { import ExecutionContext.Implicits.global class StubbedHttpPatch(doPatchResult: Future[HttpResponse], doPatchWithHeaderResult: Future[HttpResponse]) extends HttpPatch with ConnectionTracingCapturing with MockitoSugar { val testHook1 = mock[HttpHook] val testHook2 = mock[HttpHook] val hooks = Seq(testHook1, testHook2) override def configuration: Option[Config] = None override protected def actorSystem: ActorSystem = ActorSystem("test-actor-system") def doPatch[A](url: String, body: A, headers: Seq[(String, String)])(implicit rds: Writes[A], hc: HeaderCarrier, ec: ExecutionContext) = doPatchResult } "HttpPatch" should { val testObject = TestRequestClass("a", 1) "be able to return plain responses" in { val response = HttpResponse(200, testBody) val testPatch = new StubbedHttpPatch(Future.successful(response), Future.successful(response)) testPatch.PATCH[TestRequestClass, HttpResponse](url, testObject, Seq("header" -> "foo")).futureValue shouldBe response } "be able to return objects deserialised from JSON" in { val response= Future.successful(HttpResponse(200, """{"foo":"t","bar":10}""")) val testPatch = new StubbedHttpPatch(response, response) testPatch.PATCH[TestRequestClass, TestClass](url, testObject, Seq("header" -> "foo")).futureValue should be(TestClass("t", 10)) } behave like anErrorMappingHttpCall( "PATCH", (url, responseF) => new StubbedHttpPatch(responseF, responseF).PATCH[TestRequestClass, HttpResponse](url, testObject, Seq("header" -> "foo"))) behave like aTracingHttpCall("PATCH", "PATCH", new StubbedHttpPatch(defaultHttpResponse, defaultHttpResponse)) { _.PATCH[TestRequestClass, HttpResponse](url, testObject, Seq("header" -> "foo")) } "Invoke any hooks provided" in { val dummyResponse = HttpResponse(200, testBody) val dummyResponseFuture = Future.successful(dummyResponse) val testPatch = new StubbedHttpPatch(dummyResponseFuture, dummyResponseFuture) val testJson = Json.stringify(trcreads.writes(testObject)) testPatch.PATCH[TestRequestClass, HttpResponse](url, testObject, Seq("header" -> "foo")).futureValue val respArgCaptor1 = ArgumentCaptor.forClass(classOf[Future[HttpResponse]]) val respArgCaptor2 = ArgumentCaptor.forClass(classOf[Future[HttpResponse]]) verify(testPatch.testHook1) .apply(is(url), is("PATCH"), is(Some(HookData.FromString(testJson))), respArgCaptor1.capture())(any(), any()) verify(testPatch.testHook2) .apply(is(url), is("PATCH"), is(Some(HookData.FromString(testJson))), respArgCaptor2.capture())(any(), any()) // verifying directly without ArgumentCaptor didn't work as Futures were different instances // e.g. Future.successful(5) != Future.successful(5) respArgCaptor1.getValue.futureValue shouldBe dummyResponse respArgCaptor2.getValue.futureValue shouldBe dummyResponse } } }
Example 10
Source File: SignalRefreshedTemplateSourceSpec.scala From cluster-broccoli with Apache License 2.0 | 5 votes |
package de.frosner.broccoli.templates import de.frosner.broccoli.signal.SignalManager import org.mockito.Mockito.{times, verify} import org.mockito.{ArgumentCaptor, Matchers} import org.specs2.mock.Mockito import org.specs2.mutable.Specification import sun.misc.{Signal, SignalHandler} class SignalRefreshedTemplateSourceSpec extends Specification with Mockito { "Receiving a SIGUSR2 signal" should { "update the cache" in { val signalManager = mock[SignalManager] val testTemplateSource = mock[CachedTemplateSource] val signalRefreshedTemplateSource = new SignalRefreshedTemplateSource(testTemplateSource, signalManager) val handler = ArgumentCaptor.forClass(classOf[SignalHandler]) there was one(signalManager).register(Matchers.eq(new Signal("USR2")), handler.capture()) there was no(testTemplateSource).refresh() there was no(testTemplateSource).loadTemplates() signalRefreshedTemplateSource.loadTemplates() there was no(testTemplateSource).refresh() there was one(testTemplateSource).loadTemplates() verify(testTemplateSource, times(1)).loadTemplates() handler.getValue.handle(new Signal("USR2")) there was one(testTemplateSource).refresh() there was one(testTemplateSource).loadTemplates() } } }
Example 11
Source File: LoggingSpec.scala From cluster-broccoli with Apache License 2.0 | 5 votes |
package de.frosner.broccoli import org.mockito.{ArgumentCaptor, Matchers} import org.scalacheck.Gen import org.specs2.ScalaCheck import org.specs2.mock.Mockito import org.specs2.mutable.Specification import scala.util.matching.Regex class LoggingSpec extends Specification with Mockito with ScalaCheck { import logging._ trait F[T] { def body(): T def log(message: String): Unit } "logging the execution time" should { "execute the block just once" in { val f = mock[F[Unit]] logExecutionTime("foo") { f.body() }(Function.const(())) there was one(f).body() there was no(f).log(Matchers.any[String]()) } "invokes the log function" in prop { label: String => val f = mock[F[Int]] logExecutionTime(label) { 42 }(f.log(_)) val message = ArgumentCaptor.forClass(classOf[String]) there was one(f).log(message.capture()) message.getValue must beMatching(s"${Regex.quote(label)} took \\d+ ms") there was no(f).body() }.setGen(Gen.identifier.label("label")) "returns the result of the body" in prop { ret: Int => logExecutionTime("foo") { ret }(Function.const(())) === ret } } }
Example 12
Source File: Utils.scala From multi-tenancy-spark with Apache License 2.0 | 5 votes |
package org.apache.spark.scheduler.cluster.mesos import java.util.Collections import scala.collection.JavaConverters._ import org.apache.mesos.Protos._ import org.apache.mesos.Protos.Value.{Range => MesosRange, Ranges, Scalar} import org.apache.mesos.SchedulerDriver import org.mockito.{ArgumentCaptor, Matchers} import org.mockito.Mockito._ object Utils { def createOffer( offerId: String, slaveId: String, mem: Int, cpus: Int, ports: Option[(Long, Long)] = None, gpus: Int = 0): Offer = { val builder = Offer.newBuilder() builder.addResourcesBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(mem)) builder.addResourcesBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(cpus)) ports.foreach { resourcePorts => builder.addResourcesBuilder() .setName("ports") .setType(Value.Type.RANGES) .setRanges(Ranges.newBuilder().addRange(MesosRange.newBuilder() .setBegin(resourcePorts._1).setEnd(resourcePorts._2).build())) } if (gpus > 0) { builder.addResourcesBuilder() .setName("gpus") .setType(Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(gpus)) } builder.setId(createOfferId(offerId)) .setFrameworkId(FrameworkID.newBuilder() .setValue("f1")) .setSlaveId(SlaveID.newBuilder().setValue(slaveId)) .setHostname(s"host${slaveId}") .build() } def verifyTaskLaunched(driver: SchedulerDriver, offerId: String): List[TaskInfo] = { val captor = ArgumentCaptor.forClass(classOf[java.util.Collection[TaskInfo]]) verify(driver, times(1)).launchTasks( Matchers.eq(Collections.singleton(createOfferId(offerId))), captor.capture()) captor.getValue.asScala.toList } def createOfferId(offerId: String): OfferID = { OfferID.newBuilder().setValue(offerId).build() } def createSlaveId(slaveId: String): SlaveID = { SlaveID.newBuilder().setValue(slaveId).build() } def createExecutorId(executorId: String): ExecutorID = { ExecutorID.newBuilder().setValue(executorId).build() } def createTaskId(taskId: String): TaskID = { TaskID.newBuilder().setValue(taskId).build() } }
Example 13
Source File: ZoneChangeHandlerSpec.scala From vinyldns with Apache License 2.0 | 5 votes |
package vinyldns.api.engine import cats.effect._ import org.mockito.ArgumentCaptor import org.mockito.Matchers._ import org.mockito.Mockito._ import org.scalatestplus.mockito.MockitoSugar import org.scalatest.matchers.should.Matchers import org.scalatest.wordspec.AnyWordSpec import vinyldns.core.TestZoneData.zoneChangePending import vinyldns.core.domain.record.RecordSetRepository import vinyldns.core.domain.zone.ZoneRepository.DuplicateZoneError import vinyldns.core.domain.zone._ class ZoneChangeHandlerSpec extends AnyWordSpec with Matchers with MockitoSugar { trait Fixture { val mockZoneRepo = mock[ZoneRepository] val mockChangeRepo = mock[ZoneChangeRepository] val mockRecordSetRepo = mock[RecordSetRepository] val change = zoneChangePending val test = ZoneChangeHandler(mockZoneRepo, mockChangeRepo, mockRecordSetRepo) } "ZoneChangeHandler" should { "save the zone change and zone" in new Fixture { doReturn(IO.pure(Right(change.zone))).when(mockZoneRepo).save(change.zone) doReturn(IO.pure(change)).when(mockChangeRepo).save(any[ZoneChange]) test(change).unsafeRunSync() val changeCaptor = ArgumentCaptor.forClass(classOf[ZoneChange]) verify(mockChangeRepo).save(changeCaptor.capture()) val savedChange = changeCaptor.getValue savedChange.status shouldBe ZoneChangeStatus.Synced } } "save the zone change as failed if the zone does not save" in new Fixture { doReturn(IO.pure(Left(DuplicateZoneError("message")))).when(mockZoneRepo).save(change.zone) doReturn(IO.pure(change)).when(mockChangeRepo).save(any[ZoneChange]) test(change).unsafeRunSync() val changeCaptor = ArgumentCaptor.forClass(classOf[ZoneChange]) verify(mockChangeRepo).save(changeCaptor.capture()) val savedChange = changeCaptor.getValue savedChange.status shouldBe ZoneChangeStatus.Failed savedChange.systemMessage shouldBe Some("Zone with name \"message\" already exists.") } "save a delete zone change as synced if recordset delete succeeds" in new Fixture { val deleteChange = change.copy(changeType = ZoneChangeType.Delete) doReturn(IO.pure(Right(deleteChange.zone))).when(mockZoneRepo).save(deleteChange.zone) doReturn(IO.pure(())) .when(mockRecordSetRepo) .deleteRecordSetsInZone(deleteChange.zone.id, deleteChange.zone.name) doReturn(IO.pure(deleteChange)).when(mockChangeRepo).save(any[ZoneChange]) test(deleteChange).unsafeRunSync() val changeCaptor = ArgumentCaptor.forClass(classOf[ZoneChange]) verify(mockChangeRepo).save(changeCaptor.capture()) val savedChange = changeCaptor.getValue savedChange.status shouldBe ZoneChangeStatus.Synced } "save a delete zone change as synced if recordset delete fails" in new Fixture { val deleteChange = change.copy(changeType = ZoneChangeType.Delete) doReturn(IO.pure(Right(deleteChange.zone))).when(mockZoneRepo).save(deleteChange.zone) doReturn(IO.raiseError(new Throwable("error"))) .when(mockRecordSetRepo) .deleteRecordSetsInZone(deleteChange.zone.id, deleteChange.zone.name) doReturn(IO.pure(deleteChange)).when(mockChangeRepo).save(any[ZoneChange]) test(deleteChange).unsafeRunSync() val changeCaptor = ArgumentCaptor.forClass(classOf[ZoneChange]) verify(mockChangeRepo).save(changeCaptor.capture()) val savedChange = changeCaptor.getValue savedChange.status shouldBe ZoneChangeStatus.Synced } }
Example 14
Source File: KafkaJsonProducerSpec.scala From coral with Apache License 2.0 | 5 votes |
package io.coral.lib import java.util.Properties import io.coral.lib.KafkaJsonProducer.KafkaEncoder import kafka.utils.VerifiableProperties import org.json4s.JsonAST.{JObject, JValue} import org.scalatest.{Matchers, WordSpec} import org.json4s.jackson.JsonMethods._ import kafka.producer.{ProducerConfig, KeyedMessage, Producer} import org.mockito.{Mockito, ArgumentCaptor} import org.mockito.Mockito._ import scala.collection.mutable class KafkaJsonProducerSpec extends WordSpec with Matchers { "A KafkaJsonProducer" should { "create a KafkaJsonProducer with the JsonEncoder" in { val producer = KafkaJsonProducer() assert(producer.getClass == classOf[KafkaJsonProducer[JsonEncoder]]) } "create a KafkaJsonProducer with the specified Encoder" in { val producer = KafkaJsonProducer(classOf[MyEncoder]) assert(producer.getClass == classOf[KafkaJsonProducer[MyEncoder]]) } "create a sender" in { val producer = new MyKafkaJsonProducer producer.createSender("topic", new Properties) val serializer = producer.receivedProperties.get("serializer.class") assert(serializer == classOf[MyEncoder].getName) } } "A KafkaSender" should { "send the JSON provided without a key to Kafka" in { val messageJson = """{"key1": "value1", "key2": "value2"}""" val keyedMessage = sendMessage(None, messageJson) assert(keyedMessage.topic == "test") assert(keyedMessage.hasKey == false) assert(keyedMessage.message == parse(messageJson)) } "send the JSON provided with a key to Kafka" in { val messageJson = """{"key3": "value3", "key4": "value4"}""" val keyedMessage = sendMessage(Some("key"), messageJson) assert(keyedMessage.key == "key") assert(keyedMessage.topic == "test") assert(keyedMessage.message == parse(messageJson)) } } "A JsonEncoder" should { "encode the provided json" in { val json = """{"key1": "value1"}""" val encoder = new JsonEncoder(new VerifiableProperties) val result = encoder.toBytes(parse(json)) assert(parse(new String(result, "UTF-8")) == parse(json)) } } private def sendMessage(key: Option[String], messageJson: String): KeyedMessage[String, JValue] = { val producer = Mockito.mock(classOf[Producer[String, JValue]]) val sender = new KafkaSender("test", producer) sender.send(key, parse(messageJson).asInstanceOf[JObject]) val argumentCaptor = ArgumentCaptor.forClass(classOf[KeyedMessage[String, JValue]]) verify(producer).send(argumentCaptor.capture()) val keyedMessages = argumentCaptor.getAllValues assert(keyedMessages.size == 1) // The following construction is necessary because capturing of parameters // with Mockito, Scala type interference, and multiple arguments // don't work together without explicit casts. keyedMessages.get(0).asInstanceOf[mutable.WrappedArray.ofRef[KeyedMessage[String, JValue]]](0) } } class MyEncoder(verifiableProperties: VerifiableProperties) extends KafkaEncoder { override def toBytes(value: JValue): Array[Byte] = { Array() } } class MyKafkaJsonProducer extends KafkaJsonProducer(classOf[MyEncoder]) { var receivedProperties: Properties = _ override def createProducer(props: Properties): Producer[String, JValue] = { receivedProperties = props Mockito.mock(classOf[Producer[String, JValue]]) } }