226 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			226 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
<?php
 | 
						|
/**
 | 
						|
 * Copyright © Magento, Inc. All rights reserved.
 | 
						|
 * See COPYING.txt for license details.
 | 
						|
 */
 | 
						|
 | 
						|
declare(strict_types=1);
 | 
						|
 | 
						|
namespace Magento\AsynchronousOperations\Api;
 | 
						|
 | 
						|
use Magento\AsynchronousOperations\Model\MassSchedule;
 | 
						|
use Magento\Framework\Webapi\Rest\Request;
 | 
						|
use Magento\TestFramework\TestCase\WebapiAbstract;
 | 
						|
use Magento\Framework\Bulk\OperationInterface;
 | 
						|
use Magento\Customer\Api\Data\CustomerInterface;
 | 
						|
 | 
						|
class OperationRepositoryInterfaceTest extends WebapiAbstract
 | 
						|
{
 | 
						|
    public const RESOURCE_PATH = '/V1/bulk';
 | 
						|
    public const SERVICE_NAME = 'asynchronousOperationsOperationRepositoryV1';
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var \Magento\Framework\ObjectManagerInterface
 | 
						|
     */
 | 
						|
    protected $objectManager;
 | 
						|
 | 
						|
    /**
 | 
						|
     * @var MassSchedule
 | 
						|
     */
 | 
						|
    private $massSchedule;
 | 
						|
 | 
						|
    public function setUp(): void
 | 
						|
    {
 | 
						|
        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 | 
						|
        $this->massSchedule = $this->objectManager->create(MassSchedule::class);
 | 
						|
 | 
						|
        parent::setUp();
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/AsynchronousOperations/_files/operation_searchable.php
 | 
						|
     */
 | 
						|
    public function testGetListByBulkStartTime()
 | 
						|
    {
 | 
						|
        $searchCriteria = [
 | 
						|
            'searchCriteria' => [
 | 
						|
                'filter_groups' => [
 | 
						|
                    [
 | 
						|
                        'filters' => [
 | 
						|
                            [
 | 
						|
                                'field' => 'start_time',
 | 
						|
                                'value' => '2010-10-10 00:00:00',
 | 
						|
                                'condition_type' => 'lteq',
 | 
						|
                            ],
 | 
						|
                        ],
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
                'current_page' => 1,
 | 
						|
                'page_size' => 20,
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $serviceInfo = [
 | 
						|
            'rest' => [
 | 
						|
                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($searchCriteria),
 | 
						|
                'httpMethod' => Request::HTTP_METHOD_GET,
 | 
						|
            ],
 | 
						|
            'soap' => [
 | 
						|
                'service' => self::SERVICE_NAME,
 | 
						|
                'operation' => self::SERVICE_NAME . 'GetList',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $response = $this->_webApiCall($serviceInfo, $searchCriteria);
 | 
						|
 | 
						|
        $this->assertArrayHasKey('search_criteria', $response);
 | 
						|
        $this->assertArrayHasKey('total_count', $response);
 | 
						|
        $this->assertArrayHasKey('items', $response);
 | 
						|
 | 
						|
        $this->assertEquals($searchCriteria['searchCriteria'], $response['search_criteria']);
 | 
						|
        $this->assertEquals(6, $response['total_count']);
 | 
						|
        $this->assertCount(6, $response['items']);
 | 
						|
 | 
						|
        foreach ($response['items'] as $item) {
 | 
						|
            $this->assertEquals('bulk-uuid-searchable-6', $item['bulk_uuid']);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * @magentoApiDataFixture Magento/AsynchronousOperations/_files/operation_searchable.php
 | 
						|
     */
 | 
						|
    public function testGetList()
 | 
						|
    {
 | 
						|
        $searchCriteria = [
 | 
						|
            'searchCriteria' => [
 | 
						|
                'filter_groups' => [
 | 
						|
                    [
 | 
						|
                        'filters' => [
 | 
						|
                            [
 | 
						|
                                'field' => 'bulk_uuid',
 | 
						|
                                'value' => 'bulk-uuid-searchable-6',
 | 
						|
                                'condition_type' => 'eq',
 | 
						|
                            ],
 | 
						|
                        ],
 | 
						|
                    ],
 | 
						|
                    [
 | 
						|
                        'filters' => [
 | 
						|
                            [
 | 
						|
                                'field' => 'status',
 | 
						|
                                'value' => OperationInterface::STATUS_TYPE_NOT_RETRIABLY_FAILED,
 | 
						|
                                'condition_type' => 'eq',
 | 
						|
                            ],
 | 
						|
                        ],
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
                'current_page' => 1,
 | 
						|
                'page_size' => 20,
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $serviceInfo = [
 | 
						|
            'rest' => [
 | 
						|
                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($searchCriteria),
 | 
						|
                'httpMethod' => Request::HTTP_METHOD_GET,
 | 
						|
            ],
 | 
						|
            'soap' => [
 | 
						|
                'service' => self::SERVICE_NAME,
 | 
						|
                'operation' => self::SERVICE_NAME . 'GetList',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $response = $this->_webApiCall($serviceInfo, $searchCriteria);
 | 
						|
 | 
						|
        $this->assertArrayHasKey('search_criteria', $response);
 | 
						|
        $this->assertArrayHasKey('total_count', $response);
 | 
						|
        $this->assertArrayHasKey('items', $response);
 | 
						|
 | 
						|
        $this->assertEquals($searchCriteria['searchCriteria'], $response['search_criteria']);
 | 
						|
        $this->assertEquals(1, $response['total_count']);
 | 
						|
        $this->assertCount(1, $response['items']);
 | 
						|
 | 
						|
        foreach ($response['items'] as $item) {
 | 
						|
            $this->assertEquals('bulk-uuid-searchable-6', $item['bulk_uuid']);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Check multiple bulk operation inserted followed by search via getList
 | 
						|
     */
 | 
						|
    public function testBulkGetListByStartTime()
 | 
						|
    {
 | 
						|
        $entityArray = [
 | 
						|
            ['customer' => $this->getCustomer(), "password" => "Strong-Password"],
 | 
						|
            [
 | 
						|
                'customer' => $this->getCustomer('customer2@abc.com', 'Second'),
 | 
						|
                "password" => "Strong-Password"
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        // Adding bulk records twice
 | 
						|
        $this->sendBulk($entityArray);
 | 
						|
        $this->sendBulk($entityArray);
 | 
						|
 | 
						|
        $searchCriteria = [
 | 
						|
            'searchCriteria' => [
 | 
						|
                'filter_groups' => [
 | 
						|
                    [
 | 
						|
                        'filters' => [
 | 
						|
                            [
 | 
						|
                                'field' => 'start_time',
 | 
						|
                                'value' => date('Y-m-d H:i:0'),
 | 
						|
                                'condition_type' => 'gt',
 | 
						|
                            ],
 | 
						|
                        ],
 | 
						|
                    ],
 | 
						|
                ],
 | 
						|
                'current_page' => 1,
 | 
						|
                'page_size' => 20,
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $serviceInfo = [
 | 
						|
            'rest' => [
 | 
						|
                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($searchCriteria),
 | 
						|
                'httpMethod' => Request::HTTP_METHOD_GET,
 | 
						|
            ],
 | 
						|
            'soap' => [
 | 
						|
                'service' => self::SERVICE_NAME,
 | 
						|
                'operation' => self::SERVICE_NAME . 'GetList',
 | 
						|
            ],
 | 
						|
        ];
 | 
						|
 | 
						|
        $response = $this->_webApiCall($serviceInfo, $searchCriteria);
 | 
						|
 | 
						|
        $this->assertArrayHasKey('search_criteria', $response);
 | 
						|
        $this->assertArrayHasKey('total_count', $response);
 | 
						|
        $this->assertArrayHasKey('items', $response);
 | 
						|
 | 
						|
        $this->assertEquals($searchCriteria['searchCriteria'], $response['search_criteria']);
 | 
						|
        $this->assertEquals(4, $response['total_count']);
 | 
						|
        $this->assertCount(4, $response['items']);
 | 
						|
    }
 | 
						|
 | 
						|
    public function sendBulk($customers)
 | 
						|
    {
 | 
						|
        $result = $this->massSchedule->publishMass(
 | 
						|
            'async.magento.customer.api.accountmanagementinterface.createaccount.post',
 | 
						|
            $customers
 | 
						|
        );
 | 
						|
 | 
						|
        // Assert bulk accepted with no errors
 | 
						|
        $this->assertFalse($result->isErrors());
 | 
						|
    }
 | 
						|
 | 
						|
    private function getCustomer($email = 'customer1@abc.com', $firstName = 'First', $lastName = 'Customer')
 | 
						|
    {
 | 
						|
        /** @var $customer \Magento\Customer\Model\Data\Customer */
 | 
						|
        $customer = $this->objectManager->create(CustomerInterface::class);
 | 
						|
        $customer
 | 
						|
            ->setFirstName($firstName)
 | 
						|
            ->setLastname($lastName)
 | 
						|
            ->setEmail($email);
 | 
						|
        return $customer;
 | 
						|
    }
 | 
						|
}
 |