sampleRepositoryMock = $this->getMockBuilder(SampleRepositoryInterface::class) ->getMockForAbstractClass(); $this->model = new UpdateHandler( $this->sampleRepositoryMock ); } public function testExecute() { $entitySku = 'sku'; $entityStoreId = 0; $sampleId = 11; $sampleToDeleteId = 22; /** @var SampleInterface|\PHPUnit_Framework_MockObject_MockObject $sampleMock */ $sampleMock = $this->getMockBuilder(SampleInterface::class) ->getMock(); $sampleMock->expects($this->exactly(3)) ->method('getId') ->willReturn($sampleId); /** @var SampleInterface|\PHPUnit_Framework_MockObject_MockObject $sampleToDeleteMock */ $sampleToDeleteMock = $this->getMockBuilder(SampleInterface::class) ->getMock(); $sampleToDeleteMock->expects($this->exactly(2)) ->method('getId') ->willReturn($sampleToDeleteId); /** @var ProductExtensionInterface|\PHPUnit_Framework_MockObject_MockObject $productExtensionMock */ $productExtensionMock = $this->getMockBuilder(ProductExtensionInterface::class) ->setMethods(['getDownloadableProductSamples']) ->getMockForAbstractClass(); $productExtensionMock->expects($this->once()) ->method('getDownloadableProductSamples') ->willReturn([$sampleMock]); /** @var ProductInterface|\PHPUnit_Framework_MockObject_MockObject $entityMock */ $entityMock = $this->getMockBuilder(ProductInterface::class) ->setMethods(['getTypeId', 'getExtensionAttributes', 'getSku', 'getStoreId']) ->getMockForAbstractClass(); $entityMock->expects($this->once()) ->method('getTypeId') ->willReturn(Type::TYPE_DOWNLOADABLE); $entityMock->expects($this->once()) ->method('getExtensionAttributes') ->willReturn($productExtensionMock); $entityMock->expects($this->exactly(2)) ->method('getSku') ->willReturn($entitySku); $entityMock->expects($this->once()) ->method('getStoreId') ->willReturn($entityStoreId); $this->sampleRepositoryMock->expects($this->once()) ->method('getList') ->with($entitySku) ->willReturn([$sampleMock, $sampleToDeleteMock]); $this->sampleRepositoryMock->expects($this->once()) ->method('save') ->with($entitySku, $sampleMock, !$entityStoreId); $this->sampleRepositoryMock->expects($this->once()) ->method('delete') ->with($sampleToDeleteId); $this->assertEquals($entityMock, $this->model->execute($entityMock)); } public function testExecuteNonDownloadable() { /** @var ProductInterface|\PHPUnit_Framework_MockObject_MockObject $entityMock */ $entityMock = $this->getMockBuilder(ProductInterface::class) ->setMethods(['getTypeId', 'getExtensionAttributes', 'getSku', 'getStoreId']) ->getMockForAbstractClass(); $entityMock->expects($this->once()) ->method('getTypeId') ->willReturn(Type::TYPE_DOWNLOADABLE . 'some'); $entityMock->expects($this->never()) ->method('getExtensionAttributes'); $entityMock->expects($this->never()) ->method('getSku'); $entityMock->expects($this->never()) ->method('getStoreId'); $this->sampleRepositoryMock->expects($this->never()) ->method('getList'); $this->sampleRepositoryMock->expects($this->never()) ->method('save'); $this->sampleRepositoryMock->expects($this->never()) ->method('delete'); $this->assertEquals($entityMock, $this->model->execute($entityMock)); } }