paymentDOMock = $this->createMock(PaymentDataObjectInterface::class); $this->paymentMock = $this->getMockBuilder(Payment::class) ->disableOriginalConstructor() ->getMock(); $this->paymentDOMock->expects(static::once()) ->method('getPayment') ->willReturn($this->paymentMock); $this->subjectReaderMock = $this->getMockBuilder(SubjectReader::class) ->disableOriginalConstructor() ->getMock(); $this->builder = new VoidDataBuilder($this->subjectReaderMock); } /** * @param string|null $parentTransactionId * @param string $callLastTransId * @param string $lastTransId * @param string $expected * @return void * @dataProvider buildDataProvider */ public function testBuild($parentTransactionId, $callLastTransId, $lastTransId, $expected) { $amount = 30.00; $buildSubject = [ 'payment' => $this->paymentDOMock, 'amount' => $amount, ]; $this->subjectReaderMock->expects(self::once()) ->method('readPayment') ->with($buildSubject) ->willReturn($this->paymentDOMock); $this->paymentMock->expects(self::once()) ->method('getParentTransactionId') ->willReturn($parentTransactionId); $this->paymentMock->expects(self::$callLastTransId()) ->method('getLastTransId') ->willReturn($lastTransId); $result = $this->builder->build($buildSubject); self::assertEquals( ['transaction_id' => $expected], $result ); } /** * @return array */ public function buildDataProvider() { return [ [ 'parentTransactionId' => 'b3b99d', 'callLastTransId' => 'never', 'lastTransId' => 'd45d22', 'expected' => 'b3b99d', ], [ 'parentTransactionId' => null, 'callLastTransId' => 'once', 'expected' => 'd45d22', 'lastTransId' => 'd45d22', ], ]; } }