public function testSaveExistingWithNewMediaGalleryEntries()
 {
     $newEntriesData = [["label" => "label_text", 'position' => 10, 'disabled' => false, 'types' => ['image', 'small_image'], 'content' => ['name' => 'filename', 'mime_type' => 'image/jpeg', 'entry_data' => 'encoded_content']]];
     $this->setupProductMocksForSave();
     //media gallery data
     $this->productData['media_gallery_entries'] = $newEntriesData;
     $this->extensibleDataObjectConverterMock->expects($this->once())->method('toNestedArray')->will($this->returnValue($this->productData));
     $this->initializedProductMock->setData('media_gallery', []);
     $this->initializedProductMock->expects($this->any())->method('getMediaAttributes')->willReturn(["image" => "imageAttribute", "small_image" => "small_image_attribute"]);
     //setup media attribute backend
     $mediaTmpPath = '/tmp';
     $relativePath = $mediaTmpPath . DIRECTORY_SEPARATOR . 'filename.jpg';
     $absolutePath = '/a/b/filename.jpg';
     $galleryAttributeBackendMock = $this->getMockBuilder('\\Magento\\Catalog\\Model\\Product\\Attribute\\Backend\\Media')->disableOriginalConstructor()->getMock();
     $galleryAttributeBackendMock->expects($this->once())->method('clearMediaAttribute')->with($this->initializedProductMock, ['image', 'small_image']);
     $mediaConfigMock = $this->getMockBuilder('Magento\\Catalog\\Model\\Product\\Media\\Config')->disableOriginalConstructor()->getMock();
     $mediaConfigMock->expects($this->once())->method('getBaseTmpMediaPath')->willReturn($mediaTmpPath);
     $directoryWriteMock = $this->getMockBuilder('\\Magento\\Framework\\Filesystem\\Directory\\WriteInterface')->getMockForAbstractClass();
     $this->fileSystemMock->expects($this->once())->method('getDirectoryWrite')->willReturn($directoryWriteMock);
     $directoryWriteMock->expects($this->once())->method('create')->with($mediaTmpPath);
     $this->mimeTypeExtensionMapMock->expects($this->once())->method('getMimeTypeExtension')->with('image/jpeg')->willReturn("jpg");
     $directoryWriteMock->expects($this->once())->method('writeFile')->with($relativePath, false);
     //decoded value is false as it contains '_'
     $directoryWriteMock->expects($this->once())->method('getAbsolutePath')->willReturn($absolutePath);
     $this->initializedProductMock->expects($this->any())->method('getGalleryAttributeBackend')->willReturn($galleryAttributeBackendMock);
     $this->initializedProductMock->expects($this->once())->method('getMediaConfig')->willReturn($mediaConfigMock);
     //verify new entries
     $contentDataObject = $this->getMockBuilder('Magento\\Catalog\\Model\\Product\\Media\\GalleryEntryContent')->disableOriginalConstructor()->setMethods(null)->getMock();
     $this->contentFactoryMock->expects($this->once())->method('create')->willReturn($contentDataObject);
     $this->contentValidatorMock->expects($this->once())->method('isValid')->willReturn(true);
     $imageFileUri = "imageFileUri";
     $galleryAttributeBackendMock->expects($this->once())->method('addImage')->with($this->initializedProductMock, $absolutePath, ['image', 'small_image'], true, false)->willReturn($imageFileUri);
     $galleryAttributeBackendMock->expects($this->once())->method('updateImage')->with($this->initializedProductMock, $imageFileUri, ['label' => 'label_text', 'position' => 10, 'disabled' => false]);
     $this->model->save($this->productMock);
 }