quote = Bootstrap::getObjectManager()->create(Quote::class); $this->cartRepositoryMock = $this->getMockBuilder(CartRepositoryInterface::class) ->disableOriginalConstructor() ->setMethods(['get']) ->getMockForAbstractClass(); $this->localeDateMock = $this->getMockBuilder(TimezoneInterface::class) ->setMethods(['formatDateTime']) ->getMockForAbstractClass(); $this->paymentFailures = Bootstrap::getObjectManager()->create( PaymentFailuresInterface::class, [ 'cartRepository' => $this->cartRepositoryMock, 'localeDate' => $this->localeDateMock, ] ); } /** * @magentoDataFixture Magento/Sales/_files/quote_with_two_products_and_customer.php * @magentoConfigFixture cataloginventory/options/enable_inventory_check 1 * @magentoConfigFixture current_store payment/payflowpro/title Some Title Of The Method * @magentoConfigFixture current_store carriers/freeshipping/title Some Shipping Method * @magentoDbIsolation enabled * @magentoAppIsolation enabled * @return void */ public function testHandlerWithCustomer(): void { $errorMessage = __('Transaction declined.'); $checkoutType = 'custom_checkout'; $this->quote->load('test01', 'reserved_order_id'); $this->cartRepositoryMock->method('get') ->with($this->quote->getId()) ->willReturn($this->quote); $dateAndTime = 'Nov 22, 2019, 1:00:00 AM'; $this->localeDateMock->expects($this->atLeastOnce())->method('formatDateTime')->willReturn($dateAndTime); $this->paymentFailures->handle((int)$this->quote->getId(), $errorMessage->render()); $paymentReflection = new \ReflectionClass($this->paymentFailures); $templateVarsMethod = $paymentReflection->getMethod('getTemplateVars'); $templateVarsMethod->setAccessible(true); $templateVars = $templateVarsMethod->invoke($this->paymentFailures, $this->quote, $errorMessage, $checkoutType); $expectedVars = [ 'reason' => $errorMessage->render(), 'checkoutType' => $checkoutType, 'dateAndTime' => $dateAndTime, 'customer' => 'John Smith', 'customerEmail' => 'aaa@aaa.com', 'paymentMethod' => 'Some Title Of The Method', 'shippingMethod' => 'Some Shipping Method', 'items' => 'Simple Product x 2 USD 10
Custom Design Simple Product x 1 USD 10', 'total' => 'USD 30.0000', 'billingAddress' => $this->quote->getBillingAddress(), 'shippingAddress' => $this->quote->getShippingAddress(), 'billingAddressHtml' => $this->quote->getBillingAddress()->format('html'), 'shippingAddressHtml' => $this->quote->getShippingAddress()->format('html'), ]; $this->assertEquals($expectedVars, $templateVars); } /** * @magentoDataFixture Magento/Sales/_files/quote_with_two_products_and_customer.php * @magentoConfigFixture cataloginventory/options/enable_inventory_check 0 * @magentoConfigFixture current_store payment/payflowpro/title Some Title Of The Method * @magentoConfigFixture current_store carriers/freeshipping/title Some Shipping Method * @magentoDbIsolation enabled * @magentoAppIsolation enabled * @return void */ public function testHandlerWithCustomerWithInventoryCheckDisabled(): void { $errorMessage = __('Transaction declined.'); $checkoutType = 'custom_checkout'; $this->quote->load('test01', 'reserved_order_id'); $this->cartRepositoryMock->method('get') ->with($this->quote->getId()) ->willReturn($this->quote); $dateAndTime = 'Nov 22, 2019, 1:00:00 AM'; $this->localeDateMock->expects($this->atLeastOnce())->method('formatDateTime')->willReturn($dateAndTime); $this->paymentFailures->handle((int)$this->quote->getId(), $errorMessage->render()); $paymentReflection = new \ReflectionClass($this->paymentFailures); $templateVarsMethod = $paymentReflection->getMethod('getTemplateVars'); $templateVarsMethod->setAccessible(true); $templateVars = $templateVarsMethod->invoke($this->paymentFailures, $this->quote, $errorMessage, $checkoutType); $expectedVars = [ 'reason' => $errorMessage->render(), 'checkoutType' => $checkoutType, 'dateAndTime' => $dateAndTime, 'customer' => 'John Smith', 'customerEmail' => 'aaa@aaa.com', 'paymentMethod' => 'Some Title Of The Method', 'shippingMethod' => 'Some Shipping Method', 'items' => 'Simple Product x 2.0000 USD 10
Custom Design Simple Product x 1.0000 USD 10', 'total' => 'USD 30.0000', 'billingAddress' => $this->quote->getBillingAddress(), 'shippingAddress' => $this->quote->getShippingAddress(), 'billingAddressHtml' => $this->quote->getBillingAddress()->format('html'), 'shippingAddressHtml' => $this->quote->getShippingAddress()->format('html'), ]; $this->assertEquals($expectedVars, $templateVars); } }