| Current Path : /home/rtorresani/www/vendor/magento/module-tax/Test/Unit/Model/TaxClass/Source/ |
| Current File : //home/rtorresani/www/vendor/magento/module-tax/Test/Unit/Model/TaxClass/Source/CustomerTest.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);
namespace Magento\Tax\Test\Unit\Model\TaxClass\Source;
use Magento\Framework\Api\Filter;
use Magento\Framework\Api\FilterBuilder;
use Magento\Framework\Api\SearchCriteria;
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
use Magento\Tax\Api\Data\TaxClassInterface;
use Magento\Tax\Api\Data\TaxClassSearchResultsInterface;
use Magento\Tax\Api\TaxClassManagementInterface;
use Magento\Tax\Api\TaxClassRepositoryInterface;
use Magento\Tax\Model\ClassModel;
use Magento\Tax\Model\TaxClass\Source\Customer;
use PHPUnit\Framework\MockObject\MockObject;
use PHPUnit\Framework\TestCase;
class CustomerTest extends TestCase
{
/**
* @var TaxClassRepositoryInterface|MockObject
*/
protected $taxClassRepositoryMock;
/**
* @var SearchCriteriaBuilder|MockObject
*/
protected $searchCriteriaBuilderMock;
/**
* @var FilterBuilder|MockObject
*/
protected $filterBuilderMock;
/**
* @var Customer
*/
protected $customer;
/**
* @var ObjectManager
*/
protected $objectManager;
/**
* Set up
*
* @return void
*/
protected function setUp(): void
{
$this->objectManager = new ObjectManager($this);
$this->taxClassRepositoryMock = $this->getMockForAbstractClass(
TaxClassRepositoryInterface::class,
['getList'],
'',
false,
true,
true,
[]
);
$this->searchCriteriaBuilderMock = $this->createPartialMock(
SearchCriteriaBuilder::class,
['addFilters', 'create']
);
$this->filterBuilderMock = $this->createPartialMock(
FilterBuilder::class,
['setField', 'setValue', 'create']
);
$this->customer = $this->objectManager->getObject(
Customer::class,
[
'taxClassRepository' => $this->taxClassRepositoryMock,
'searchCriteriaBuilder' => $this->searchCriteriaBuilderMock,
'filterBuilder' => $this->filterBuilderMock
]
);
}
/**
* Run test getAllOptions method
*
* @param bool $isEmpty
* @param array $expected
* @dataProvider dataProviderGetAllOptions
*/
public function testGetAllOptions($isEmpty, array $expected)
{
$filterMock = $this->createMock(Filter::class);
$searchCriteriaMock = $this->createMock(SearchCriteria::class);
$searchResultsMock = $this->getMockForAbstractClass(
TaxClassSearchResultsInterface::class,
[],
'',
false,
true,
true,
['getItems']
);
$taxClassMock = $this->getMockForAbstractClass(
TaxClassInterface::class,
['getClassId', 'getClassName'],
'',
false,
true,
true
);
$this->filterBuilderMock->expects($this->once())
->method('setField')
->with(ClassModel::KEY_TYPE)
->willReturnSelf();
$this->filterBuilderMock->expects($this->once())
->method('setValue')
->with(TaxClassManagementInterface::TYPE_CUSTOMER)
->willReturnSelf();
$this->filterBuilderMock->expects($this->once())
->method('create')
->willReturn($filterMock);
$this->searchCriteriaBuilderMock->expects($this->once())
->method('addFilters')
->with([$filterMock])
->willReturnSelf();
$this->searchCriteriaBuilderMock->expects($this->once())
->method('create')
->willReturn($searchCriteriaMock);
$this->taxClassRepositoryMock->expects($this->once())
->method('getList')
->with($searchCriteriaMock)
->willReturn($searchResultsMock);
if (!$isEmpty) {
$taxClassMock->expects($this->once())
->method('getClassId')
->willReturn(10);
$taxClassMock->expects($this->once())
->method('getClassName')
->willReturn('class-name');
$items = [$taxClassMock];
$searchResultsMock->expects($this->once())
->method('getItems')
->willReturn($items);
// checking of a lack of re-initialization
for ($i = 10; --$i;) {
$result = $this->customer->getAllOptions();
$this->assertEquals($expected, $result);
}
} else {
$items = [];
$searchResultsMock->expects($this->once())
->method('getItems')
->willReturn($items);
// checking exception
$this->assertEmpty($this->customer->getAllOptions());
}
}
/**
* Data provider for testGetAllOptions
*
* @return array
*/
public function dataProviderGetAllOptions()
{
return [
['isEmpty' => false, 'expected' => [['value' => 10, 'label' => 'class-name']]],
['isEmpty' => true, 'expected' => []]
];
}
/**
* Run test getAllOptions method for names integrity
*
* @param array $value
* @dataProvider dataProviderGetAllOptionsNameIntegrity
*/
public function testGetAllOptionsNameIntegrity(array $value)
{
$filterMock = $this->createMock(Filter::class);
$searchCriteriaMock = $this->createMock(SearchCriteria::class);
$searchResultsMock = $this->getMockForAbstractClass(
TaxClassSearchResultsInterface::class,
[],
'',
false,
true,
true,
['getItems']
);
$taxClassMock = $this->getMockForAbstractClass(
TaxClassInterface::class,
['getClassId', 'getClassName'],
'',
false,
true,
true
);
$this->filterBuilderMock->expects($this->once())
->method('setField')
->with(ClassModel::KEY_TYPE)
->willReturnSelf();
$this->filterBuilderMock->expects($this->once())
->method('setValue')
->with(TaxClassManagementInterface::TYPE_CUSTOMER)
->willReturnSelf();
$this->filterBuilderMock->expects($this->once())
->method('create')
->willReturn($filterMock);
$this->searchCriteriaBuilderMock->expects($this->once())
->method('addFilters')
->with([$filterMock])
->willReturnSelf();
$this->searchCriteriaBuilderMock->expects($this->once())
->method('create')
->willReturn($searchCriteriaMock);
$this->taxClassRepositoryMock->expects($this->once())
->method('getList')
->with($searchCriteriaMock)
->willReturn($searchResultsMock);
$taxClassMock->expects($this->once())
->method('getClassId')
->willReturn($value['value']);
$taxClassMock->expects($this->once())
->method('getClassName')
->willReturn($value['label']);
$items = [$taxClassMock];
$searchResultsMock->expects($this->once())
->method('getItems')
->willReturn($items);
$result=($this->customer->getAllOptions());
$expected=$value;
$this->assertEquals([$expected], $result);
}
/**
* Data provider for testGetAllOptionsNameIntegrity
*
* @return array
*/
public function dataProviderGetAllOptionsNameIntegrity()
{
return [
[
'value' => ['value' => 1, 'label' => 'unescaped name'],
],
[
'value' => ['value' => 2, 'label' => 'tax < 50%'],
],
[
'value' => ['value' => 3, 'label' => 'rule for 1 & 2'],
],
[
'value' => ['value' => 4, 'label' => 'html <tag>'],
],
[
'value' => ['value' => 5, 'label' => 'comment <!-- comment -->'],
],
[
'value' => ['value' => 6, 'label' => 'php tag <?= "2"; ?>'],
],
];
}
}