paymentDOMock = $this->createMock(PaymentDataObjectInterface::class); $this->paymentMock = $this->createMock(Payment::class); $this->configMock = $this->createMock(Config::class); $this->paymentDOMock->method('getPayment') ->willReturn($this->paymentMock); $this->handler = new TransactionDetailsResponseHandler(new SubjectReader(), $this->configMock); } public function testHandle() { $subject = [ 'payment' => $this->paymentDOMock, 'store_id' => 123, ]; $response = [ 'transactionResponse' => [ 'dontsaveme' => 'dontdoti', 'abc' => 'foobar', ] ]; // Assert the information comes from the right store config $this->configMock->method('getAdditionalInfoKeys') ->with(123) ->willReturn(['abc']); // Assert the payment has the most recent information always set on it $this->paymentMock->expects($this->once()) ->method('setAdditionalInformation') ->with('abc', 'foobar'); // Assert the transaction has the raw details from the transaction $this->paymentMock->expects($this->once()) ->method('setTransactionAdditionalInfo') ->with('raw_details_info', ['abc' => 'foobar']); $this->handler->handle($subject, $response); // Assertions are via mock expects above } }