ThemePackageInfoTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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\Theme;
  7. use Magento\Theme\Model\Theme\ThemePackageInfo;
  8. class ThemePackageInfoTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var \Magento\Framework\Filesystem\Directory\Read|\PHPUnit_Framework_MockObject_MockObject
  12. */
  13. private $dirRead;
  14. /**
  15. * @var ThemePackageInfo
  16. */
  17. private $themePackageInfo;
  18. /**
  19. * @var \Magento\Framework\Component\ComponentRegistrar|\PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $componentRegistrar;
  22. /**
  23. * @var \Magento\Framework\Filesystem\Directory\ReadFactory|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $dirReadFactory;
  26. /** @var \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject */
  27. private $serializerMock;
  28. protected function setUp()
  29. {
  30. $this->componentRegistrar = $this->createMock(\Magento\Framework\Component\ComponentRegistrar::class);
  31. $this->dirRead = $this->createMock(\Magento\Framework\Filesystem\Directory\Read::class);
  32. $this->dirReadFactory = $this->createMock(\Magento\Framework\Filesystem\Directory\ReadFactory::class);
  33. $this->dirReadFactory->expects($this->any())->method('create')->willReturn($this->dirRead);
  34. $this->serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)
  35. ->getMock();
  36. $this->themePackageInfo = new ThemePackageInfo(
  37. $this->componentRegistrar,
  38. $this->dirReadFactory,
  39. $this->serializerMock
  40. );
  41. }
  42. public function testGetPackageName()
  43. {
  44. $themeFileContents = '{"name": "package"}';
  45. $this->componentRegistrar->expects($this->once())->method('getPath')->willReturn('path/to/A');
  46. $this->dirRead->expects($this->once())->method('isExist')->with('composer.json')->willReturn(true);
  47. $this->dirRead->expects($this->once())
  48. ->method('readFile')
  49. ->with('composer.json')
  50. ->willReturn($themeFileContents);
  51. $this->serializerMock->expects($this->once())
  52. ->method('unserialize')
  53. ->willReturn(json_decode($themeFileContents, true));
  54. $this->assertEquals('package', $this->themePackageInfo->getPackageName('themeA'));
  55. }
  56. public function testGetPackageNameNonExist()
  57. {
  58. $this->componentRegistrar->expects($this->once())->method('getPath')->willReturn('path/to/A');
  59. $this->dirRead->expects($this->once())->method('isExist')->with('composer.json')->willReturn(false);
  60. $this->dirRead->expects($this->never())->method('readFile')->with('composer.json');
  61. $this->assertEquals('', $this->themePackageInfo->getPackageName('themeA'));
  62. }
  63. public function testGetFullThemePath()
  64. {
  65. $themeFileContents = '{"name": "package"}';
  66. $this->componentRegistrar->expects($this->once())->method('getPaths')->willReturn(['themeA' => 'path/to/A']);
  67. $this->dirRead->expects($this->once())->method('isExist')->willReturn(true);
  68. $this->dirRead->expects($this->once())->method('readFile')->willReturn($themeFileContents);
  69. $this->serializerMock->expects($this->once())
  70. ->method('unserialize')
  71. ->willReturn(json_decode($themeFileContents, true));
  72. $this->assertEquals('themeA', $this->themePackageInfo->getFullThemePath('package'));
  73. // call one more time to make sure only initialize once
  74. $this->assertEquals('themeA', $this->themePackageInfo->getFullThemePath('package'));
  75. }
  76. public function testGetFullThemePathNonExist()
  77. {
  78. $this->componentRegistrar->expects($this->once())->method('getPaths')->willReturn(['themeA' => 'path/to/A']);
  79. $this->dirRead->expects($this->once())->method('isExist')->willReturn(true);
  80. $this->dirRead->expects($this->once())->method('readFile')->willReturn('{"name": "package"}');
  81. $this->assertEquals('', $this->themePackageInfo->getFullThemePath('package-other'));
  82. }
  83. public function testGetPackageNameInvalidJson()
  84. {
  85. $this->componentRegistrar->expects($this->once())->method('getPath')->willReturn('path/to/A');
  86. $this->dirRead->expects($this->once())->method('isExist')->willReturn(true);
  87. $this->dirRead->expects($this->once())->method('readFile')->willReturn('{"name": }');
  88. $this->serializerMock->expects($this->once())
  89. ->method('unserialize')
  90. ->willReturn(null);
  91. $this->assertEquals('', $this->themePackageInfo->getPackageName('themeA'));
  92. }
  93. }