getMockForAbstractClass(LoggerInterface::class); $this->loggerMock = $this->getMockBuilder(Logger::class) ->disableOriginalConstructor() ->getMock(); $this->adapterMock = $this->getMockBuilder(BraintreeAdapter::class) ->disableOriginalConstructor() ->getMock(); /** @var BraintreeAdapterFactory|MockObject $adapterFactoryMock */ $adapterFactoryMock = $this->getMockBuilder(BraintreeAdapterFactory::class) ->disableOriginalConstructor() ->getMock(); $adapterFactoryMock->expects(self::once()) ->method('create') ->willReturn($this->adapterMock); $this->model = new TransactionSale($criticalLoggerMock, $this->loggerMock, $adapterFactoryMock); } /** * Runs test placeRequest method (exception) * * @return void * * @expectedException \Magento\Payment\Gateway\Http\ClientException * @expectedExceptionMessage Test messages */ public function testPlaceRequestException() { $this->loggerMock->expects($this->once()) ->method('debug') ->with( [ 'request' => $this->getTransferData(), 'client' => TransactionSale::class, 'response' => [] ] ); $this->adapterMock->expects($this->once()) ->method('sale') ->willThrowException(new \Exception('Test messages')); /** @var TransferInterface|MockObject $transferObjectMock */ $transferObjectMock = $this->getTransferObjectMock(); $this->model->placeRequest($transferObjectMock); } /** * Run test placeRequest method * * @return void */ public function testPlaceRequestSuccess() { $response = $this->getResponseObject(); $this->adapterMock->expects($this->once()) ->method('sale') ->with($this->getTransferData()) ->willReturn($response); $this->loggerMock->expects($this->once()) ->method('debug') ->with( [ 'request' => $this->getTransferData(), 'client' => TransactionSale::class, 'response' => ['success' => 1] ] ); $actualResult = $this->model->placeRequest($this->getTransferObjectMock()); $this->assertTrue(is_object($actualResult['object'])); $this->assertEquals(['object' => $response], $actualResult); } /** * Creates mock object for TransferInterface. * * @return TransferInterface|MockObject */ private function getTransferObjectMock() { $transferObjectMock = $this->createMock(TransferInterface::class); $transferObjectMock->expects($this->once()) ->method('getBody') ->willReturn($this->getTransferData()); return $transferObjectMock; } /** * Creates stub for a response. * * @return \stdClass */ private function getResponseObject() { $obj = new \stdClass; $obj->success = true; return $obj; } /** * Creates stub request data. * * @return array */ private function getTransferData() { return [ 'test-data-key' => 'test-data-value' ]; } }