BackendModelFactoryTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Test\Unit\Model\Design;
  7. class BackendModelFactoryTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /** @var \Magento\Theme\Model\Design\BackendModelFactory */
  10. protected $model;
  11. /** @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
  12. protected $objectManagerMock;
  13. /** @var \Magento\Theme\Model\Design\Config\MetadataProvider|\PHPUnit_Framework_MockObject_MockObject */
  14. protected $metadataProviderMock;
  15. /**
  16. * @var \Magento\Theme\Model\ResourceModel\Design\Config\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
  17. */
  18. protected $collectionFactoryMock;
  19. /** @var \Magento\Theme\Model\ResourceModel\Design\Config\Collection|\PHPUnit_Framework_MockObject_MockObject */
  20. protected $collection;
  21. /** @var \Magento\Framework\App\Config\Value|\PHPUnit_Framework_MockObject_MockObject */
  22. protected $backendModel;
  23. protected function setUp()
  24. {
  25. $this->objectManagerMock = $this->getMockBuilder(\Magento\Framework\ObjectManagerInterface::class)
  26. ->getMockForAbstractClass();
  27. $this->metadataProviderMock = $this->getMockBuilder(\Magento\Theme\Model\Design\Config\MetadataProvider::class)
  28. ->disableOriginalConstructor()
  29. ->getMock();
  30. $this->collectionFactoryMock = $this->getMockBuilder(
  31. \Magento\Theme\Model\ResourceModel\Design\Config\CollectionFactory::class
  32. )
  33. ->disableOriginalConstructor()
  34. ->setMethods(['create'])
  35. ->getMock();
  36. $this->collection = $this->getMockBuilder(\Magento\Theme\Model\ResourceModel\Design\Config\Collection::class)
  37. ->disableOriginalConstructor()
  38. ->getMock();
  39. $this->backendModel = $this->getMockBuilder(\Magento\Framework\App\Config\Value::class)
  40. ->disableOriginalConstructor()
  41. ->setMethods(['setValue'])
  42. ->getMock();
  43. $this->model = new \Magento\Theme\Model\Design\BackendModelFactory(
  44. $this->objectManagerMock,
  45. $this->metadataProviderMock,
  46. $this->collectionFactoryMock
  47. );
  48. }
  49. public function testCreate()
  50. {
  51. $scope = 'website';
  52. $scopeId = 1;
  53. $data = [
  54. 'scope' => $scope,
  55. 'scopeId' => $scopeId,
  56. 'value' => 'value',
  57. 'config' => [
  58. 'path' => 'design/head/default_title',
  59. 'backend_model' => \Magento\Framework\App\Config\Value::class
  60. ]
  61. ];
  62. $this->metadataProviderMock->expects($this->once())
  63. ->method('get')
  64. ->willReturn([
  65. 'head_default_title' => [
  66. 'path' => 'design/head/default_title'
  67. ]
  68. ]);
  69. $this->collectionFactoryMock->expects($this->once())
  70. ->method('create')
  71. ->willReturn($this->collection);
  72. $this->collection->expects($this->once())
  73. ->method('addPathsFilter')
  74. ->with(['head_default_title' => 'design/head/default_title']);
  75. $this->collection->expects($this->once())
  76. ->method('addFieldToFilter')
  77. ->with('scope', $scope);
  78. $this->collection->expects($this->once())
  79. ->method('addScopeIdFilter')
  80. ->with($scopeId);
  81. $this->collection->expects($this->once())
  82. ->method('getData')
  83. ->willReturn([
  84. [
  85. 'config_id' => 1,
  86. 'path' => 'design/head/default_title'
  87. ]
  88. ]);
  89. $this->objectManagerMock->expects($this->once())
  90. ->method('create')
  91. ->with(
  92. \Magento\Framework\App\Config\Value::class,
  93. [
  94. 'data' => [
  95. 'path' => 'design/head/default_title',
  96. 'scope' => $scope,
  97. 'scope_id' => $scopeId,
  98. 'field_config' => $data['config'],
  99. 'config_id' => 1
  100. ]
  101. ]
  102. )
  103. ->willReturn($this->backendModel);
  104. $this->backendModel->expects($this->once())
  105. ->method('setValue')
  106. ->willReturn('value');
  107. $this->assertSame($this->backendModel, $this->model->create($data));
  108. }
  109. public function testCreateByPath()
  110. {
  111. $path = 'design/head/default_title';
  112. $backendModelType = \Magento\Theme\Model\Design\Backend\Exceptions::class;
  113. $backendModel = $this->getMockBuilder($backendModelType)
  114. ->disableOriginalConstructor()
  115. ->getMock();
  116. $this->metadataProviderMock->expects($this->once())
  117. ->method('get')
  118. ->willReturn([
  119. 'head_default_title' => [
  120. 'path' => $path,
  121. 'backend_model' => $backendModelType
  122. ]
  123. ]);
  124. $this->objectManagerMock->expects($this->once())
  125. ->method('create')
  126. ->with($backendModelType, ['data' => []])
  127. ->willReturn($backendModel);
  128. $this->assertEquals($backendModel, $this->model->createByPath($path));
  129. }
  130. }