paymentMock = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->setMethods([ 'setAdditionalInformation', ]) ->getMock(); $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) ->disableOriginalConstructor() ->getMock(); $this->payPalHandler = new PayPalDetailsHandler($this->subjectReaderMock); } /** * @covers \Magento\Braintree\Gateway\Response\PayPalDetailsHandler::handle */ public function testHandle() { $paymentDataMock = $this->getPaymentDataObjectMock(); $transaction = $this->getBraintreeTransaction(); $subject = ['payment' => $paymentDataMock]; $response = ['object' => $transaction]; $this->subjectReaderMock->expects(self::once()) ->method('readPayment') ->with($subject) ->willReturn($paymentDataMock); $this->subjectReaderMock->expects(self::once()) ->method('readTransaction') ->with($response) ->willReturn($transaction); $this->subjectReaderMock->expects(static::once()) ->method('readPayPal') ->with($transaction) ->willReturn($transaction->paypal); $this->paymentMock->expects(static::exactly(2)) ->method('setAdditionalInformation'); $this->payPalHandler->handle($subject, $response); } /** * Create mock for payment data object and order payment * @return MockObject */ private function getPaymentDataObjectMock() { $mock = $this->getMockBuilder(PaymentDataObject::class) ->setMethods(['getPayment']) ->disableOriginalConstructor() ->getMock(); $mock->expects(static::once()) ->method('getPayment') ->willReturn($this->paymentMock); return $mock; } /** * Create Braintree transaction * @return Transaction */ private function getBraintreeTransaction() { $attributes = [ 'id' => '23ui8be', 'paypal' => [ 'paymentId' => 'u239dkv6n2lds', 'payerEmail' => 'example@test.com' ] ]; $transaction = Transaction::factory($attributes); return $transaction; } }