179 lines
6.1 KiB
PHP
Executable File
179 lines
6.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Magento\ProductVideo;
|
|
|
|
use Magento\Catalog\Api\Data\ProductInterface;
|
|
use Magento\TestFramework\TestCase\WebapiAbstract;
|
|
|
|
/**
|
|
* Test for \Magento\ProductVideo feature
|
|
*
|
|
* @magentoAppIsolation enabled
|
|
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
|
|
*/
|
|
class ProductVideoExternalSourceTest extends WebapiAbstract
|
|
{
|
|
const SERVICE_NAME = 'catalogProductRepositoryV1';
|
|
const SERVICE_VERSION = 'V1';
|
|
const RESOURCE_PATH = '/V1/products';
|
|
|
|
/**
|
|
* Media gallery entries with external videos
|
|
*
|
|
* @return array
|
|
*/
|
|
public function externalVideoDataProvider(): array
|
|
{
|
|
return [
|
|
'youtube-external-video' => [
|
|
[
|
|
'media_type' => 'external-video',
|
|
'disabled' => false,
|
|
'label' => 'Test Video Created',
|
|
'types' => [],
|
|
'position' => 1,
|
|
'content' => $this->getVideoThumbnailStub(),
|
|
'extension_attributes' => [
|
|
'video_content' => [
|
|
'media_type' => 'external-video',
|
|
'video_provider' => 'youtube',
|
|
'video_url' => 'https://www.youtube.com/',
|
|
'video_title' => 'Video title',
|
|
'video_description' => 'Video description',
|
|
'video_metadata' => 'Video meta',
|
|
],
|
|
],
|
|
]
|
|
],
|
|
'vimeo-external-video' => [
|
|
[
|
|
'media_type' => 'external-video',
|
|
'disabled' => false,
|
|
'label' => 'Test Video Updated',
|
|
'types' => [],
|
|
'position' => 1,
|
|
'content' => $this->getVideoThumbnailStub(),
|
|
'extension_attributes' => [
|
|
'video_content' => [
|
|
'media_type' => 'external-video',
|
|
'video_provider' => 'vimeo',
|
|
'video_url' => 'https://www.vimeo.com/',
|
|
'video_title' => 'Video title',
|
|
'video_description' => 'Video description',
|
|
'video_metadata' => 'Video meta',
|
|
],
|
|
],
|
|
]
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Returns the array of data for Video thumbnail
|
|
*
|
|
* @return array|string[]
|
|
*/
|
|
private function getVideoThumbnailStub(): array
|
|
{
|
|
return [
|
|
'type' => 'image/png',
|
|
'name' => 'thumbnail.png',
|
|
'base64_encoded_data' => 'iVBORw0KGgoAAAANSUhEUgAAAP8AAADGCAMAAAAqo6adAAAAA1BMVEUAAP79f'
|
|
. '+LBAAAASElEQVR4nO3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
|
|
. 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAA+BsYAAAF7hZJ0AAAAAElFTkSuQmCC',
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Test create/ update product with external video media gallery entry
|
|
*
|
|
* @dataProvider externalVideoDataProvider
|
|
* @param array $mediaGalleryData
|
|
*/
|
|
public function testCreateWithExternalVideo(array $mediaGalleryData)
|
|
{
|
|
$simpleProductBaseData = $this->getSimpleProductData(
|
|
[
|
|
ProductInterface::NAME => 'Product With Ext. Video',
|
|
ProductInterface::SKU => 'prod-with-ext-video'
|
|
]
|
|
);
|
|
|
|
$simpleProductBaseData['media_gallery_entries'] = [$mediaGalleryData];
|
|
|
|
$response = $this->saveProduct($simpleProductBaseData);
|
|
$this->assertEquals(
|
|
$simpleProductBaseData['media_gallery_entries'][0]['extension_attributes'],
|
|
$response["media_gallery_entries"][0]["extension_attributes"]
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Get Simple Product Data
|
|
*
|
|
* @param array $productData
|
|
* @return array
|
|
*/
|
|
protected function getSimpleProductData($productData = [])
|
|
{
|
|
return [
|
|
ProductInterface::SKU => isset($productData[ProductInterface::SKU])
|
|
? $productData[ProductInterface::SKU] : uniqid('sku-', true),
|
|
ProductInterface::NAME => isset($productData[ProductInterface::NAME])
|
|
? $productData[ProductInterface::NAME] : uniqid('sku-', true),
|
|
ProductInterface::VISIBILITY => 4,
|
|
ProductInterface::TYPE_ID => 'simple',
|
|
ProductInterface::PRICE => 3.62,
|
|
ProductInterface::STATUS => 1,
|
|
ProductInterface::ATTRIBUTE_SET_ID => 4,
|
|
'custom_attributes' => [
|
|
['attribute_code' => 'cost', 'value' => ''],
|
|
['attribute_code' => 'description', 'value' => 'Description'],
|
|
]
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Save Product
|
|
*
|
|
* @param $product
|
|
* @param string|null $storeCode
|
|
* @param string|null $token
|
|
* @return mixed
|
|
*/
|
|
protected function saveProduct($product, $storeCode = null, ?string $token = null)
|
|
{
|
|
if (isset($product['custom_attributes'])) {
|
|
foreach ($product['custom_attributes'] as &$attribute) {
|
|
if ($attribute['attribute_code'] == 'category_ids'
|
|
&& !is_array($attribute['value'])
|
|
) {
|
|
$attribute['value'] = [""];
|
|
}
|
|
}
|
|
}
|
|
$serviceInfo = [
|
|
'rest' => [
|
|
'resourcePath' => self::RESOURCE_PATH,
|
|
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_POST,
|
|
],
|
|
'soap' => [
|
|
'service' => self::SERVICE_NAME,
|
|
'serviceVersion' => self::SERVICE_VERSION,
|
|
'operation' => self::SERVICE_NAME . 'Save',
|
|
],
|
|
];
|
|
if ($token) {
|
|
$serviceInfo['rest']['token'] = $serviceInfo['soap']['token'] = $token;
|
|
}
|
|
$requestData = ['product' => $product];
|
|
|
|
return $this->_webApiCall($serviceInfo, $requestData, null, $storeCode);
|
|
}
|
|
}
|