createMock(Random::class); /** @var DeploymentConfig|MockObject $deploymentConfigMock */ $deploymentConfigMock = $this->createMock(DeploymentConfig::class); $this->encryptorModel = new Encryptor($encryptorRandomGenerator, $deploymentConfigMock); $this->paymentExtension = $this->getMockBuilder(OrderPaymentExtension::class) ->setMethods(['setVaultPaymentToken', 'getVaultPaymentToken', '__wakeup']) ->disableOriginalConstructor() ->getMock(); $this->paymentTokenManagementMock = $this->getMockBuilder(PaymentTokenManagement::class) ->setMethods(['saveTokenWithPaymentLink']) ->disableOriginalConstructor() ->getMock(); $this->paymentTokenMock = $this->getMockBuilder(PaymentToken::class) ->setMethods(null) ->disableOriginalConstructor() ->getMock(); $this->paymentExtension->setVaultPaymentToken($this->paymentTokenMock); // Sales Order Model $this->salesOrderMock = $this->createMock(Order::class); // Sales Order Payment Model $this->salesOrderPaymentMock = $this->getMockBuilder(Payment::class) ->setMethods(null) ->disableOriginalConstructor() ->getMock(); $this->salesOrderPaymentMock->setOrder($this->salesOrderMock); $this->salesOrderPaymentMock->setExtensionAttributes($this->paymentExtension); // Arguments to observer container $this->eventObserverArgMock = $this->getMockBuilder(Observer::class) ->setMethods(['getDataByKey']) ->disableOriginalConstructor() ->getMock(); $this->eventObserverArgMock->expects($this->any()) ->method('getDataByKey') ->with(AfterPaymentSaveObserver::PAYMENT_OBJECT_DATA_KEY) ->willReturn($this->salesOrderPaymentMock); // Observer class $this->observer = new AfterPaymentSaveObserver( $this->paymentTokenManagementMock, $this->encryptorModel ); } /** * @param int $customerId * @param string $createdAt * @param string $token * @param bool $isActive * @param string $method * @dataProvider positiveCaseDataProvider */ public function testPositiveCase($customerId, $createdAt, $token, $isActive, $method) { $this->paymentTokenMock->setGatewayToken($token); $this->paymentTokenMock->setCustomerId($customerId); $this->paymentTokenMock->setCreatedAt($createdAt); $this->paymentTokenMock->setPaymentMethodCode($method); $this->paymentTokenMock->setIsActive($isActive); $this->paymentExtension->expects($this->exactly(2)) ->method('getVaultPaymentToken') ->willReturn($this->paymentTokenMock); if (!empty($token)) { $this->paymentTokenManagementMock->expects($this->once()) ->method('saveTokenWithPaymentLink') ->willReturn(true); $this->paymentExtension->expects($this->once()) ->method('setVaultPaymentToken') ->with($this->paymentTokenMock); } else { $this->paymentTokenManagementMock->expects($this->never()) ->method('saveTokenWithPaymentLink'); $this->paymentExtension->expects($this->never()) ->method('setVaultPaymentToken') ->with($this->paymentTokenMock); } static::assertSame($this->observer, $this->observer->execute($this->eventObserverArgMock)); $paymentToken = $this->salesOrderPaymentMock->getExtensionAttributes()->getVaultPaymentToken(); static::assertSame($paymentToken, $this->paymentTokenMock); static::assertEquals($token, $paymentToken->getGatewayToken()); static::assertEquals($isActive, $paymentToken->getIsActive()); static::assertEquals($createdAt, $paymentToken->getCreatedAt()); } /** * @return array */ public function positiveCaseDataProvider() { return [ [ 1, '10\20\2015', 'asdfg', true, 'paypal' ], [ null, null, null, false, null ], ]; } }