public function testIsSalable() { $productMock = $this->getMockBuilder('\\Magento\\Catalog\\Model\\Product')->setMethods(['__wakeup', 'getStatus', 'hasData', 'getData', 'getStoreId', 'setData'])->disableOriginalConstructor()->getMock(); $childProductMock = $this->getMockBuilder('\\Magento\\Catalog\\Model\\Product')->setMethods(['__wakeup', 'isSalable'])->disableOriginalConstructor()->getMock(); $productMock->expects($this->once())->method('getStatus')->willReturn(1); $productMock->expects($this->any())->method('hasData')->willReturn(true); $productMock->expects($this->at(2))->method('getData')->with('is_salable')->willReturn(true); $productMock->expects($this->once())->method('getStoreId')->willReturn(1); $productMock->expects($this->once())->method('setData')->willReturnSelf(); $productMock->expects($this->at(6))->method('getData')->willReturn([$childProductMock]); $childProductMock->expects($this->once())->method('isSalable')->willReturn(true); $this->assertTrue($this->_model->isSalable($productMock)); }