UpdateHandlerTest.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Downloadable\Test\Unit\Model\Sample;
  7. use Magento\Catalog\Api\Data\ProductExtensionInterface;
  8. use Magento\Catalog\Api\Data\ProductInterface;
  9. use Magento\Downloadable\Api\Data\SampleInterface;
  10. use Magento\Downloadable\Api\SampleRepositoryInterface;
  11. use Magento\Downloadable\Model\Sample\UpdateHandler;
  12. use Magento\Downloadable\Model\Product\Type;
  13. class UpdateHandlerTest extends \PHPUnit\Framework\TestCase
  14. {
  15. /** @var UpdateHandler */
  16. protected $model;
  17. /** @var SampleRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject */
  18. protected $sampleRepositoryMock;
  19. protected function setUp()
  20. {
  21. $this->sampleRepositoryMock = $this->getMockBuilder(SampleRepositoryInterface::class)
  22. ->getMockForAbstractClass();
  23. $this->model = new UpdateHandler(
  24. $this->sampleRepositoryMock
  25. );
  26. }
  27. public function testExecute()
  28. {
  29. $entitySku = 'sku';
  30. $entityStoreId = 0;
  31. $sampleId = 11;
  32. $sampleToDeleteId = 22;
  33. /** @var SampleInterface|\PHPUnit_Framework_MockObject_MockObject $sampleMock */
  34. $sampleMock = $this->getMockBuilder(SampleInterface::class)
  35. ->getMock();
  36. $sampleMock->expects($this->exactly(3))
  37. ->method('getId')
  38. ->willReturn($sampleId);
  39. /** @var SampleInterface|\PHPUnit_Framework_MockObject_MockObject $sampleToDeleteMock */
  40. $sampleToDeleteMock = $this->getMockBuilder(SampleInterface::class)
  41. ->getMock();
  42. $sampleToDeleteMock->expects($this->exactly(2))
  43. ->method('getId')
  44. ->willReturn($sampleToDeleteId);
  45. /** @var ProductExtensionInterface|\PHPUnit_Framework_MockObject_MockObject $productExtensionMock */
  46. $productExtensionMock = $this->getMockBuilder(ProductExtensionInterface::class)
  47. ->setMethods(['getDownloadableProductSamples'])
  48. ->getMockForAbstractClass();
  49. $productExtensionMock->expects($this->once())
  50. ->method('getDownloadableProductSamples')
  51. ->willReturn([$sampleMock]);
  52. /** @var ProductInterface|\PHPUnit_Framework_MockObject_MockObject $entityMock */
  53. $entityMock = $this->getMockBuilder(ProductInterface::class)
  54. ->setMethods(['getTypeId', 'getExtensionAttributes', 'getSku', 'getStoreId'])
  55. ->getMockForAbstractClass();
  56. $entityMock->expects($this->once())
  57. ->method('getTypeId')
  58. ->willReturn(Type::TYPE_DOWNLOADABLE);
  59. $entityMock->expects($this->once())
  60. ->method('getExtensionAttributes')
  61. ->willReturn($productExtensionMock);
  62. $entityMock->expects($this->exactly(2))
  63. ->method('getSku')
  64. ->willReturn($entitySku);
  65. $entityMock->expects($this->once())
  66. ->method('getStoreId')
  67. ->willReturn($entityStoreId);
  68. $this->sampleRepositoryMock->expects($this->once())
  69. ->method('getList')
  70. ->with($entitySku)
  71. ->willReturn([$sampleMock, $sampleToDeleteMock]);
  72. $this->sampleRepositoryMock->expects($this->once())
  73. ->method('save')
  74. ->with($entitySku, $sampleMock, !$entityStoreId);
  75. $this->sampleRepositoryMock->expects($this->once())
  76. ->method('delete')
  77. ->with($sampleToDeleteId);
  78. $this->assertEquals($entityMock, $this->model->execute($entityMock));
  79. }
  80. public function testExecuteNonDownloadable()
  81. {
  82. /** @var ProductInterface|\PHPUnit_Framework_MockObject_MockObject $entityMock */
  83. $entityMock = $this->getMockBuilder(ProductInterface::class)
  84. ->setMethods(['getTypeId', 'getExtensionAttributes', 'getSku', 'getStoreId'])
  85. ->getMockForAbstractClass();
  86. $entityMock->expects($this->once())
  87. ->method('getTypeId')
  88. ->willReturn(Type::TYPE_DOWNLOADABLE . 'some');
  89. $entityMock->expects($this->never())
  90. ->method('getExtensionAttributes');
  91. $entityMock->expects($this->never())
  92. ->method('getSku');
  93. $entityMock->expects($this->never())
  94. ->method('getStoreId');
  95. $this->sampleRepositoryMock->expects($this->never())
  96. ->method('getList');
  97. $this->sampleRepositoryMock->expects($this->never())
  98. ->method('save');
  99. $this->sampleRepositoryMock->expects($this->never())
  100. ->method('delete');
  101. $this->assertEquals($entityMock, $this->model->execute($entityMock));
  102. }
  103. }