123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Signifyd\Model\SignifydGateway\Request;
- use Magento\Framework\Config\ScopeInterface;
- use Magento\Signifyd\Model\SignifydOrderSessionId;
- use Magento\TestFramework\Helper\Bootstrap;
- use Magento\Framework\App\Area;
- use Magento\Framework\Intl\DateTimeFactory;
- use Magento\Framework\ObjectManagerInterface;
- use Magento\Sales\Model\Order;
- use Magento\Customer\Api\CustomerRepositoryInterface;
- use Magento\Framework\App\ProductMetadataInterface;
- /**
- * Class CreateCaseBuilderTest
- * @magentoAppIsolation enabled
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class CreateCaseBuilderTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var ObjectManagerInterface
- */
- private $objectManager;
- /**
- * @var CreateCaseBuilder
- */
- private $caseBuilder;
- /**
- * @var DateTimeFactory
- */
- private $dateTimeFactory;
- /**
- * Initial setup
- */
- protected function setUp()
- {
- $bootstrap = Bootstrap::getInstance();
- $bootstrap->loadArea(Area::AREA_FRONTEND);
- $this->objectManager = Bootstrap::getObjectManager();
- $this->dateTimeFactory = $this->objectManager->create(DateTimeFactory::class);
- $this->caseBuilder = $this->objectManager->create(CreateCaseBuilder::class);
- }
- /**
- * Test builder on order with customer, simple product, frontend area,
- * PayPal gateway, shipping and billing addresses, with two orders
- *
- * @covers \Magento\Signifyd\Model\SignifydGateway\Request\CreateCaseBuilder::build()
- * @magentoDataFixture Magento/Signifyd/_files/order_with_customer_and_two_simple_products.php
- * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
- */
- public function testCreateCaseBuilderWithFullSetOfData()
- {
- /** @var Order $order */
- $order = $this->objectManager->create(Order::class);
- $order->loadByIncrementId('100000001');
- $orderItems = $order->getAllItems();
- $payment = $order->getPayment();
- $billingAddress = $order->getBillingAddress();
- $shippingAddress = $order->getShippingAddress();
- /** @var CustomerRepositoryInterface $customerRepository */
- $customerRepository = $this->objectManager->create(CustomerRepositoryInterface::class);
- $customer = $customerRepository->getById($order->getCustomerId());
- $productMetadata = $this->objectManager->create(ProductMetadataInterface::class);
- /** @var SignifydOrderSessionId $signifydOrderSessionId */
- $signifydOrderSessionId = $this->objectManager->create(SignifydOrderSessionId::class);
- $expected = [
- 'purchase' => [
- 'orderSessionId' => $signifydOrderSessionId->get($order->getQuoteId()),
- 'browserIpAddress' => $order->getRemoteIp(),
- 'orderId' => $order->getIncrementId(),
- 'createdAt' => date('c', strtotime(date('Y-m-d 00:00:55'))),
- 'paymentGateway' => 'paypal_account',
- 'transactionId' => $payment->getLastTransId(),
- 'currency' => $order->getOrderCurrencyCode(),
- 'avsResponseCode' => '',
- 'cvvResponseCode' => '',
- 'orderChannel' => 'WEB',
- 'totalPrice' => $order->getGrandTotal(),
- 'shipments' => [
- 0 => [
- 'shipper' => 'Flat Rate',
- 'shippingMethod' => 'Fixed',
- 'shippingPrice' => $order->getShippingAmount()
- ]
- ],
- 'products' => [
- 0 => [
- 'itemId' => $orderItems[0]->getSku(),
- 'itemName' => $orderItems[0]->getName(),
- 'itemPrice' => $orderItems[0]->getPrice(),
- 'itemQuantity' => $orderItems[0]->getQtyOrdered(),
- 'itemUrl' => $orderItems[0]->getProduct()->getProductUrl(),
- 'itemWeight' => $orderItems[0]->getProduct()->getWeight()
- ],
- 1 => [
- 'itemId' => $orderItems[1]->getSku(),
- 'itemName' => $orderItems[1]->getName(),
- 'itemPrice' => $orderItems[1]->getPrice(),
- 'itemQuantity' => $orderItems[1]->getQtyOrdered(),
- 'itemUrl' => $orderItems[1]->getProduct()->getProductUrl(),
- 'itemWeight' => $orderItems[1]->getProduct()->getWeight()
- ]
- ],
- 'paymentMethod' => 'PAYPAL_ACCOUNT'
- ],
- 'card' => [
- 'cardHolderName' => 'firstname lastname',
- 'last4' => $payment->getCcLast4(),
- 'expiryMonth' => $payment->getCcExpMonth(),
- 'expiryYear' => $payment->getCcExpYear(),
- 'billingAddress' => [
- 'streetAddress' => 'street',
- 'city' => $billingAddress->getCity(),
- 'provinceCode' => $billingAddress->getRegionCode(),
- 'postalCode' => $billingAddress->getPostcode(),
- 'countryCode' => $billingAddress->getCountryId(),
- 'unit' => ''
- ]
- ],
- 'recipient' => [
- 'fullName' => $shippingAddress->getName(),
- 'confirmationEmail' => $shippingAddress->getEmail(),
- 'confirmationPhone' => $shippingAddress->getTelephone(),
- 'deliveryAddress' => [
- 'streetAddress' => '6161 West Centinela Avenue',
- 'unit' => 'app. 33',
- 'city' => $shippingAddress->getCity(),
- 'provinceCode' => $shippingAddress->getRegionCode(),
- 'postalCode' => $shippingAddress->getPostcode(),
- 'countryCode' => $shippingAddress->getCountryId()
- ]
- ],
- 'userAccount' => [
- 'email' => $customer->getEmail(),
- 'username' => $customer->getEmail(),
- 'phone' => $order->getBillingAddress()->getTelephone(),
- 'accountNumber' => $customer->getId(),
- 'createdDate' => $this->formatDate($customer->getCreatedAt()),
- 'lastUpdateDate' => $this->formatDate($customer->getUpdatedAt()),
- 'aggregateOrderCount' => 2,
- 'aggregateOrderDollars' => 150.0
- ],
- 'seller' => $this->getSellerData(),
- 'platformAndClient' => [
- 'storePlatform' => $productMetadata->getName() . ' ' . $productMetadata->getEdition(),
- 'storePlatformVersion' => $productMetadata->getVersion(),
- 'signifydClientApp' => $productMetadata->getName(),
- 'signifydClientAppVersion' => '1.0'
- ]
- ];
- self::assertEquals(
- $expected,
- $this->caseBuilder->build($order->getEntityId())
- );
- }
- /**
- * Test builder on order with guest, virtual product, admin area,
- * none PayPal gateway, no shipping address, without credit card data
- *
- * @covers \Magento\Signifyd\Model\SignifydGateway\Request\CreateCaseBuilder::build()
- * @magentoDataFixture Magento/Signifyd/_files/order_with_guest_and_virtual_product.php
- */
- public function testCreateCaseBuilderWithVirtualProductAndGuest()
- {
- /** @var Order $order */
- $order = $this->objectManager->create(Order::class);
- $order->loadByIncrementId('100000002');
- $scope = $this->objectManager->get(ScopeInterface::class);
- $scope->setCurrentScope(Area::AREA_ADMINHTML);
- $orderItems = $order->getAllItems();
- $product = $orderItems[0]->getProduct();
- $payment = $order->getPayment();
- $billingAddress = $order->getBillingAddress();
- $productMetadata = $this->objectManager->create(ProductMetadataInterface::class);
- /** @var SignifydOrderSessionId $quoteSessionId */
- $quoteSessionId = $this->objectManager->create(SignifydOrderSessionId::class);
- $expected = [
- 'purchase' => [
- 'orderSessionId' => $quoteSessionId->get($order->getQuoteId()),
- 'browserIpAddress' => $order->getRemoteIp(),
- 'orderId' => $order->getIncrementId(),
- 'createdAt' => '2016-12-12T12:00:55+00:00',
- 'paymentGateway' => $payment->getMethod(),
- 'transactionId' => $payment->getLastTransId(),
- 'currency' => $order->getOrderCurrencyCode(),
- 'avsResponseCode' => 'Y',
- 'cvvResponseCode' => 'M',
- 'orderChannel' => 'PHONE',
- 'totalPrice' => $order->getGrandTotal(),
- 'products' => [
- 0 => [
- 'itemId' => $orderItems[0]->getSku(),
- 'itemName' => $orderItems[0]->getName(),
- 'itemPrice' => $orderItems[0]->getPrice(),
- 'itemQuantity' => $orderItems[0]->getQtyOrdered(),
- 'itemUrl' => $product->getProductUrl()
- ],
- ],
- 'paymentMethod' => 'PAYMENT_CARD'
- ],
- 'card' => [
- 'cardHolderName' => 'firstname lastname',
- 'billingAddress' => [
- 'streetAddress' => 'street',
- 'city' => $billingAddress->getCity(),
- 'provinceCode' => $billingAddress->getRegionCode(),
- 'postalCode' => $billingAddress->getPostcode(),
- 'countryCode' => $billingAddress->getCountryId(),
- 'unit' => ''
- ]
- ],
- 'seller' => $this->getSellerData(),
- 'platformAndClient' => [
- 'storePlatform' => $productMetadata->getName() . ' ' . $productMetadata->getEdition(),
- 'storePlatformVersion' => $productMetadata->getVersion(),
- 'signifydClientApp' => $productMetadata->getName(),
- 'signifydClientAppVersion' => '1.0'
- ]
- ];
- self::assertEquals(
- $expected,
- $this->caseBuilder->build($order->getEntityId())
- );
- }
- /**
- * Return seller data according to fixture
- *
- * @return array
- */
- private function getSellerData()
- {
- return [
- 'name' => 'Sample Store',
- 'domain' => 'm2.com',
- 'shipFromAddress' => [
- 'streetAddress' => '6161 West Centinela Avenue',
- 'unit' => 'app. 111',
- 'city' => 'Culver City',
- 'provinceCode' => 'AE',
- 'postalCode' => '90230',
- 'countryCode' => 'US',
- ],
- 'corporateAddress' => [
- 'streetAddress' => '5th Avenue',
- 'unit' => '75',
- 'city' => 'New York',
- 'provinceCode' => 'MH',
- 'postalCode' => '19032',
- 'countryCode' => 'US',
- ],
- ];
- }
- /**
- * Format date in ISO8601
- *
- * @param string $date
- * @return string
- */
- private function formatDate($date)
- {
- $result = $this->dateTimeFactory->create(
- $date,
- new \DateTimeZone('UTC')
- );
- return $result->format(\DateTime::ATOM);
- }
- }
|