CustomerTest.php 4.08 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Backend\Model\Search;

use Magento\TestFramework\Helper\Bootstrap;

/**
 * @magentoAppArea adminhtml
 * @magentoDataFixture Magento/Customer/_files/three_customers.php
 * @magentoDataFixture Magento/Customer/_files/customer_address.php
 */
class CustomerTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @dataProvider loadDataProvider
     */
    public function testLoad($query, $limit, $start, $expectedResult)
    {
        /** Preconditions */
        $objectManager = Bootstrap::getObjectManager();
        /** @var \Magento\Backend\Model\Search\Customer $customerSearch */
        $customerSearch = $objectManager->create(\Magento\Backend\Model\Search\Customer::class);
        $customerSearch->setQuery($query);
        $customerSearch->setLimit($limit);
        $customerSearch->setStart($start);
        $customerSearch->load();

        /** SUT Execution */
        $searchResults = $customerSearch->getResults();

        /** Ensure that search results are correct */
        $this->assertCount(count($expectedResult), $searchResults, 'Quantity of search result items is invalid.');
        foreach ($expectedResult as $itemIndex => $expectedItem) {
            /** Validate URL to item */
            $customerId = substr($expectedItem['id'], 11); // 'customer/1/' is added to all actual customer IDs
            $this->assertContains(
                "customer/index/edit/id/$customerId",
                $searchResults[$itemIndex]['url'],
                'Item URL is invalid.'
            );
            unset($searchResults[$itemIndex]['url']);

            /** Validate other item data */
            $this->assertEquals($expectedItem, $searchResults[$itemIndex], "Data of item #$itemIndex is invalid.");
        }
    }

    public static function loadDataProvider()
    {
        return [
            'All items, first page' => [
                'Firstname',
                2, // Items on page
                1, // Page number
                [
                    [
                        'id' => 'customer/1/1',
                        'type' => 'Customer',
                        'name' => 'Firstname Lastname',
                        'description' => 'CompanyName',
                    ],
                    [
                        'id' => 'customer/1/2',
                        'type' => 'Customer',
                        'name' => 'Firstname2 Lastname2',
                        'description' => null
                    ]
                ],
            ],
            'All items, second page' => [
                'Firstname',
                2, // Items on page
                2, // Page number
                [
                    [
                        'id' => 'customer/1/3',
                        'type' => 'Customer',
                        'name' => 'Firstname3 Lastname3',
                        'description' => null,
                    ]
                ],
            ],
            'Search by last name, second item only' => [
                'Lastname2',
                10, // Items on page
                1, // Page number
                [
                    [
                        'id' => 'customer/1/2',
                        'type' => 'Customer',
                        'name' => 'Firstname2 Lastname2',
                        'description' => null,
                    ]
                ],
            ],
            'No results' => [
                'NotExistingCustomerName',
                10, // Items on page
                1, // Page number
                [],
            ],
            'Search by company name, first item only' => [
                'CompanyName',
                10, // Items on page
                1, // Page number
                [
                    [
                        'id' => 'customer/1/1',
                        'type' => 'Customer',
                        'name' => 'Firstname Lastname',
                        'description' => 'CompanyName',
                    ],
                ],
            ],
        ];
    }
}