123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Customer\Test\Unit\Model\Address;
- use Magento\Customer\Model\Address\CompositeValidator;
- /**
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
- class AbstractAddressTest extends \PHPUnit\Framework\TestCase
- {
- /** @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject */
- protected $contextMock;
- /** @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject */
- protected $registryMock;
- /** @var \Magento\Directory\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
- protected $directoryDataMock;
- /** @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
- protected $eavConfigMock;
- /** @var \Magento\Customer\Model\Address\Config|\PHPUnit_Framework_MockObject_MockObject */
- protected $addressConfigMock;
- /** @var \Magento\Directory\Model\RegionFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $regionFactoryMock;
- /** @var \Magento\Directory\Model\CountryFactory|\PHPUnit_Framework_MockObject_MockObject */
- protected $countryFactoryMock;
- /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject */
- protected $resourceMock;
- /** @var \Magento\Framework\Data\Collection\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */
- protected $resourceCollectionMock;
- /** @var \Magento\Customer\Model\Address\AbstractAddress */
- protected $model;
- /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
- private $objectManager;
- /** @var \Magento\Customer\Model\Address\CompositeValidator|\PHPUnit_Framework_MockObject_MockObject */
- private $compositeValidatorMock;
- protected function setUp()
- {
- $this->contextMock = $this->createMock(\Magento\Framework\Model\Context::class);
- $this->registryMock = $this->createMock(\Magento\Framework\Registry::class);
- $this->directoryDataMock = $this->createMock(\Magento\Directory\Helper\Data::class);
- $this->eavConfigMock = $this->createMock(\Magento\Eav\Model\Config::class);
- $this->addressConfigMock = $this->createMock(\Magento\Customer\Model\Address\Config::class);
- $this->regionFactoryMock = $this->createPartialMock(\Magento\Directory\Model\RegionFactory::class, ['create']);
- $this->countryFactoryMock = $this->createPartialMock(
- \Magento\Directory\Model\CountryFactory::class,
- ['create']
- );
- $regionCollectionMock = $this->createMock(\Magento\Directory\Model\ResourceModel\Region\Collection::class);
- $regionCollectionMock->expects($this->any())
- ->method('getSize')
- ->will($this->returnValue(0));
- $countryMock = $this->createMock(\Magento\Directory\Model\Country::class);
- $countryMock->expects($this->any())
- ->method('getRegionCollection')
- ->will($this->returnValue($regionCollectionMock));
- $this->countryFactoryMock->expects($this->any())
- ->method('create')
- ->will($this->returnValue($countryMock));
- $this->resourceMock = $this->createMock(\Magento\Customer\Model\ResourceModel\Customer::class);
- $this->resourceCollectionMock = $this->getMockBuilder(\Magento\Framework\Data\Collection\AbstractDb::class)
- ->disableOriginalConstructor()
- ->getMockForAbstractClass();
- $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
- $this->compositeValidatorMock = $this->createMock(CompositeValidator::class);
- $this->model = $this->objectManager->getObject(
- \Magento\Customer\Model\Address\AbstractAddress::class,
- [
- 'context' => $this->contextMock,
- 'registry' => $this->registryMock,
- 'directoryData' => $this->directoryDataMock,
- 'eavConfig' => $this->eavConfigMock,
- 'addressConfig' => $this->addressConfigMock,
- 'regionFactory' => $this->regionFactoryMock,
- 'countryFactory' => $this->countryFactoryMock,
- 'resource' => $this->resourceMock,
- 'resourceCollection' => $this->resourceCollectionMock,
- 'compositeValidator' => $this->compositeValidatorMock,
- ]
- );
- }
- public function testGetRegionWithRegionId()
- {
- $countryId = 1;
- $this->prepareGetRegion($countryId);
- $this->model->setData('region_id', 1);
- $this->model->setData('region', '');
- $this->model->setData('country_id', $countryId);
- $this->assertEquals('RegionName', $this->model->getRegion());
- }
- public function testGetRegionWithRegion()
- {
- $countryId = 2;
- $this->prepareGetRegion($countryId);
- $this->model->setData('region_id', '');
- $this->model->setData('region', 2);
- $this->model->setData('country_id', $countryId);
- $this->assertEquals('RegionName', $this->model->getRegion());
- }
- public function testGetRegionWithRegionName()
- {
- $this->regionFactoryMock->expects($this->never())->method('create');
- $this->model->setData('region_id', '');
- $this->model->setData('region', 'RegionName');
- $this->assertEquals('RegionName', $this->model->getRegion());
- }
- public function testGetRegionWithoutRegion()
- {
- $this->regionFactoryMock->expects($this->never())->method('create');
- $this->assertNull($this->model->getRegion());
- }
- public function testGetRegionCodeWithRegionId()
- {
- $countryId = 1;
- $this->prepareGetRegionCode($countryId);
- $this->model->setData('region_id', 3);
- $this->model->setData('region', '');
- $this->model->setData('country_id', $countryId);
- $this->assertEquals('UK', $this->model->getRegionCode());
- }
- public function testGetRegionCodeWithRegion()
- {
- $countryId = 2;
- $this->prepareGetRegionCode($countryId);
- $this->model->setData('region_id', '');
- $this->model->setData('region', 4);
- $this->model->setData('country_id', $countryId);
- $this->assertEquals('UK', $this->model->getRegionCode());
- }
- public function testGetRegionCodeWithRegionName()
- {
- $this->regionFactoryMock->expects($this->never())->method('create');
- $this->model->setData('region_id', '');
- $this->model->setData('region', 'UK');
- $this->assertEquals('UK', $this->model->getRegionCode());
- }
- public function testGetRegionCodeWithoutRegion()
- {
- $this->regionFactoryMock->expects($this->never())->method('create');
- $this->assertNull($this->model->getRegionCode());
- }
- /**
- * @param $countryId
- */
- protected function prepareGetRegion($countryId, $regionName = 'RegionName')
- {
- $region = $this->createPartialMock(
- \Magento\Directory\Model\Region::class,
- ['getCountryId', 'getName', '__wakeup', 'load']
- );
- $region->expects($this->once())
- ->method('getName')
- ->will($this->returnValue($regionName));
- $region->expects($this->once())
- ->method('getCountryId')
- ->will($this->returnValue($countryId));
- $this->regionFactoryMock->expects($this->once())
- ->method('create')
- ->will($this->returnValue($region));
- }
- /**
- * @param $countryId
- */
- protected function prepareGetRegionCode($countryId, $regionCode = 'UK')
- {
- $region = $this->createPartialMock(
- \Magento\Directory\Model\Region::class,
- ['getCountryId', 'getCode', '__wakeup', 'load']
- );
- $region->expects($this->once())
- ->method('getCode')
- ->will($this->returnValue($regionCode));
- $region->expects($this->once())
- ->method('getCountryId')
- ->will($this->returnValue($countryId));
- $this->regionFactoryMock->expects($this->once())
- ->method('create')
- ->will($this->returnValue($region));
- }
- /**
- * Test for setData method
- *
- * @return void
- */
- public function testSetData()
- {
- $key = [
- 'key' => 'value'
- ];
- $this->model->setData($key);
- $this->assertEquals($key, $this->model->getData());
- }
- /**
- * Test for setData method with multidimensional array in "key" argument
- *
- * @return void
- */
- public function testSetDataWithMultidimensionalArray()
- {
- $expected = [
- 'key' => 'value',
- 'street' => 'value1',
- ];
- $key = [
- 'key' => 'value',
- 'street' => [
- 'key1' => 'value1',
- ]
- ];
- $this->model->setData($key);
- $this->assertEquals($expected, $this->model->getData());
- }
- /**
- * Test for setData method with "value" argument
- *
- * @return void
- */
- public function testSetDataWithValue()
- {
- $value = [
- 'street' => 'value',
- ];
- $this->model->setData('street', $value);
- $this->assertEquals($value, $this->model->getData());
- }
- /**
- * Test for setData method with "value" argument
- *
- * @return void
- */
- public function testSetDataWithObject()
- {
- $value = [
- 'key' => new \Magento\Framework\DataObject(),
- ];
- $expected = [
- 'key' => [
- 'key' => new \Magento\Framework\DataObject()
- ]
- ];
- $this->model->setData('key', $value);
- $this->assertEquals($expected, $this->model->getData());
- }
- /**
- * @param array $data
- * @param array|bool $expected
- * @return void
- *
- * @dataProvider validateDataProvider
- */
- public function testValidate(array $data, $expected)
- {
- $this->compositeValidatorMock->method('validate')->with($this->model)->willReturn($expected);
- foreach ($data as $key => $value) {
- $this->model->setData($key, $value);
- }
- $actual = $this->model->validate();
- $this->assertEquals($expected, $actual);
- }
- /**
- * @return array
- */
- public function validateDataProvider()
- {
- $countryId = 1;
- $data = [
- 'firstname' => 'First Name',
- 'lastname' => 'Last Name',
- 'street' => "Street 1\nStreet 2",
- 'city' => 'Odessa',
- 'telephone' => '555-55-55',
- 'country_id' => $countryId,
- 'postcode' => 07201,
- 'region_id' => 1,
- 'company' => 'Magento',
- 'fax' => '222-22-22'
- ];
- return [
- 'firstname' => [
- array_merge(array_diff_key($data, ['firstname' => '']), ['country_id' => $countryId++]),
- ['"firstname" is required. Enter and try again.'],
- ],
- 'lastname' => [
- array_merge(array_diff_key($data, ['lastname' => '']), ['country_id' => $countryId++]),
- ['"lastname" is required. Enter and try again.'],
- ],
- 'street' => [
- array_merge(array_diff_key($data, ['street' => '']), ['country_id' => $countryId++]),
- ['"street" is required. Enter and try again.'],
- ],
- 'city' => [
- array_merge(array_diff_key($data, ['city' => '']), ['country_id' => $countryId++]),
- ['"city" is required. Enter and try again.'],
- ],
- 'telephone' => [
- array_merge(array_diff_key($data, ['telephone' => '']), ['country_id' => $countryId++]),
- ['"telephone" is required. Enter and try again.'],
- ],
- 'postcode' => [
- array_merge(array_diff_key($data, ['postcode' => '']), ['country_id' => $countryId++]),
- ['"postcode" is required. Enter and try again.'],
- ],
- 'region_id' => [
- array_merge($data, ['country_id' => $countryId++, 'region_id' => 2]),
- ['Invalid value of "2" provided for the regionId field.'],
- ],
- 'country_id' => [
- array_diff_key($data, ['country_id' => '']),
- ['"countryId" is required. Enter and try again.'],
- ],
- 'validated' => [array_merge($data, ['country_id' => $countryId++]), true],
- ];
- }
- /**
- * @dataProvider getStreetFullDataProvider
- */
- public function testGetStreetFullAlwaysReturnsString($expectedResult, $street)
- {
- $this->model->setData('street', $street);
- $this->assertEquals($expectedResult, $this->model->getStreetFull());
- }
- /**
- * @dataProvider getStreetFullDataProvider
- */
- public function testSetDataStreetAlwaysConvertedToString($expectedResult, $street)
- {
- $this->model->setData('street', $street);
- $this->assertEquals($expectedResult, $this->model->getData('street'));
- }
- /**
- * @return array
- */
- public function getStreetFullDataProvider()
- {
- return [
- [null, null],
- ['', []],
- ["first line\nsecond line", ['first line', 'second line']],
- ['single line', ['single line']],
- ['single line', 'single line'],
- ];
- }
- protected function tearDown()
- {
- $this->objectManager->setBackwardCompatibleProperty(
- $this->model,
- '_countryModels',
- []
- );
- }
- }
|