WebsiteRepositoryTest.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Store\Test\Unit\Model;
  7. use Magento\Framework\App\Config;
  8. class WebsiteRepositoryTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Store\Model\WebsiteRepository
  12. */
  13. protected $model;
  14. /**
  15. * @var \Magento\Store\Model\WebsiteFactory|\PHPUnit_Framework_MockObject_MockObject
  16. */
  17. protected $websiteFactoryMock;
  18. /**
  19. * @var \Magento\Store\Model\ResourceModel\Website\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. protected $websiteCollectionFactoryMock;
  22. /**
  23. * @var Config | \PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $appConfigMock;
  26. protected function setUp()
  27. {
  28. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  29. $this->websiteFactoryMock =
  30. $this->getMockBuilder(\Magento\Store\Model\WebsiteFactory::class)
  31. ->disableOriginalConstructor()
  32. ->setMethods(['create'])
  33. ->getMock();
  34. $this->websiteCollectionFactoryMock =
  35. $this->getMockBuilder(\Magento\Store\Model\ResourceModel\Website\CollectionFactory::class)
  36. ->disableOriginalConstructor()
  37. ->setMethods(['create'])
  38. ->getMock();
  39. $this->model = $objectManager->getObject(
  40. \Magento\Store\Model\WebsiteRepository::class,
  41. [
  42. 'factory' => $this->websiteFactoryMock,
  43. 'websiteCollectionFactory' => $this->websiteCollectionFactoryMock
  44. ]
  45. );
  46. $this->appConfigMock = $this->getMockBuilder(Config::class)
  47. ->disableOriginalConstructor()
  48. ->getMock();
  49. $this->initDistroList();
  50. }
  51. private function initDistroList()
  52. {
  53. $repositoryReflection = new \ReflectionClass($this->model);
  54. $deploymentProperty = $repositoryReflection->getProperty('appConfig');
  55. $deploymentProperty->setAccessible(true);
  56. $deploymentProperty->setValue($this->model, $this->appConfigMock);
  57. }
  58. public function testGetDefault()
  59. {
  60. $websiteMock = $this->getMockBuilder(\Magento\Store\Api\Data\WebsiteInterface::class)
  61. ->disableOriginalConstructor()
  62. ->setMethods([])
  63. ->getMock();
  64. $this->appConfigMock->expects($this->once())
  65. ->method('get')
  66. ->with('scopes', 'websites')
  67. ->willReturn([
  68. 'some_code' => [
  69. 'code' => 'some_code',
  70. 'is_default' => 1
  71. ],
  72. 'some_code_2' => [
  73. 'code' => 'some_code_2',
  74. 'is_default' => 0
  75. ]
  76. ]);
  77. $this->websiteFactoryMock->expects($this->at(0))
  78. ->method('create')
  79. ->willReturn($websiteMock);
  80. $website = $this->model->getDefault();
  81. $this->assertInstanceOf(\Magento\Store\Api\Data\WebsiteInterface::class, $website);
  82. $this->assertEquals($websiteMock, $website);
  83. }
  84. /**
  85. * @expectedException \DomainException
  86. */
  87. public function testGetDefaultIsSeveral()
  88. {
  89. $websiteMock = $this->getMockBuilder(\Magento\Store\Api\Data\WebsiteInterface::class)
  90. ->disableOriginalConstructor()
  91. ->setMethods([])
  92. ->getMock();
  93. $this->appConfigMock->expects($this->once())
  94. ->method('get')
  95. ->with('scopes', 'websites')
  96. ->willReturn([
  97. 'some_code' => [
  98. 'code' => 'some_code',
  99. 'is_default' => 1
  100. ],
  101. 'some_code_2' => [
  102. 'code' => 'some_code_2',
  103. 'is_default' => 1
  104. ]
  105. ]);
  106. $this->websiteFactoryMock->expects($this->any())->method('create')->willReturn($websiteMock);
  107. $this->model->getDefault();
  108. $this->expectExceptionMessage(
  109. "The default website is invalid. Make sure no more than one default is defined and try again."
  110. );
  111. }
  112. /**
  113. * @expectedException \DomainException
  114. * @expectedExceptionMessage The default website isn't defined. Set the website and try again.
  115. */
  116. public function testGetDefaultIsZero()
  117. {
  118. $websiteMock = $this->getMockBuilder(\Magento\Store\Api\Data\WebsiteInterface::class)
  119. ->disableOriginalConstructor()
  120. ->setMethods([])
  121. ->getMock();
  122. $this->appConfigMock->expects($this->once())
  123. ->method('get')
  124. ->with('scopes', 'websites')
  125. ->willReturn([
  126. 'some_code' => [
  127. 'code' => 'some_code',
  128. 'is_default' => 0
  129. ],
  130. 'some_code_2' => [
  131. 'code' => 'some_code_2',
  132. 'is_default' => 0
  133. ]
  134. ]);
  135. $this->websiteFactoryMock->expects($this->any())->method('create')->willReturn($websiteMock);
  136. $this->model->getDefault();
  137. }
  138. }