AreaTest.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\App;
  7. use Zend\Stdlib\Parameters;
  8. class AreaTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\App\Area
  12. */
  13. protected $_model;
  14. public static function tearDownAfterClass()
  15. {
  16. \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\App\CacheInterface::class)
  17. ->clean([\Magento\Theme\Model\Design::CACHE_TAG]);
  18. }
  19. protected function setUp()
  20. {
  21. \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\App\State::class)
  22. ->setAreaCode('frontend');
  23. /** @var $_model \Magento\Framework\App\Area */
  24. $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
  25. \Magento\Framework\App\Area::class,
  26. ['areaCode' => 'frontend']
  27. );
  28. }
  29. /**
  30. * @magentoAppIsolation enabled
  31. */
  32. public function testInitDesign()
  33. {
  34. $defaultTheme = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  35. \Magento\Framework\View\DesignInterface::class
  36. )->setDefaultDesignTheme()->getDesignTheme();
  37. $this->_model->load(\Magento\Framework\App\Area::PART_DESIGN);
  38. $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  39. \Magento\Framework\View\DesignInterface::class
  40. )->setDefaultDesignTheme();
  41. $this->assertEquals($defaultTheme->getThemePath(), $design->getDesignTheme()->getThemePath());
  42. $this->assertEquals('frontend', $design->getArea());
  43. // try second time and make sure it won't load second time
  44. $this->_model->load(\Magento\Framework\App\Area::PART_DESIGN);
  45. $designArea = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  46. \Magento\Framework\View\DesignInterface::class
  47. )->getArea();
  48. $sameDesign = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  49. \Magento\Framework\View\DesignInterface::class
  50. )->setArea(
  51. $designArea
  52. );
  53. $this->assertSame($design, $sameDesign);
  54. }
  55. // @codingStandardsIgnoreStart
  56. /**
  57. * @magentoConfigFixture current_store design/theme/ua_regexp {"_":{"regexp":"\/firefox\/i","value":"Magento\/blank"}}
  58. * @magentoAppIsolation enabled
  59. */
  60. // @codingStandardsIgnoreEnd
  61. public function testDetectDesignUserAgent()
  62. {
  63. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  64. /** @var $request \Magento\TestFramework\Request */
  65. $request = $objectManager->create(\Magento\TestFramework\Request::class);
  66. $request->setServer(new Parameters(['HTTP_USER_AGENT' => 'Mozilla Firefox']));
  67. $this->_model->detectDesign($request);
  68. $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  69. \Magento\Framework\View\DesignInterface::class
  70. );
  71. $this->assertEquals('Magento/blank', $design->getDesignTheme()->getThemePath());
  72. }
  73. // @codingStandardsIgnoreStart
  74. /**
  75. * @magentoConfigFixture current_store design/theme/ua_regexp {"_":{"regexp":"\/firefox\/i","value":"Magento\/blank"}}
  76. * @magentoDataFixture Magento/Theme/_files/design_change.php
  77. * @magentoAppIsolation enabled
  78. */
  79. // @codingStandardsIgnoreEnd
  80. public function testDetectDesignDesignChange()
  81. {
  82. $this->_model->detectDesign();
  83. $design = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
  84. \Magento\Framework\View\DesignInterface::class
  85. );
  86. $this->assertEquals('Magento/luma', $design->getDesignTheme()->getThemePath());
  87. }
  88. // @codingStandardsIgnoreStart
  89. /**
  90. * Test that non-frontend areas are not affected neither by user-agent reg expressions, nor by the "design change"
  91. *
  92. * @magentoConfigFixture current_store design/theme/ua_regexp {"_":{"regexp":"\/firefox\/i","value":"Magento\/blank"}}
  93. * magentoDataFixture Magento/Theme/_files/design_change.php
  94. * @magentoAppIsolation enabled
  95. */
  96. // @codingStandardsIgnoreEnd
  97. public function testDetectDesignNonFrontend()
  98. {
  99. $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
  100. $model = $objectManager->create(\Magento\Framework\App\Area::class, ['areaCode' => 'adminhtml']);
  101. /** @var $request \Magento\TestFramework\Request */
  102. $request = $objectManager->create(\Magento\TestFramework\Request::class);
  103. $request->setServer(new Parameters(['HTTP_USER_AGENT' => 'Mozilla Firefox']));
  104. $model->detectDesign($request);
  105. $design = $objectManager->get(\Magento\Framework\View\DesignInterface::class);
  106. $this->assertNotEquals('Magento/blank', $design->getDesignTheme()->getThemePath());
  107. }
  108. }