diff --git a/app/code/Magento/Bundle/Model/Product/CopyConstructor/Bundle.php b/app/code/Magento/Bundle/Model/Product/CopyConstructor/Bundle.php index 61559df4d2cf6..20e4828835d06 100644 --- a/app/code/Magento/Bundle/Model/Product/CopyConstructor/Bundle.php +++ b/app/code/Magento/Bundle/Model/Product/CopyConstructor/Bundle.php @@ -27,7 +27,17 @@ public function build(Product $product, Product $duplicate) $bundleOptions = $product->getExtensionAttributes()->getBundleProductOptions() ?: []; $duplicatedBundleOptions = []; foreach ($bundleOptions as $key => $bundleOption) { - $duplicatedBundleOptions[$key] = clone $bundleOption; + $duplicatedBundleOption = clone $bundleOption; + /** + * Set option and selection ids to 'null' in order to create new option(selection) for duplicated product, + * but not modifying existing one, which led to lost of option(selection) in original product. + */ + $productLinks = $duplicatedBundleOption->getProductLinks() ?: []; + foreach ($productLinks as $productLink) { + $productLink->setSelectionId(null); + } + $duplicatedBundleOption->setOptionId(null); + $duplicatedBundleOptions[$key] = $duplicatedBundleOption; } $duplicate->getExtensionAttributes()->setBundleProductOptions($duplicatedBundleOptions); } diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php index 831098cc44c38..4df60d07d98ef 100644 --- a/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php +++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php @@ -6,6 +6,7 @@ namespace Magento\Bundle\Test\Unit\Model\Product\CopyConstructor; use Magento\Bundle\Api\Data\BundleOptionInterface; +use Magento\Bundle\Model\Link; use Magento\Bundle\Model\Product\CopyConstructor\Bundle; use Magento\Catalog\Api\Data\ProductExtensionInterface; use Magento\Catalog\Model\Product; @@ -45,6 +46,7 @@ public function testBuildNegative() */ public function testBuildPositive() { + /** @var Product|\PHPUnit_Framework_MockObject_MockObject $product */ $product = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); @@ -60,18 +62,42 @@ public function testBuildPositive() ->method('getExtensionAttributes') ->willReturn($extensionAttributesProduct); + $productLink = $this->getMockBuilder(Link::class) + ->setMethods(['setSelectionId']) + ->disableOriginalConstructor() + ->getMock(); + $productLink->expects($this->exactly(2)) + ->method('setSelectionId') + ->with($this->identicalTo(null)); + $firstOption = $this->getMockBuilder(BundleOptionInterface::class) + ->setMethods(['getProductLinks']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $firstOption->expects($this->once()) + ->method('getProductLinks') + ->willReturn([$productLink]); + $firstOption->expects($this->once()) + ->method('setOptionId') + ->with($this->identicalTo(null)); + $secondOption = $this->getMockBuilder(BundleOptionInterface::class) + ->setMethods(['getProductLinks']) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $secondOption->expects($this->once()) + ->method('getProductLinks') + ->willReturn([$productLink]); + $secondOption->expects($this->once()) + ->method('setOptionId') + ->with($this->identicalTo(null)); $bundleOptions = [ - $this->getMockBuilder(BundleOptionInterface::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass(), - $this->getMockBuilder(BundleOptionInterface::class) - ->disableOriginalConstructor() - ->getMockForAbstractClass() + $firstOption, + $secondOption ]; $extensionAttributesProduct->expects($this->once()) ->method('getBundleProductOptions') ->willReturn($bundleOptions); + /** @var Product|\PHPUnit_Framework_MockObject_MockObject $duplicate */ $duplicate = $this->getMockBuilder(Product::class) ->disableOriginalConstructor() ->getMock(); diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php index 91f589f9b5bd7..971f34e02f9e5 100644 --- a/app/code/Magento/Catalog/Model/Product/Image.php +++ b/app/code/Magento/Catalog/Model/Product/Image.php @@ -9,6 +9,7 @@ use Magento\Framework\App\Filesystem\DirectoryList; use Magento\Framework\App\ObjectManager; use Magento\Framework\Image as MagentoImage; +use Magento\Framework\Serialize\SerializerInterface; /** * @method string getFile() @@ -172,6 +173,16 @@ class Image extends \Magento\Framework\Model\AbstractModel */ private $imageAsset; + /** + * @var string + */ + private $cachePrefix = 'IMG_INFO'; + + /** + * @var SerializerInterface + */ + private $serializer; + /** * Constructor * @@ -190,6 +201,7 @@ class Image extends \Magento\Framework\Model\AbstractModel * @param array $data * @param \Magento\Catalog\Model\View\Asset\ImageFactory|null $viewAssetImageFactory * @param \Magento\Catalog\Model\View\Asset\PlaceholderFactory|null $viewAssetPlaceholderFactory + * @param SerializerInterface|null $serializer * @SuppressWarnings(PHPMD.ExcessiveParameterList) * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ @@ -208,7 +220,8 @@ public function __construct( \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null, array $data = [], \Magento\Catalog\Model\View\Asset\ImageFactory $viewAssetImageFactory = null, - \Magento\Catalog\Model\View\Asset\PlaceholderFactory $viewAssetPlaceholderFactory = null + \Magento\Catalog\Model\View\Asset\PlaceholderFactory $viewAssetPlaceholderFactory = null, + SerializerInterface $serializer = null ) { $this->_storeManager = $storeManager; $this->_catalogProductMediaConfig = $catalogProductMediaConfig; @@ -223,6 +236,7 @@ public function __construct( ->get(\Magento\Catalog\Model\View\Asset\ImageFactory::class); $this->viewAssetPlaceholderFactory = $viewAssetPlaceholderFactory ?: ObjectManager::getInstance() ->get(\Magento\Catalog\Model\View\Asset\PlaceholderFactory::class); + $this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class); } /** @@ -356,86 +370,6 @@ public function setSize($size) return $this; } - /** - * @param string|null $file - * @return bool - */ - protected function _checkMemory($file = null) - { - return $this->_getMemoryLimit() > $this->_getMemoryUsage() + $this->_getNeedMemoryForFile( - $file - ) - || $this->_getMemoryLimit() == -1; - } - - /** - * @return string - */ - protected function _getMemoryLimit() - { - $memoryLimit = trim(strtoupper(ini_get('memory_limit'))); - - if (!isset($memoryLimit[0])) { - $memoryLimit = "128M"; - } - - if (substr($memoryLimit, -1) == 'K') { - return substr($memoryLimit, 0, -1) * 1024; - } - if (substr($memoryLimit, -1) == 'M') { - return substr($memoryLimit, 0, -1) * 1024 * 1024; - } - if (substr($memoryLimit, -1) == 'G') { - return substr($memoryLimit, 0, -1) * 1024 * 1024 * 1024; - } - return $memoryLimit; - } - - /** - * @return int - */ - protected function _getMemoryUsage() - { - if (function_exists('memory_get_usage')) { - return memory_get_usage(); - } - return 0; - } - - /** - * @param string|null $file - * @return float|int - * @SuppressWarnings(PHPMD.NPathComplexity) - */ - protected function _getNeedMemoryForFile($file = null) - { - $file = $file === null ? $this->getBaseFile() : $file; - if (!$file) { - return 0; - } - - if (!$this->_mediaDirectory->isExist($file)) { - return 0; - } - - $imageInfo = getimagesize($this->_mediaDirectory->getAbsolutePath($file)); - - if (!isset($imageInfo[0]) || !isset($imageInfo[1])) { - return 0; - } - if (!isset($imageInfo['channels'])) { - // if there is no info about this parameter lets set it for maximum - $imageInfo['channels'] = 4; - } - if (!isset($imageInfo['bits'])) { - // if there is no info about this parameter lets set it for maximum - $imageInfo['bits'] = 8; - } - return round( - ($imageInfo[0] * $imageInfo[1] * $imageInfo['bits'] * $imageInfo['channels'] / 8 + Pow(2, 16)) * 1.65 - ); - } - /** * Convert array of 3 items (decimal r, g, b) to string of their hex values * @@ -472,9 +406,7 @@ public function setBaseFile($file) 'filePath' => $file, ] ); - if ($file == 'no_selection' || !$this->_fileExists($this->imageAsset->getSourceFile()) - || !$this->_checkMemory($this->imageAsset->getSourceFile()) - ) { + if ($file == 'no_selection' || !$this->_fileExists($this->imageAsset->getSourceFile())) { $this->_isBaseFilePlaceholder = true; $this->imageAsset = $this->viewAssetPlaceholderFactory->create( [ @@ -682,11 +614,14 @@ public function getDestinationSubdir() } /** - * @return bool|void + * @return bool */ public function isCached() { - return file_exists($this->imageAsset->getPath()); + return ( + is_array($this->loadImageInfoFromCache($this->imageAsset->getPath())) || + file_exists($this->imageAsset->getPath()) + ); } /** @@ -856,6 +791,7 @@ public function clearCache() $this->_mediaDirectory->delete($directory); $this->_coreFileStorageDatabase->deleteFolder($this->_mediaDirectory->getAbsolutePath($directory)); + $this->clearImageInfoFromCache(); } /** @@ -890,7 +826,7 @@ public function getResizedImageInfo() $image = $this->imageAsset->getPath(); } - $imageProperties = getimagesize($image); + $imageProperties = $this->getimagesize($image); return $imageProperties; } finally { @@ -932,4 +868,66 @@ private function getMiscParams() return $miscParams; } + + /** + * Get image size + * + * @param string $imagePath + * @return array + */ + private function getImageSize($imagePath) + { + $imageInfo = $this->loadImageInfoFromCache($imagePath); + if (!isset($imageInfo['size'])) { + $imageSize = getimagesize($imagePath); + $this->saveImageInfoToCache(['size' => $imageSize], $imagePath); + return $imageSize; + } else { + return $imageInfo['size']; + } + } + + /** + * Save image data to cache + * + * @param array $imageInfo + * @param string $imagePath + * @return void + */ + private function saveImageInfoToCache(array $imageInfo, string $imagePath) + { + $imagePath = $this->cachePrefix . $imagePath; + $this->_cacheManager->save( + $this->serializer->serialize($imageInfo), + $imagePath, + [$this->cachePrefix] + ); + } + + /** + * Load image data from cache + * + * @param string $imagePath + * @return array|false + */ + private function loadImageInfoFromCache(string $imagePath) + { + $imagePath = $this->cachePrefix . $imagePath; + $cacheData = $this->_cacheManager->load($imagePath); + if (!$cacheData) { + return false; + } else { + return $this->serializer->unserialize($cacheData); + } + } + + /** + * Clear image data from cache + * + * @return void + */ + private function clearImageInfoFromCache() + { + $this->_cacheManager->clean([$this->cachePrefix]); + } } diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php index f918692cb2753..627aa1848506e 100644 --- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php +++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ImageTest.php @@ -5,12 +5,10 @@ */ namespace Magento\Catalog\Test\Unit\Model\Product; -use Magento\Catalog\Model\View\Asset\Image\ContextFactory; use Magento\Catalog\Model\View\Asset\ImageFactory; use Magento\Catalog\Model\View\Asset\PlaceholderFactory; use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper; use Magento\Framework\App\Filesystem\DirectoryList; -use Magento\Framework\View\Asset\ContextInterface; /** * @SuppressWarnings(PHPMD.CouplingBetweenObjects) @@ -73,10 +71,24 @@ class ImageTest extends \PHPUnit\Framework\TestCase */ private $viewAssetPlaceholderFactory; + /** + * @var \Magento\Framework\Serialize\SerializerInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $serializer; + + /** + * @var \Magento\Framework\App\CacheInterface|\PHPUnit_Framework_MockObject_MockObject + */ + private $cacheManager; + protected function setUp() { $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); $this->context = $this->createMock(\Magento\Framework\Model\Context::class); + $this->cacheManager = $this->getMockBuilder(\Magento\Framework\App\CacheInterface::class) + ->disableOriginalConstructor() + ->getMockForAbstractClass(); + $this->context->expects($this->any())->method('getCacheManager')->will($this->returnValue($this->cacheManager)); $this->storeManager = $this->getMockBuilder(\Magento\Store\Model\StoreManager::class) ->disableOriginalConstructor() @@ -112,17 +124,36 @@ protected function setUp() ->disableOriginalConstructor() ->setMethods(['create']) ->getMock(); + $this->serializer = $this->getMockBuilder( + \Magento\Framework\Serialize\SerializerInterface::class + )->getMockForAbstractClass(); + $this->serializer->expects($this->any()) + ->method('serialize') + ->willReturnCallback( + function ($value) { + return json_encode($value); + } + ); + $this->serializer->expects($this->any()) + ->method('unserialize') + ->willReturnCallback( + function ($value) { + return json_decode($value, true); + } + ); $this->image = $objectManager->getObject( \Magento\Catalog\Model\Product\Image::class, [ + 'context' => $this->context, 'storeManager' => $this->storeManager, 'catalogProductMediaConfig' => $this->config, 'coreFileStorageDatabase' => $this->coreFileHelper, 'filesystem' => $this->filesystem, 'imageFactory' => $this->factory, 'viewAssetImageFactory' => $this->viewAssetImageFactory, - 'viewAssetPlaceholderFactory' => $this->viewAssetPlaceholderFactory + 'viewAssetPlaceholderFactory' => $this->viewAssetPlaceholderFactory, + 'serializer' => $this->serializer ] ); @@ -354,12 +385,16 @@ public function testIsCached() $this->testSetGetBaseFile(); $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/watermark/somefile.png'; $this->imageAsset->expects($this->any())->method('getPath')->willReturn($absolutePath); + $this->cacheManager->expects($this->once())->method('load')->willReturn( + json_encode(['size' => ['image data']]) + ); $this->assertTrue($this->image->isCached()); } public function testClearCache() { $this->coreFileHelper->expects($this->once())->method('deleteFolder')->will($this->returnValue(true)); + $this->cacheManager->expects($this->once())->method('clean'); $this->image->clearCache(); } @@ -383,4 +418,24 @@ public function testIsBaseFilePlaceholder() { $this->assertFalse($this->image->isBaseFilePlaceholder()); } + + public function testGetResizedImageInfoWithCache() + { + $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/watermark/somefile.png'; + $this->imageAsset->expects($this->any())->method('getPath')->willReturn($absolutePath); + $this->cacheManager->expects($this->once())->method('load')->willReturn( + json_encode(['size' => ['image data']]) + ); + $this->cacheManager->expects($this->never())->method('save'); + $this->assertEquals(['image data'], $this->image->getResizedImageInfo()); + } + + public function testGetResizedImageInfoEmptyCache() + { + $absolutePath = dirname(dirname(__DIR__)) . '/_files/catalog/product/watermark/somefile.png'; + $this->imageAsset->expects($this->any())->method('getPath')->willReturn($absolutePath); + $this->cacheManager->expects($this->once())->method('load')->willReturn(false); + $this->cacheManager->expects($this->once())->method('save'); + $this->assertTrue(is_array($this->image->getResizedImageInfo())); + } } diff --git a/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php b/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php index e5154a10f0a19..6a723f5c22c5a 100644 --- a/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php +++ b/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php @@ -145,7 +145,7 @@ public function __construct( /** * @inheritdoc */ - public function save(\Magento\CatalogInventory\Api\Data\StockItemInterface $stockItem) + public function save(StockItemInterface $stockItem) { try { /** @var \Magento\Catalog\Model\Product $product */ @@ -161,10 +161,7 @@ public function save(\Magento\CatalogInventory\Api\Data\StockItemInterface $stoc $typeId = $product->getTypeId() ?: $product->getTypeInstance()->getTypeId(); $isQty = $this->stockConfiguration->isQty($typeId); if ($isQty) { - $isInStock = $this->stockStateProvider->verifyStock($stockItem); - if ($stockItem->getManageStock() && !$isInStock) { - $stockItem->setIsInStock(false)->setStockStatusChangedAutomaticallyFlag(true); - } + $this->changeIsInStockIfNecessary($stockItem); // if qty is below notify qty, update the low stock date to today date otherwise set null $stockItem->setLowStockDate(null); if ($this->stockStateProvider->verifyNotification($stockItem)) { @@ -260,4 +257,28 @@ private function getStockRegistryStorage() } return $this->stockRegistryStorage; } + + /** + * Change is_in_stock value if necessary. + * + * @param StockItemInterface $stockItem + * + * @return void + */ + private function changeIsInStockIfNecessary(StockItemInterface $stockItem) + { + $isInStock = $this->stockStateProvider->verifyStock($stockItem); + if ($stockItem->getManageStock() && !$isInStock) { + $stockItem->setIsInStock(false)->setStockStatusChangedAutomaticallyFlag(true); + } + + if ($stockItem->getManageStock() + && $isInStock + && !$stockItem->getIsInStock() + && $stockItem->getOrigData(\Magento\CatalogInventory\Api\Data\StockItemInterface::QTY) == 0 + && $stockItem->getOrigData(\Magento\CatalogInventory\Api\Data\StockItemInterface::QTY) !== null + ) { + $stockItem->setIsInStock(true)->setStockStatusChangedAutomaticallyFlag(true); + } + } } diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php index 293874bb32b9f..6b1770ff7d403 100644 --- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php +++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php @@ -276,7 +276,7 @@ public function testSave() ->method('verifyStock') ->with($this->stockItemMock) ->willReturn(false); - $this->stockItemMock->expects($this->once())->method('getManageStock')->willReturn(true); + $this->stockItemMock->expects($this->exactly(2))->method('getManageStock')->willReturn(true); $this->stockItemMock->expects($this->once())->method('setIsInStock')->with(false)->willReturnSelf(); $this->stockItemMock->expects($this->once()) ->method('setStockStatusChangedAutomaticallyFlag') diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/configure/product-customer-data.js b/app/code/Magento/Checkout/view/frontend/web/js/view/configure/product-customer-data.js index a612b5e2dc6b7..d7a81decbadef 100644 --- a/app/code/Magento/Checkout/view/frontend/web/js/view/configure/product-customer-data.js +++ b/app/code/Magento/Checkout/view/frontend/web/js/view/configure/product-customer-data.js @@ -1,6 +1,7 @@ require([ 'jquery', - 'Magento_Customer/js/customer-data' + 'Magento_Customer/js/customer-data', + 'domReady!' ], function ($, customerData) { 'use strict'; diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php index 2daaf39d58d14..dda3940cd9ba5 100644 --- a/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php +++ b/app/code/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsert.php @@ -35,7 +35,7 @@ public function __construct( public function execute() { $helper = $this->_objectManager->get(\Magento\Cms\Helper\Wysiwyg\Images::class); - $storeId = $this->getRequest()->getParam('store'); + $storeId = (int)$this->getRequest()->getParam('store'); $filename = $this->getRequest()->getParam('filename'); $filename = $helper->idDecode($filename); diff --git a/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php b/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php index 9fe69b691424d..e18ab8587fc71 100644 --- a/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php +++ b/app/code/Magento/Quote/Model/Cart/CartTotalRepository.php @@ -10,6 +10,7 @@ use Magento\Quote\Api\CartTotalRepositoryInterface; use Magento\Catalog\Helper\Product\ConfigurationPool; use Magento\Framework\Api\DataObjectHelper; +use Magento\Framework\Api\ExtensibleDataInterface; use Magento\Quote\Model\Cart\Totals\ItemConverter; use Magento\Quote\Api\CouponManagementInterface; @@ -94,6 +95,7 @@ public function get($cartId) $addressTotalsData = $quote->getShippingAddress()->getData(); $addressTotals = $quote->getShippingAddress()->getTotals(); } + unset($addressTotalsData[ExtensibleDataInterface::EXTENSION_ATTRIBUTES_KEY]); /** @var \Magento\Quote\Api\Data\TotalsInterface $quoteTotals */ $quoteTotals = $this->totalsFactory->create(); diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php index 9a6f1b48620dc..c02bbd64e7ca3 100644 --- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php +++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php @@ -137,6 +137,7 @@ public function getDefaultOperatorInputByType() */ $this->_defaultOperatorInputByType['category'] = ['==', '!=', '{}', '!{}', '()', '!()']; $this->_arrayInputTypes[] = 'category'; + $this->_defaultOperatorInputByType['sku'] = ['==', '!=', '{}', '!{}', '()', '!()']; } return $this->_defaultOperatorInputByType; } @@ -382,6 +383,9 @@ public function getInputType() if ($this->getAttributeObject()->getAttributeCode() == 'category_ids') { return 'category'; } + if ($this->getAttributeObject()->getAttributeCode() == 'sku') { + return 'sku'; + } switch ($this->getAttributeObject()->getFrontendInput()) { case 'select': return 'select'; @@ -606,7 +610,12 @@ public function getBindArgumentValue() $this->getValueParsed() )->__toString() ); + } elseif ($this->getAttribute() === 'sku') { + $value = $this->getData('value'); + $value = preg_split('#\s*[,;]\s*#', $value, null, PREG_SPLIT_NO_EMPTY); + $this->setValueParsed($value); } + return parent::getBindArgumentValue(); } @@ -704,7 +713,7 @@ protected function _getAttributeSetId($productId) public function getOperatorForValidate() { $operator = $this->getOperator(); - if ($this->getInputType() == 'category') { + if (in_array($this->getInputType(), ['category', 'sku'])) { if ($operator == '==') { $operator = '{}'; } elseif ($operator == '!=') { diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml index ecc2b5beee321..10b7b1c028c66 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml @@ -35,7 +35,13 @@ - + + + + * + + + diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml index 3ec450a570b46..ac1233c5e4961 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml @@ -35,7 +35,13 @@ - + + + + * + + + diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml index 27cef50742163..6db77a79b8c14 100644 --- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml +++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml @@ -35,7 +35,13 @@ - + + + + * + + + diff --git a/app/code/Magento/Ui/Component/ExportButton.php b/app/code/Magento/Ui/Component/ExportButton.php index 9d5f125839003..284362a119bad 100644 --- a/app/code/Magento/Ui/Component/ExportButton.php +++ b/app/code/Magento/Ui/Component/ExportButton.php @@ -54,11 +54,13 @@ public function getComponentName() */ public function prepare() { + $context = $this->getContext(); $config = $this->getData('config'); if (isset($config['options'])) { $options = []; foreach ($config['options'] as $option) { - $option['url'] = $this->urlBuilder->getUrl($option['url']); + $additionalParams = $this->getAdditionalParams($config, $context); + $option['url'] = $this->urlBuilder->getUrl($option['url'], $additionalParams); $options[] = $option; } $config['options'] = $options; @@ -66,4 +68,25 @@ public function prepare() } parent::prepare(); } + + /** + * Get export button additional parameters + * + * @param array $config + * @param ContextInterface $context + * @return array + */ + protected function getAdditionalParams($config, $context) + { + $additionalParams = []; + if (isset($config['additionalParams'])) { + foreach ($config['additionalParams'] as $paramName => $paramValue) { + if ('*' == $paramValue) { + $paramValue = $context->getRequestParam($paramName); + } + $additionalParams[$paramName] = $paramValue; + } + } + return $additionalParams; + } } diff --git a/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php b/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php index cda3106a14f49..bd1dde10f8eed 100644 --- a/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php +++ b/app/code/Magento/Ui/TemplateEngine/Xhtml/Result.php @@ -119,7 +119,7 @@ public function __toString() protected function wrapContent($content) { return ''; } } diff --git a/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php b/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php new file mode 100644 index 0000000000000..e51062e1cb36b --- /dev/null +++ b/app/code/Magento/Ui/Test/Unit/TemplateEngine/Xhtml/ResultTest.php @@ -0,0 +1,97 @@ +template = $this->createPartialMock(Template::class, ['append']); + $this->compiler = $this->createMock(CompilerInterface::class); + $this->component = $this->createMock(UiComponentInterface::class); + $this->structure = $this->createPartialMock(Structure::class, ['generate']); + $this->logger = $this->createMock(LoggerInterface::class); + + $this->objectManager = new ObjectManager($this); + $this->testModel = $this->objectManager->getObject(Result::class, [ + 'template' => $this->template, + 'compiler' => $this->compiler, + 'component' => $this->component, + 'structure' => $this->structure, + 'logger' => $this->logger, + ]); + } + + /** + * Test Append layout configuration method + */ + public function testAppendLayoutConfiguration() + { + $configWithCdata = 'text before '; + $this->structure->expects($this->once()) + ->method('generate') + ->with($this->component) + ->willReturn([$configWithCdata]); + $this->template->expects($this->once()) + ->method('append') + ->with(''); + + $this->testModel->appendLayoutConfiguration(); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Controller/Adminhtml/ProductTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Controller/Adminhtml/ProductTest.php new file mode 100644 index 0000000000000..215d3de72a69a --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Bundle/Controller/Adminhtml/ProductTest.php @@ -0,0 +1,236 @@ +getRequestParamsForDuplicate(); + $this->getRequest()->setParams(['type' => Type::TYPE_BUNDLE]); + $this->getRequest()->setPostValue($params); + $this->dispatch('backend/catalog/product/save'); + $this->assertSessionMessages( + $this->equalTo( + [ + 'You saved the product.', + 'You duplicated the product.', + ] + ), + MessageInterface::TYPE_SUCCESS + ); + $this->assertOptions(); + } + + /** + * Get necessary request post params for creating and duplicating bundle product. + * + * @return array + * @SuppressWarnings(PHPMD.ExcessiveMethodLength) + */ + private function getRequestParamsForDuplicate() + { + $product = Bootstrap::getObjectManager()->get(ProductRepositoryInterface::class)->get('simple'); + return [ + 'product' => + [ + 'attribute_set_id' => '4', + 'gift_message_available' => '0', + 'use_config_gift_message_available' => '1', + 'stock_data' => + [ + 'min_qty_allowed_in_shopping_cart' => + [ + [ + 'record_id' => '0', + 'customer_group_id' => '32000', + 'min_sale_qty' => '', + ], + ], + 'min_qty' => '0', + 'max_sale_qty' => '10000', + 'notify_stock_qty' => '1', + 'min_sale_qty' => '1', + 'qty_increments' => '1', + 'use_config_manage_stock' => '1', + 'manage_stock' => '1', + 'use_config_min_qty' => '1', + 'use_config_max_sale_qty' => '1', + 'use_config_backorders' => '1', + 'backorders' => '0', + 'use_config_notify_stock_qty' => '1', + 'use_config_enable_qty_inc' => '1', + 'enable_qty_increments' => '0', + 'use_config_qty_increments' => '1', + 'use_config_min_sale_qty' => '1', + 'is_qty_decimal' => '0', + 'is_decimal_divided' => '0', + ], + 'status' => '1', + 'affect_product_custom_options' => '1', + 'name' => 'b1', + 'price' => '', + 'weight' => '', + 'url_key' => '', + 'special_price' => '', + 'quantity_and_stock_status' => + [ + 'qty' => '', + 'is_in_stock' => '1', + ], + 'sku_type' => '0', + 'price_type' => '0', + 'weight_type' => '0', + 'website_ids' => + [ + 1 => '1', + ], + 'sku' => 'b1', + 'meta_title' => 'b1', + 'meta_keyword' => 'b1', + 'meta_description' => 'b1 ', + 'tax_class_id' => '2', + 'product_has_weight' => '1', + 'visibility' => '4', + 'country_of_manufacture' => '', + 'page_layout' => '', + 'options_container' => 'container2', + 'custom_design' => '', + 'custom_layout' => '', + 'price_view' => '0', + 'shipment_type' => '0', + 'news_from_date' => '', + 'news_to_date' => '', + 'custom_design_from' => '', + 'custom_design_to' => '', + 'special_from_date' => '', + 'special_to_date' => '', + 'description' => '', + 'short_description' => '', + 'custom_layout_update' => '', + 'image' => '', + 'small_image' => '', + 'thumbnail' => '', + ], + 'bundle_options' => + [ + 'bundle_options' => + [ + [ + 'record_id' => '0', + 'type' => 'select', + 'required' => '1', + 'title' => 'test option title', + 'position' => '1', + 'option_id' => '', + 'delete' => '', + 'bundle_selections' => + [ + [ + 'product_id' => $product->getId(), + 'name' => $product->getName(), + 'sku' => $product->getSku(), + 'price' => $product->getPrice(), + 'delete' => '', + 'selection_can_change_qty' => '', + 'selection_id' => '', + 'selection_price_type' => '0', + 'selection_price_value' => '', + 'selection_qty' => '1', + 'position' => '1', + 'option_id' => '', + 'record_id' => '1', + 'is_default' => '0', + ], + ], + 'bundle_button_proxy' => + [ + [ + 'entity_id' => '1', + ], + ], + ], + ], + ], + 'affect_bundle_product_selections' => '1', + 'back' => 'duplicate', + 'form_key' => Bootstrap::getObjectManager()->get(FormKey::class)->getFormKey(), + ]; + } + + /** + * Check options in created and duplicated products. + * + * @return void + */ + private function assertOptions() + { + $createdOptions = $this->getProductOptions('b1'); + $createdOption = array_shift($createdOptions); + $duplicatedOptions = $this->getProductOptions('b1-1'); + $duplicatedOption = array_shift($duplicatedOptions); + $this->assertNotEmpty($createdOption); + $this->assertNotEmpty($duplicatedOption); + $optionFields = ['type', 'title', 'position', 'required', 'default_title']; + foreach ($optionFields as $field) { + $this->assertSame($createdOption->getData($field), $duplicatedOption->getData($field)); + } + $createdLinks = $createdOption->getProductLinks(); + $createdLink = array_shift($createdLinks); + $duplicatedLinks = $duplicatedOption->getProductLinks(); + $duplicatedLink = array_shift($duplicatedLinks); + $this->assertNotEmpty($createdLink); + $this->assertNotEmpty($duplicatedLink); + $linkFields = [ + 'entity_id', + 'sku', + 'position', + 'is_default', + 'price', + 'qty', + 'selection_can_change_quantity', + 'price_type', + ]; + foreach ($linkFields as $field) { + $this->assertSame($createdLink->getData($field), $duplicatedLink->getData($field)); + } + } + + /** + * Get options for given product. + * + * @param string $sku + * @return OptionInterface[] + */ + private function getProductOptions(string $sku) + { + $product = Bootstrap::getObjectManager()->create(Product::class); + $productId = $product->getResource()->getIdBySku($sku); + $product->load($productId); + + return $product->getExtensionAttributes()->getBundleProductOptions(); + } +} diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductTest.php index 99a1e9309f6e9..da91ed96435aa 100644 --- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductTest.php +++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductTest.php @@ -549,4 +549,41 @@ public function testGetOptions() } } } + + /** + * @magentoDataFixture Magento/Catalog/_files/product_simple_out_of_stock.php + */ + public function testSaveWithDifferentQty() + { + //if save (out of stock product with qty 0) with new qty > 0 it should become in stock. + //if set out of stock for product with qty > 0 it should become out of stock + $product = $this->productRepository->get('simple-out-of-stock', true, null, true); + $stockItem = $product->getExtensionAttributes()->getStockItem(); + $this->assertEquals(false, $stockItem->getIsInStock()); + $stockData = [ + 'qty' => 5, + 'is_in_stock' => 0, + ]; + $product->setStockData($stockData); + $product->save(); + + /** @var \Magento\CatalogInventory\Model\StockRegistryStorage $stockRegistryStorage */ + $stockRegistryStorage = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\CatalogInventory\Model\StockRegistryStorage::class); + $stockRegistryStorage->removeStockItem($product->getId()); + $product = $this->productRepository->get('simple-out-of-stock', true, null, true); + $stockItem = $product->getExtensionAttributes()->getStockItem(); + $this->assertEquals(true, $stockItem->getIsInStock()); + $stockData = [ + 'qty' => 3, + 'is_in_stock' => 0, + ]; + $product->setStockData($stockData); + $product->save(); + + $stockRegistryStorage->removeStockItem($product->getId()); + $product = $this->productRepository->get('simple-out-of-stock', true, null, true); + $stockItem = $product->getExtensionAttributes()->getStockItem(); + $this->assertEquals(false, $stockItem->getIsInStock()); + } } diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock.php new file mode 100644 index 0000000000000..729ea2ab982b7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock.php @@ -0,0 +1,51 @@ +reinitialize(); + +/** @var \Magento\TestFramework\ObjectManager $objectManager */ +$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager(); + +/** @var \Magento\Catalog\Api\CategoryLinkManagementInterface $categoryLinkManagement */ +$categoryLinkManagement = $objectManager->get(\Magento\Catalog\Api\CategoryLinkManagementInterface::class); + +/** @var $product \Magento\Catalog\Model\Product */ +$product = $objectManager->create(\Magento\Catalog\Model\Product::class); +$product->isObjectNew(true); +$product->setTypeId(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE) + ->setId(1) + ->setAttributeSetId(4) + ->setWebsiteIds([1]) + ->setName('Simple Product') + ->setSku('simple-out-of-stock') + ->setPrice(10) + ->setWeight(1) + ->setShortDescription("Short description") + ->setTaxClassId(0) + ->setDescription('Description with html tag') + ->setMetaTitle('meta title') + ->setMetaKeyword('meta keyword') + ->setMetaDescription('meta description') + ->setVisibility(\Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH) + ->setStatus(\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED) + ->setStockData( + [ + 'use_config_manage_stock' => 1, + 'qty' => 0, + 'is_qty_decimal' => 0, + 'is_in_stock' => 0, + ] + )->setCanSaveCustomOptions(true) + ->setHasOptions(true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepositoryFactory */ +$productRepository = $objectManager->create(\Magento\Catalog\Api\ProductRepositoryInterface::class); +$productRepository->save($product); + +$categoryLinkManagement->assignProductToCategories( + $product->getSku(), + [2] +); diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock_rollback.php new file mode 100644 index 0000000000000..2bb2858687ff7 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_simple_out_of_stock_rollback.php @@ -0,0 +1,25 @@ +getInstance()->reinitialize(); + +/** @var \Magento\Framework\Registry $registry */ +$registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(\Magento\Framework\Registry::class); + +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', true); + +/** @var \Magento\Catalog\Api\ProductRepositoryInterface $productRepository */ +$productRepository = \Magento\TestFramework\Helper\Bootstrap::getObjectManager() + ->get(\Magento\Catalog\Api\ProductRepositoryInterface::class); +try { + $product = $productRepository->get('simple-out-of-stock', false, null, true); + $productRepository->delete($product); +} catch (NoSuchEntityException $e) { +} +$registry->unregister('isSecureArea'); +$registry->register('isSecureArea', false); diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/ByStockItemRepositoryTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/ByStockItemRepositoryTest.php index ae67d3fa1eddc..dfe21a61c866b 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/ByStockItemRepositoryTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/ByStockItemRepositoryTest.php @@ -40,7 +40,7 @@ class ByStockItemRepositoryTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByQuantityAndStockStatusTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByQuantityAndStockStatusTest.php index 6864b9a345602..ec5dc7c5b0ce7 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByQuantityAndStockStatusTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByQuantityAndStockStatusTest.php @@ -53,7 +53,7 @@ class ByQuantityAndStockStatusTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockDataTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockDataTest.php index eae20bda1a94a..7638936c34a6a 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockDataTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockDataTest.php @@ -53,7 +53,7 @@ class ByStockDataTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockItemTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockItemTest.php index 25b9817bcf572..d5dae31b89158 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockItemTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductModel/ByStockItemTest.php @@ -59,7 +59,7 @@ class ByStockItemTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByQuantityAndStockStatusTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByQuantityAndStockStatusTest.php index 6269d7a20f4fc..fc1d787df531d 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByQuantityAndStockStatusTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByQuantityAndStockStatusTest.php @@ -59,7 +59,7 @@ class ByQuantityAndStockStatusTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockDataTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockDataTest.php index fa7cc39f7584f..9050aaf6c8855 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockDataTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockDataTest.php @@ -59,7 +59,7 @@ class ByStockDataTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockItemTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockItemTest.php index 857457325c755..1884a46e21680 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockItemTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductCreate/ByProductRepository/ByStockItemTest.php @@ -70,7 +70,7 @@ class ByStockItemTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductModel/ByStockItemTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductModel/ByStockItemTest.php index 2a4b7937f7163..5a726170a0128 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductModel/ByStockItemTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductModel/ByStockItemTest.php @@ -42,7 +42,7 @@ class ByStockItemTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductRepository/ByStockItemTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductRepository/ByStockItemTest.php index 81871d3398c1e..3053b8d6acff6 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductRepository/ByStockItemTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/StockItemSave/OnProductUpdate/ByProductRepository/ByStockItemTest.php @@ -48,7 +48,7 @@ class ByStockItemTest extends \PHPUnit\Framework\TestCase private $stockItemData = [ StockItemInterface::QTY => 555, StockItemInterface::MANAGE_STOCK => true, - StockItemInterface::IS_IN_STOCK => false, + StockItemInterface::IS_IN_STOCK => true, ]; public function setUp() diff --git a/dev/tests/integration/testsuite/Magento/CatalogWidget/Block/Product/ProductListTest.php b/dev/tests/integration/testsuite/Magento/CatalogWidget/Block/Product/ProductListTest.php index 6892f7b3a8a88..3b270bb42c544 100644 --- a/dev/tests/integration/testsuite/Magento/CatalogWidget/Block/Product/ProductListTest.php +++ b/dev/tests/integration/testsuite/Magento/CatalogWidget/Block/Product/ProductListTest.php @@ -67,12 +67,36 @@ public function testCreateCollection() . '`attribute`:`multiselect_attribute`,`operator`:`^[^]`,' . '`value`:[`' . implode(',', $multiselectAttributeOptionIds) . '`]^]^]'; $this->block->setData('conditions_encoded', $encodedConditions); + $this->performAssertions(1); + } + + /** + * Test product list widget can process condition with multiple product sku. + * + * @magentoDataFixture Magento/Catalog/_files/multiple_products.php + */ + public function testCreateCollectionWithMultipleSkuCondition() + { + $encodedConditions = '^[`1`:^[`type`:`Magento||CatalogWidget||Model||Rule||Condition||Combine`,' . + '`aggregator`:`all`,`value`:`1`,`new_child`:``^],`1--1`:^[`type`:`Magento||CatalogWidget||Model||Rule|' . + '|Condition||Product`,`attribute`:`sku`,`operator`:`==`,`value`:`simple1, simple2`^]^]'; + $this->block->setData('conditions_encoded', $encodedConditions); + $this->performAssertions(2); + } - // Load products collection filtered using specified conditions and perform assesrions + /** + * Check product collection includes correct amount of products. + * + * @param int $count + * @return void + */ + private function performAssertions(int $count) + { + // Load products collection filtered using specified conditions and perform assertions. $productCollection = $this->block->createCollection(); $productCollection->load(); $this->assertEquals( - 1, + $count, $productCollection->count(), "Product collection was not filtered according to the widget condition." ); diff --git a/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsertTest.php b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsertTest.php new file mode 100644 index 0000000000000..fe7788e12d123 --- /dev/null +++ b/dev/tests/integration/testsuite/Magento/Cms/Controller/Adminhtml/Wysiwyg/Images/OnInsertTest.php @@ -0,0 +1,65 @@ +prepareRequest(); + $this->dispatch('backend/cms/wysiwyg_images/onInsert'); + $this->assertRegExp('/pub\/media\/wysiwyg\/testFilename/', $this->getResponse()->getBody()); + } + + /** + * Test OnIsert with turned off static urls in catalog. + * + * @magentoConfigFixture admin_store cms/wysiwyg/use_static_urls_in_catalog 0 + * @return void + */ + public function testExecuteWhithoutStaticUrls() + { + $this->prepareRequest(); + $this->dispatch('backend/cms/wysiwyg_images/onInsert'); + $this->assertRegExp('/cms\/wysiwyg\/directive\/___directive/', $this->getResponse()->getBody()); + } + + /** + * Set necessary post data into request. + * + * @return void + */ + private function prepareRequest() + { + $this->getRequest()->setParams( + [ + 'key' => 'testKey', + 'isAjax' => 'true', + 'filename' => Bootstrap::getObjectManager()->get(Images::class)->idEncode('testFilename'), + 'node' => 'root', + 'store' => '', + 'as_is' => '0', + 'form_key' => Bootstrap::getObjectManager()->get(FormKey::class)->getFormKey(), + ] + ); + } +} diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js deleted file mode 100644 index 562c5c096b654..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/accordion.js +++ /dev/null @@ -1,57 +0,0 @@ -/** - * @category mage.js - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - - */ -test( "Initialization", function() { - expect(2); - var accordion = $("
"); - accordion.accordion(); - ok( accordion.is(':mage-accordion'), "widget instantiated" ); - accordion.accordion('destroy'); - ok( !accordion.is(':mage-accordion'), "widget destroyed" ); -}); - - - -test( "One-collapsible element", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion(); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':hidden'), "content hidden" ); - title2.trigger('click'); - ok( content1.is(':hidden'), "content hidden" ); - ok( content2.is(':visible'), "content visible" ); - accordion.accordion('destroy'); - -}); - -test( "Multi-collapsible elements", function() { - expect(4); - var accordion = $('
'); - var title1 = $('
').appendTo(accordion); - var content1 = $('
').appendTo(accordion); - var title2 = $('
').appendTo(accordion); - var content2 = $('
').appendTo(accordion); - accordion.appendTo("body"); - - accordion.accordion({multipleCollapsible:true}); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':hidden'), "content hidden" ); - title2.trigger('click'); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':visible'), "content visible" ); - accordion.accordion('destroy'); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html deleted file mode 100644 index 093284c6f4fa8..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/accordion/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Accordion Widget: QUnit Tests - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js deleted file mode 100644 index 60dffe84db0fc..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-qunit.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -test( "initialization", function() { - var calendar = $('#calendar').calendar(); - ok( calendar.is(':mage-calendar'), "this test is fine" ); - calendar.calendar('destroy'); -}); -test( "global configuration merge", function() { - $.extend(true, $, { - calendarConfig: { - showOn: 'button', - showAnim: '', - buttonImageOnly: true, - showButtonPanel: true, - showWeek: true, - timeFormat: '', - showTime: false, - showHour: false, - showMinute: false - } - }); - var calendar = $('#calendar').calendar(); - equal('button', calendar.calendar('option', 'showOn')); - equal('', calendar.calendar('option', 'showAnim')); - ok(calendar.calendar('option', 'buttonImageOnly')); - ok(calendar.calendar('option', 'showButtonPanel')); - ok(calendar.calendar('option', 'showWeek')); - equal('', calendar.calendar('option', 'timeFormat')); - equal(false, calendar.calendar('option', 'showTime')); - equal(false, calendar.calendar('option', 'showHour')); - equal(false, calendar.calendar('option', 'showMinute')); - calendar.calendar('destroy'); - delete $.calendarConfig; -}); -test( "specifying AM/PM in timeformat option changes AMPM option to true", function(){ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm tt', ampm: false}); - ok(calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}); -test( "omitting AM/PM in timeformat option changes AMPM option to false", function(){ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm'}); - notEqual(true, calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}); -test( "with server timezone offset", function(){ - var serverTimezoneSeconds = 1346122095, - calendar = $('#calendar').calendar({serverTimezoneSeconds: serverTimezoneSeconds}), - currentDate = new Date(); - currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); - ok(currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}); -test( "without sever timezone offset", function() { - var calendar = $('#calendar').calendar(), - currentDate = new Date(); - ok(currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}); -test( "dateTime format conversions", function() { - var calendar = $('#calendar').calendar({dateFormat: 'M/d/yy', timeFormat: 'h:mm a'}); - equal('mm/d/yy', calendar.calendar('option', 'dateFormat')); - equal('h:mm tt', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); - calendar.calendar({dateFormat: 'MMMM/EEEE/yyyy', timeFormat: 'HH:mm'}); - equal('MM/DD/yy', calendar.calendar('option', 'dateFormat')); - equal('hh:mm', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); -}); -test( "destroy", function() { - var calendar = $('#calendar').calendar(), - calendarExist = calendar.is(':mage-calendar'); - calendar.calendar('destroy'); - equal(true, calendarExist != calendar.is(':mage-calendar')); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js deleted file mode 100644 index 7748106b303c3..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar-test.js +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -CalendarTest = TestCase('CalendarTest'); -CalendarTest.prototype.testInit = function() { - /*:DOC += */ - var calendar = jQuery('#calendar').calendar(); - assertEquals(true, calendar.is(':mage-calendar')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testGlobalConfigurationMerge = function() { - /*:DOC += */ - $.extend(true, $, { - calendarConfig: { - showOn: 'button', - showAnim: '', - buttonImageOnly: true, - showButtonPanel: true, - showWeek: true, - timeFormat: '', - showTime: false, - showHour: false, - showMinute: false - } - }); - var calendar = $('#calendar').calendar(); - assertEquals('button', calendar.calendar('option', 'showOn')); - assertEquals('', calendar.calendar('option', 'showAnim')); - assertEquals(true, calendar.calendar('option', 'buttonImageOnly')); - assertEquals(true, calendar.calendar('option', 'showButtonPanel')); - assertEquals(true, calendar.calendar('option', 'showWeek')); - assertEquals('', calendar.calendar('option', 'timeFormat')); - assertEquals(false, calendar.calendar('option', 'showTime')); - assertEquals(false, calendar.calendar('option', 'showHour')); - assertEquals(false, calendar.calendar('option', 'showMinute')); - calendar.calendar('destroy'); - delete $.calendarConfig; -}; -CalendarTest.prototype.testEnableAMPM = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm tt', ampm: false}); - assertEquals(true, calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDisableAMPM = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({timeFormat: 'hh:mm'}); - assertTrue(!calendar.calendar('option', 'ampm')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testWithServerTimezoneOffset = function() { - /*:DOC += */ - var serverTimezoneSeconds = 1346122095, - calendar = $('#calendar').calendar({serverTimezoneSeconds: serverTimezoneSeconds}), - currentDate = new Date(); - currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testWithServerTimezoneShift = function() { - /*:DOC += */ - var serverTimezoneOffset = 43200, - calendar = $('#calendar').calendar({serverTimezoneOffset: serverTimezoneOffset}), - currentDate = new Date(); - - setTimeout(function () { - currentDate.setTime(currentDate.getTime() + (serverTimezoneOffset + currentDate.getTimezoneOffset() * 60) * 1000); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); - }, 61000); -}; -CalendarTest.prototype.testWithoutServerTimezoneOffset = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(), - currentDate = new Date(); - assertEquals(true, currentDate.toString() === calendar.calendar('getTimezoneDate').toString()); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testInitDateTimePicker = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(); - assertEquals(true, calendar.hasClass('_has-datepicker')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDateTimeMapping = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar({dateFormat: 'M/d/yy', timeFormat: 'h:mm a'}); - assertEquals('mm/d/yy', calendar.calendar('option', 'dateFormat')); - assertEquals('h:mm TT', calendar.calendar('option', 'timeFormat')); - calendar.calendar('destroy'); - calendar.calendar({dateFormat: 'MMMM/EEEE/yyyy'}); - assertEquals('MM/DD/yy', calendar.calendar('option', 'dateFormat')); - calendar.calendar('destroy'); -}; -CalendarTest.prototype.testDestroy = function() { - /*:DOC += */ - var calendar = $('#calendar').calendar(), - calendarExist = calendar.is(':mage-calendar'); - calendar.calendar('destroy'); - assertEquals(true, calendarExist != calendar.is(':mage-calendar')); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html deleted file mode 100644 index b474dc2d5ce95..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/calendar.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Calendar Widget: QUnit Tests - - - - - - - - - - - -
-
- -
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js deleted file mode 100644 index 61211c067ad12..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/calendar/date-range-test.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -DaterangeTest = TestCase('DaterangeTest'); -DaterangeTest.prototype.testInit = function() { - /*:DOC += -
- */ - var dateRange = jQuery('#date-range').dateRange(); - assertEquals(true, dateRange.is(':mage-dateRange')); - dateRange.dateRange('destroy'); -}; -DaterangeTest.prototype.testInitDateRangeDatepickers = function() { - /*:DOC += -
- - -
- */ - var options = { - from: { - id: "from" - }, - to: { - id: "to" - } - }, - dateRange = $('#date-range').dateRange(options), - from = $('#'+options.from.id), - to = $('#'+options.to.id); - - assertEquals(true, from.hasClass('_has-datepicker')); - assertEquals(true, to.hasClass('_has-datepicker')); - dateRange.dateRange('destroy'); -}; -DaterangeTest.prototype.testDestroy = function() { - /*:DOC += -
- - -
- */ - var options = { - from: { - id: "from" - }, - to: { - id: "to" - } - }, - dateRange = $('#date-range').dateRange(options), - from = $('#'+options.from.id), - to = $('#'+options.to.id), - dateRangeExist = dateRange.is(':mage-dateRange'), - fromExist = from.hasClass('_has-datepicker'), - toExist = to.hasClass('_has-datepicker'); - - dateRange.dateRange('destroy'); - assertEquals(true, dateRangeExist != dateRange.is(':mage-dateRange')); - assertEquals(true, fromExist != from.hasClass('_has-datepicker')); - assertEquals(true, toExist != to.hasClass('_has-datepicker')); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html deleted file mode 100644 index e81938dfbeaba..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/content.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - -

Test text

- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html deleted file mode 100644 index ccfd4d97f0331..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/index.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - Unit test - - - - - - - - - - - -
-
-
- - - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js b/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js deleted file mode 100644 index 1a22e5a79eb1d..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/collapsible/test-collapsible.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * @category mage.collapsible - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - Test if the collapsible widget gets initialized when is called and destroy function works - */ -test('initialization & destroy', function() { - expect(2); - var group = $('
'); - group.collapsible(); - ok( group.is(':mage-collapsible'), "widget instantiated" ); - group.collapsible('destroy'); - ok( !group.is(':mage-collapsible'), "widget destroyed" ); -}); - -/* - Test enable, disable, activate, deactivate functions - */ -test('Enable, disable, activate, deactivate methods', function() { - expect(5); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("activate"); - ok(content.is(':visible'), "Content is expanded"); - group.collapsible("disable"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("activate"); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible("enable"); - group.collapsible("activate"); - ok(content.is(':visible'), "Content is expanded"); - group.collapsible('destroy'); -}); - -/* - Test if the widget gets expanded/collapsed when the title is clicked - */ -test('Collapse and expand', function() { - expect(3); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger("click"); - ok(content.is(':visible'), "Content gets expanded on click title"); - title.trigger("click"); - ok(content.is(':hidden'), "Content gets collapsed on click again"); - group.collapsible('destroy'); -}); - - -/* - Test state Classes - */ -test('State classes', function() { - expect(3); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({openedState:"opened", closedState:"closed", disabledState:"disabled"}); - ok( group.hasClass("closed")); - title.trigger("click"); - ok( group.hasClass("opened")); - group.collapsible("disable"); - ok( group.hasClass("disabled")); - group.collapsible('destroy'); -}); - -/* - Test if icons are added to title when widget gets initialized and are removed when gets destroyed - */ -test('Create & destroy icons', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({icons: {header:"minus",activeHeader:"plus"}}); - ok(title.children("[data-role=icons]").length, "Icons added to title" ); - group.collapsible('destroy'); - ok(!title.children("[data-role=icons]").length, "Icons removed from title" ); -}); - -/* - Test if icon classes are changed when content gets expanded/collapsed - */ -test('Change icons when content gets expanded/collapsed', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.collapsible({icons: {header:"minus",activeHeader:"plus"}}); - group.collapsible("deactivate"); - var icons = group.collapsible("option","icons"); - ok(title.children("[data-role=icons]").hasClass(icons.header), "When content is collapsed,header has the right class for icons" ); - title.trigger("click"); - ok(title.children("[data-role=icons]").hasClass(icons.activeHeader), "When content is expanded,header has the right class for icons" ); - group.collapsible('destroy'); -}); - - -/* - Test if content gets expanded/collapsed when certain keys are pressed - */ -asyncTest( "keyboard support", function() { - - expect( 5 ); - var group = $('
'); - var title = $('
'); - var content = $('
'); - title.appendTo(group); - content.appendTo(group); - group.appendTo("body"); - group.collapsible(); - group.collapsible("deactivate"); - - title.on("focus",function(ev){ - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } )); - ok(content.is(':visible'), "Content is expanded"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } )); - ok(content.is(':hidden'), "Content is collapsed"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.SPACE } )); - ok(content.is(':visible'), "Content is expanded"); - title.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.SPACE } )); - ok(content.is(':hidden'), "Content is collapsed"); - group.collapsible('destroy'); - start(); - } ); - - setTimeout(function(){ - title.focus(); - },10); - -}); - -/* - Test if content gets updated via Ajax when title is clicked - */ -test('Update content via ajax', function() { - expect(2); - var group = $('
'); - var title = $('
'); - var content = $('
'); - var ajax = $(''); - title.appendTo(group); - content.appendTo(group); - ajax.appendTo(content); - group.appendTo("body"); - group.collapsible({ajaxContent : true}); - group.collapsible("deactivate"); - ok(!content.children("p").length, "Content has no data"); - title.trigger("click"); - ok(content.children("p"), "Content gets data from content.html"); - group.collapsible('destroy'); -}); - - - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js deleted file mode 100644 index 96bad35a17e2e..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/decorate-test.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -DecoratorTest = TestCase('DecoratorTest'); -DecoratorTest.prototype.testDecoratorList = function () { - /*:DOC +=
    -
  • item1
  • -
  • item2
  • -
  • item3
  • -
  • item4
  • -
- */ - var list = $('#list'); - list.decorate('list'); - assertTrue($(list.find('li')[0]).hasClass('odd')); - assertFalse($(list.find('li')[0]).hasClass('even')); - assertTrue($(list.find('li')[1]).hasClass('even')); - assertFalse($(list.find('li')[1]).hasClass('odd')); - assertTrue($(list.find('li')[2]).hasClass('odd')); - assertFalse($(list.find('li')[2]).hasClass('even')); - assertTrue($(list.find('li')[3]).hasClass('even')); - assertFalse($(list.find('li')[3]).hasClass('odd')); - assertTrue($(list.find('li')[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorGeneral = function () { - /*:DOC +=
-
item1
-
item2
-
item3
-
item4
-
- */ - var itemClass = '.item'; - $(itemClass).decorate('generic'); - assertTrue($($(itemClass)[0]).hasClass('odd')); - assertFalse($($(itemClass)[0]).hasClass('even')); - assertTrue($($(itemClass)[0]).hasClass('first')); - assertFalse($($(itemClass)[0]).hasClass('last')); - - assertFalse($($(itemClass)[1]).hasClass('odd')); - assertTrue($($(itemClass)[1]).hasClass('even')); - assertFalse($($(itemClass)[1]).hasClass('first')); - assertFalse($($(itemClass)[1]).hasClass('last')); - - assertTrue($($(itemClass)[2]).hasClass('odd')); - assertFalse($($(itemClass)[2]).hasClass('even')); - assertFalse($($(itemClass)[2]).hasClass('first')); - assertFalse($($(itemClass)[2]).hasClass('last')); - - assertFalse($($(itemClass)[3]).hasClass('odd')); - assertTrue($($(itemClass)[3]).hasClass('even')); - assertFalse($($(itemClass)[3]).hasClass('first')); - assertTrue($($(itemClass)[3]).hasClass('last')); -}; - -DecoratorTest.prototype.testDecoratorTable = function (){ - /*:DOC += - - - - - - - - - - - - - - - - - - - - - - -
MonthSavings
Sum$180
January$100
February$80
- */ - var tableId = '#foo'; - $(tableId).decorate('table'); - assertTrue($(tableId).find('thead tr').hasClass('first')); - assertTrue($(tableId).find('thead tr').hasClass('last')); - assertFalse($(tableId).find('thead tr').hasClass('odd')); - assertFalse($(tableId).find('thead tr').hasClass('even')); - - assertTrue($(tableId).find('tfoot tr').hasClass('first')); - assertTrue($(tableId).find('tfoot tr').hasClass('last')); - assertFalse($(tableId).find('tfoot tr').hasClass('odd')); - assertFalse($(tableId).find('tfoot tr').hasClass('even')); - - assertFalse($(tableId).find('tfoot tr td').last().hasClass('first')); - assertTrue($(tableId).find('tfoot tr td').last().hasClass('last')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('odd')); - assertFalse($(tableId).find('tfoot tr td').last().hasClass('even')); - - assertTrue($(tableId).find('tbody tr').first().hasClass('first')); - assertTrue($(tableId).find('tbody tr').first().hasClass('odd')); - assertFalse($(tableId).find('tbody tr').first().hasClass('last')); - assertFalse($(tableId).find('tbody tr').first().hasClass('even')); - assertFalse($(tableId).find('tbody tr').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr').last().hasClass('last')); - assertTrue($(tableId).find('tbody tr').last().hasClass('even')); - - assertFalse($(tableId).find('tbody tr td').last().hasClass('first')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('odd')); - assertTrue($(tableId).find('tbody tr td').last().hasClass('last')); - assertFalse($(tableId).find('tbody tr td').last().hasClass('even')); -}; - -DecoratorTest.prototype.testDecoratorDataList = function () { - /*:DOC +=
-
item
-
item
-
item
-
item
-
- */ - var listId = '#data-list'; - $(listId).decorate('dataList'); - assertTrue($(listId).find('dt').first().hasClass('odd')); - assertFalse($(listId).find('dt').first().hasClass('even')); - assertFalse($(listId).find('dt').first().hasClass('last')); - - assertTrue($(listId).find('dt').last().hasClass('even')); - assertFalse($(listId).find('dt').last().hasClass('odd')); - assertTrue($(listId).find('dt').last().hasClass('last')); - - assertTrue($(listId).find('dd').first().hasClass('odd')); - assertFalse($(listId).find('dd').first().hasClass('even')); - assertFalse($(listId).find('dd').first().hasClass('last')); - - assertTrue($(listId).find('dd').last().hasClass('even')); - assertFalse($(listId).find('dd').last().hasClass('odd')); - assertTrue($(listId).find('dd').last().hasClass('last')); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html deleted file mode 100644 index 3d6ed5a7c1d28..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - Unit test - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js b/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js deleted file mode 100644 index e67c92b3d4018..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/dropdown/test-dropdown.js +++ /dev/null @@ -1,270 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - testing if dialog opens when the triggerEvent is triggered - */ -test( "triggerEvent", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - dialog.dropdownDialog({"triggerEvent":"click", "triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown opens when click opener"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerEvent":null, "triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown doesn't open when click opener"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the trigger - */ -test( "triggerClass", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - dialog.dropdownDialog({"triggerTarget":opener,"triggerClass":"active"}); - dialog.dropdownDialog("open"); - ok( opener.hasClass("active"), "Class added to opener when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerEvent":opener, "triggerClass":null}); - dialog.dropdownDialog("open"); - ok( !opener.hasClass("active"), "Class added to opener when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the element which the dialog appends to - */ -test( "parentClass", function() { - expect(2); - var parent = $('
'); - var dialog = $('
'); - - dialog.dropdownDialog({"parentClass":"active","appendTo":parent}); - dialog.dropdownDialog("open"); - ok( parent.hasClass("active"), "Class is added to parent when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"parentClass":null,"appendTo":parent}); - dialog.dropdownDialog("open"); - ok( !parent.hasClass("active"), "No class is added to parent when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - -}); - -/* - testing if a specified class is added to the element that becomes dialog - */ -test( "dialogContentClass", function() { - expect(2); - var dialog = $('
'); - - dialog.dropdownDialog({"dialogContentClass":"active"}); - dialog.dropdownDialog("open"); - ok( $('.ui-dialog-content').hasClass("active"), "Class is added to dialog content when dialog opens" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"dialogContentClass": null}); - dialog.dropdownDialog("open"); - ok( !$('.ui-dialog-content').hasClass("active"), "No class is added to dialog content" ); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if a specified class is added to dialog - */ -test( "defaultDialogClass", function() { - expect(3); - var dialog = $('
'); - - dialog.dropdownDialog({"defaultDialogClass":"custom"}); - ok( $('.ui-dialog').hasClass("custom"), "Class is added to dialog" ); - ok( !$('.ui-dialog').hasClass("mage-dropdown-dialog"), "Default class has been overwritten" ); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({}); - ok( $('.ui-dialog').hasClass("mage-dropdown-dialog"), "Default class hasn't been overwritten" ); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the specified trigger actually opens the dialog - */ -test( "triggerTarget", function() { - expect(2); - var opener = $('
'); - var dialog = $('
'); - - dialog.dropdownDialog({"triggerTarget":opener}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown opens when click opener"); - dialog.dropdownDialog("close"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"triggerTarget":null}); - opener.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown doesn't open when click opener"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the dialog gets closed when clicking outside of it - */ -test( "closeOnClickOutside", function() { - expect(2); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnClickOutside":true}); - dialog.dropdownDialog("open"); - outside.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when click outside dropdown"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"closeOnClickOutside":false}); - dialog.dropdownDialog("open"); - outside.trigger("click"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when click outside dropdown"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the dialog gets closed when mouse leaves the dialog area - */ -asyncTest( "closeOnMouseLeave true", function() { - expect(1); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnMouseLeave":true}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when mouseleave the dropdown area"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the dialog gets closed when mouse leaves the dialog area - */ -asyncTest( "closeOnMouseLeave false", function() { - expect(1); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"closeOnMouseLeave":false}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when mouseleave the dropdown area"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the dialog gets closed with the specified delay - */ -asyncTest( "timeout", function() { - expect(2); - var outside = $('
').attr({"id":"outside"}); - var dialog = $('
').attr({"id":"dialog"}); - var opener = $('
').attr({"id":"opener"}); - outside.appendTo("#qunit-fixture"); - dialog.appendTo("#qunit-fixture"); - opener.appendTo("#qunit-fixture"); - - dialog.dropdownDialog({"timeout":2000}); - dialog.dropdownDialog("open"); - dialog.trigger("mouseenter"); - dialog.trigger("mouseleave"); - equal(dialog.dropdownDialog("isOpen"), true, "Dropdown doesn't close when mouseleave the dropdown area"); - setTimeout(function() { - equal(dialog.dropdownDialog("isOpen"), false, "Dropdown closes when mouseleave the dropdown area, after timeout passed"); - dialog.dropdownDialog( "destroy" ); - start(); - }, 3000); - -}); - -/* - testing if the title bar is prevented from being created - */ -test( "createTitileBar", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"createTitleBar":true}); - ok(($(".ui-dialog").find(".ui-dialog-titlebar").length > 0), "Title bar is created"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"createTitleBar":false}); - ok($(".ui-dialog").find(".ui-dialog-titlebar").length <= 0, "Title bar isn't created"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the position function gets disabled - */ -test( "autoPosition", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"autoPosition":false}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("top") === 'auto'), "_position function disabled"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"autoPosition":true}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("top") !== '0px'), "_position function enabled"); - dialog.dropdownDialog( "destroy" ); -}); - -/* - testing if the size function gets disabled - */ -test( "autoSize", function() { - expect(2); - var dialog = $('
'); - dialog.dropdownDialog({"autoSize":true, width:"300"}); - dialog.dropdownDialog("open"); - ok(($(".ui-dialog").css("width") === '300px'), "_size function enabled"); - dialog.dropdownDialog( "destroy" ); - - dialog.dropdownDialog({"autoSize":false, width:"300"}); - dialog.dropdownDialog("open"); - ok($(".ui-dialog").css("width") !== '300px', "_size function disabled"); - dialog.dropdownDialog( "destroy" ); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js deleted file mode 100644 index 83bdefd399eaf..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/form/form-test.js +++ /dev/null @@ -1,241 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -FormTest = TestCase('FormTest'); -FormTest.prototype.setUp = function() { - /*:DOC +=
*/ -}; -FormTest.prototype.tearDown = function() { - var formInstance = jQuery('#form').data('form'); - if(formInstance && formInstance.destroy) { - formInstance.destroy(); - } -}; -FormTest.prototype.testInit = function() { - var form = jQuery('#form').form(); - assertTrue(form.is(':mage-form')); -}; -FormTest.prototype.testRollback = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.prop('action'), - target: form.prop('target'), - method: form.prop('method') - }; - - form.data("form").oldAttributes = initialFormAttrs; - form.prop({ - action: 'new/action/url', - target: '_blank', - method: 'POST' - }); - - assertNotEquals(form.prop('action'), initialFormAttrs.action); - assertNotEquals(form.prop('target'), initialFormAttrs.target); - assertNotEquals(form.prop('method'), initialFormAttrs.method); - form.data("form")._rollback(); - assertEquals(form.prop('action'), initialFormAttrs.action); - assertEquals(form.prop('target'), initialFormAttrs.target); - assertEquals(form.prop('method'), initialFormAttrs.method); -}; -FormTest.prototype.testGetHandlers = function() { - var form = jQuery('#form').form(), - handlersData = form.form('option', 'handlersData'), - handlers = []; - $.each(handlersData, function(key) { - handlers.push(key); - }); - assertEquals(handlers.join(' '), form.data("form")._getHandlers().join(' ')); -}; -FormTest.prototype.testStoreAttribute = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.attr('action'), - target: form.attr('target'), - method: form.attr('method') - }; - form.data("form")._storeAttribute('action'); - form.data("form")._storeAttribute('target'); - form.data("form")._storeAttribute('method'); - - assertEquals(form.data("form").oldAttributes.action, initialFormAttrs.action); - assertEquals(form.data("form").oldAttributes.target, initialFormAttrs.target); - assertEquals(form.data("form").oldAttributes.method, initialFormAttrs.method); -}; -FormTest.prototype.testBind = function() { - var form = jQuery('#form').form(), - submitted = false, - handlersData = form.form('option', 'handlersData'); - - form.on('submit', function(e) { - submitted = true; - e.stopImmediatePropagation(); - e.preventDefault(); - }); - $.each(handlersData, function(key) { - form.trigger(key); - assertTrue(submitted); - submitted = false; - }); - form.off('submit'); -}; -FormTest.prototype.testGetActionUrl = function() { - var form = jQuery('#form').form(), - action = form.attr('action'), - testUrl = 'new/action/url', - testArgs = { - args: {arg: 'value'} - }; - - form.data("form")._storeAttribute('action'); - assertEquals(form.data("form")._getActionUrl(testArgs), action + '/arg/value/'); - assertEquals(form.data("form")._getActionUrl(testUrl), testUrl); - assertEquals(form.data("form")._getActionUrl(), action); -}; -FormTest.prototype.testProcessData = function() { - var form = jQuery('#form').form(), - initialFormAttrs = { - action: form.attr('action'), - target: form.attr('target'), - method: form.attr('method') - }, - testSimpleData = { - action: 'new/action/url', - target: '_blank', - method: 'POST' - }, - testActionArgsData = { - action: { - args: { - arg: 'value' - } - } - }; - var processedData = form.data("form")._processData(testSimpleData); - - assertEquals(form.data("form").oldAttributes.action, initialFormAttrs.action); - assertEquals(form.data("form").oldAttributes.target, initialFormAttrs.target); - assertEquals(form.data("form").oldAttributes.method, initialFormAttrs.method); - - assertEquals(processedData.action, testSimpleData.action); - assertEquals(processedData.target, testSimpleData.target); - assertEquals(processedData.method, testSimpleData.method); - - form.data("form")._rollback(); - - processedData = form.data("form")._processData(testActionArgsData); - form.data("form")._storeAttribute('action'); - var newActionUrl = form.data("form")._getActionUrl(testActionArgsData.action); - - assertEquals(processedData.action, newActionUrl); -}; -FormTest.prototype.testBeforeSubmit = function() { - /*:DOC +=
*/ - var testHandler = { - action: { - args: { - arg1: 'value1' - } - } - }, - form = jQuery('#form').form({handlersData: { - testHandler: testHandler - } - }), - beforeSubmitData = { - action: { - args: { - arg2: 'value2' - } - }, - target: '_blank' - }, - eventData = { - method: 'POST' - }, - resultData = $.extend( - true, - {}, - testHandler, - beforeSubmitData, - eventData - ); - form.data("form")._storeAttribute('action'); - - var testForm = jQuery('#test-form'); - resultData = form.data("form")._processData(resultData); - testForm.prop(resultData); - - form.on('beforeSubmit', function(e, data) { - jQuery.extend(data, beforeSubmitData); - }); - form.on('submit', function(e) { - e.stopImmediatePropagation(); - e.preventDefault(); - }); - form.data("form")._beforeSubmit('testHandler', eventData); - - assertEquals(testForm.prop('action'), form.prop('action')); - assertEquals(testForm.prop('target'), form.prop('target')); - assertEquals(testForm.prop('method'), form.prop('method')); -}; -FormTest.prototype.testSubmit = function() { - var form = jQuery('#form').form({ - handlersData: { - save: {} - } - }), - formSubmitted = false; - - form.data("form")._storeAttribute('action'); - form.data("form")._storeAttribute('target'); - form.data("form")._storeAttribute('method'); - form - .on('submit', function(e) { - e.preventDefault(); - e.stopImmediatePropagation(); - e.preventDefault(); - formSubmitted = true; - }) - .prop({ - action: 'new/action/url', - target: '_blank', - method: 'POST' - }); - - form.data("form")._submit({type: 'save'}); - - assertEquals(form.attr('action'), form.data("form").oldAttributes.action); - assertEquals(form.attr('target'), form.data("form").oldAttributes.target); - assertEquals(form.attr('method'), form.data("form").oldAttributes.method); - assertTrue(formSubmitted); - form.off('submit'); -}; -FormTest.prototype.testBuildURL = function() { - var dataProvider = [ - { - params: ['http://domain.com//', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' - }, - { - params: ['http://domain.com', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' - }, - { - params: ['http://domain.com?some=param', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' - }, - { - params: ['http://domain.com?some=param&', {'key[one]': 'value 1', 'key2': '# value'}], - expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' - } - ], - method = jQuery.mage.form._proto._buildURL, - quantity = dataProvider.length; - - expectAsserts(quantity); - for (var i = 0; i < quantity; i++) { - assertEquals(dataProvider[i].expected, method.apply(null, dataProvider[i].params)); - } -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js deleted file mode 100644 index 174a4efc14da1..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/jquery-loader-test.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TestCase('options', function() { - expect(3); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - element.loader('show'); - equal( element.find('p').text(), 'Please wait...', '.loader() text matches' ); - equal( element.find('img').prop('src').split('/').pop(), 'icon.gif', '.loader() icons match' ); - equal( element.find('img').prop('alt'), 'Loading...', '.loader() image alt text matches' ); - element.loader('destroy'); - -}); - -TestCase( 'element init', function() { - expect(1); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - element.loader('show'); - equal(element.is(':mage-loader'), true, '.loader() init on element'); - element.loader('destroy'); - -}); - -TestCase( 'body init', function() { - expect(1); - - //Initialize Loader on Body - var body = $('body').loader(); - body.loader('show'); - equal(body.is(':mage-loader'), true, '.loader() init on body'); - body.loader('destroy'); -}); - -TestCase( 'show/hide', function() { - expect(3); - - var element = $('
'); - element.appendTo('body'); - element.loader(); - - //Loader show - element.loader('show'); - equal($('.loading-mask').is(':visible'), true, '.loader() open'); - - //Loader hide - element.loader('hide'); - equal($('.loading-mask').is( ":hidden" ), true, '.loader() closed' ); - - //Loader hide on process complete - element.loader('show'); - element.trigger('processStop'); - equal($('.loading-mask').is('visible'), false, '.loader() closed after process'); - - element.loader('destroy'); - -}); - -TestCase( 'destroy', function() { - expect(1); - - var element = $("#loader").loader(); - element.loader('show'); - element.loader('destroy'); - equal( $('.loading-mask').is(':visible'), false, '.loader() destroyed'); - -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js deleted file mode 100644 index 3dd08f57ab8b3..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader-test.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -LoaderTest = TestCase('LoaderTest'); -LoaderTest.prototype.setUp = function() { - /*:DOC +=
*/ -}; -LoaderTest.prototype.tearDown = function() { - var loaderInstance = jQuery('#loader').data('loader'); - if(loaderInstance && loaderInstance.destroy) { - loaderInstance.destroy(); - } -}; -LoaderTest.prototype.getInstance = function() { - return jQuery('#loader').data('loader'); -}; -LoaderTest.prototype.testInit = function() { - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, div.is(':mage-loader')); -}; -// @TODO Need to be fixed to avoid errors on the bamboo server in context of MAGETWO-5085 ticket -/*LoaderTest.prototype._testCreateOnBeforeSend = function() { - /*:DOC +=
*/ -/* var loader = jQuery('#loader').trigger('ajaxSend'); - assertEquals(true, loader.is(':mage-loader')); - loader.loader('destroy'); -};*/ -LoaderTest.prototype.testLoaderOnBody = function() { - var body = jQuery('body').loader(); - body.loader('show'); - assertEquals(true, jQuery('body div:first').is('.loading-mask')); - body.loader('destroy'); -}; -LoaderTest.prototype.testLoaderOnDOMElement = function() { - var div = jQuery('#loader').loader(), - loaderInstance = this.getInstance(); - div.loader('show'); - assertEquals(true, div.find(':first-child').is(loaderInstance.spinner)); -}; -LoaderTest.prototype.testLoaderOptions = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader({ - icon: 'icon.gif', - texts: { - loaderText: 'Loader Text', - imgAlt: 'Image Alt Text' - } - }), - loaderInstance = this.getInstance(); - div.loader('show'); - assertEquals('icon.gif', loaderInstance.spinner.find('img').attr('src')); - assertEquals('Image Alt Text', loaderInstance.spinner.find('img').attr('alt')); - assertEquals('Loader Text', loaderInstance.spinner.find('div.popup-inner').text()); - div.loader('destroy'); - div.loader({ - template:'
' - }); - div.loader('show'); - loaderInstance = this.getInstance(); - assertEquals(true, loaderInstance.spinner.is('#test-template')); - div.loader('destroy'); -}; -LoaderTest.prototype.testHideOnComplete = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - loaderIsVisible = jQuery('.loading-mask').is(':visible'); - div.trigger('processStop'); - assertEquals(false, jQuery('.loading-mask').is(':visible') === loaderIsVisible); -}; -LoaderTest.prototype.testRender = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, $('.loading-mask').is(':visible')); -}; -LoaderTest.prototype.testShowHide = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(); - div.loader('show'); - assertEquals(true, $('.loading-mask').is(':visible')); - div.loader('hide'); - assertEquals(false, $('.loading-mask').is(':visible')); -}; -LoaderTest.prototype.testDestroy = function() { - /*:DOC +=
*/ - var div = jQuery('#loader').loader(), - loaderExist = div.is(':mage-loader'); - div.loader('destroy'); - assertEquals(false, div.is(':mage-loader') === loaderExist); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html b/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html deleted file mode 100644 index 362dec7138276..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/loader/loader.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Unit test - - - - - - - - - - - -
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js b/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js deleted file mode 100644 index 0e1c4a3682b89..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/menu/test-menu.js +++ /dev/null @@ -1,112 +0,0 @@ -/** - * @category mage.js - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - - /* - Set key logger to check key press event - */ - function KeyLogger( target ) { - if ( !(this instanceof KeyLogger) ) { - return new KeyLogger( target ); - } - this.target = target; - this.log = []; - - var self = this; - - this.target.off( 'keydown' ).on( 'keydown', function( event ) { - self.log.push( event.keyCode ); - }); -} -/* - testing if menu get expanded class when option set to true - */ -test( 'Menu Expanded', function() { - expect(1); - var menu = $('#menu'); - var menuItems = menu.find('li'); - var submenu = menuItems.find('ul'); - menu.menu({ - expanded: true - }); - ok(submenu.hasClass('expanded'), 'Expanded Class added'); -}); -/* - testing if down arrow is pressed - */ -test( 'Down Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.DOWN; - menu.trigger( event ); - equal( keys.log[ 0 ], 40, 'Down Arrow Was Pressed' ); -}); -/* - testing if up arrow is pressed - */ -test( 'Up Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.UP; - menu.trigger( event ); - equal( keys.log[ 0 ], 38, 'Up Arrow Was Pressed' ); -}); -/* - testing if left arrow is pressed - */ -test( 'Left Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.LEFT; - menu.trigger( event ); - equal( keys.log[ 0 ], 37, 'Left Arrow Was Pressed' ); -}); -/* - testing if right arrow is pressed - */ -test( 'Right Arrow', function() { - expect(1); - var event, - menu = $('#menu'), - keys = KeyLogger(menu); - event = $.Event('keydown'); - event.keyCode = $.ui.keyCode.RIGHT; - menu.trigger( event ); - equal( keys.log[ 0 ], 39, 'Right Arrow Was Pressed' ); -}); -/* - testing if max limit being set - */ -test( 'Max Limit', function() { - expect(1); - var menu = $('#menu'); - menu.navigation({ - maxItems: 3 - }); - var menuItems = menu.find('> li:visible'); - equal(menuItems.length, 4, 'Max Limit Reach'); -}); -/* - testing if responsive menu is set - */ -test( 'Responsive: More Menu', function() { - expect(1); - var menu = $('#menu'); - menu.navigation({ - responsive: 'onResize' - }); - ok($('body').find('.ui-menu.more'), 'More Menu Created'); -}); - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js deleted file mode 100644 index 4b2b961f753ee..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/suggest-test.js +++ /dev/null @@ -1,952 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -SuggestTest = TestCase('SuggestTest'); -SuggestTest.prototype.setUp = function() { - /*:DOC += */ - this.suggestElement = jQuery('#suggest'); -}; -SuggestTest.prototype.tearDown = function() { - this.suggestDestroy(); -}; -SuggestTest.prototype.suggestDestroy = function() { - if(this.suggestElement.data('suggest')) { - this.suggestElement.suggest('destroy'); - } -}; -SuggestTest.prototype.suggestCreate = function(options, element) { - return (element || this.suggestElement).suggest(options || {} ).data('suggest'); -}; -SuggestTest.prototype.uiHash = { - item: { - id: 1, - label: 'Test Label' - } -}; - -SuggestTest.prototype.testInit = function() { - this.suggestElement.suggest(); - assertTrue(this.suggestElement.is(':mage-suggest')); -}; -SuggestTest.prototype.testCreate = function() { - var suggestOptions = { - controls: { - selector: '.test', - eventsMap: { - focus: ['testfocus'], - blur: ['testblur'], - select: ['testselect'] - } - }, - showRecent: true, - storageKey: 'jsTestDriver-test-suggest-recent', - multiselect: true - }, - recentItems = [{ - id: "1", - "label": "TestLabel1" - }, - { - id: "2", - label: "TestLabel2" - }], - setTemplateExecuted, - prepareValueFieldExecuted, - renderExecuted, - bindExecuted; - - if(window.localStorage) { - localStorage.setItem(suggestOptions.storageKey, JSON.stringify(recentItems)); - } - - var suggestInstance = this.suggestCreate(suggestOptions), - nonSelectedItem = {id: '', label: ''}; - - assertEquals(null, suggestInstance._term); - assertEquals(suggestInstance._nonSelectedItem, nonSelectedItem); - assertNull(suggestInstance._renderedContext); - assertEquals(suggestInstance._selectedItem, nonSelectedItem); - var control = suggestInstance.options.controls; - assertEquals(suggestInstance._control, control); - assertEquals(suggestInstance._recentItems, window.localStorage ? recentItems : []); - assertTrue(suggestInstance.valueField.is(':hidden')); - if(window.localStorage) { - localStorage.removeItem(suggestOptions.storageKey); - } -}; -SuggestTest.prototype.testRender = function() { - var suggestOptions = { - dropdownWrapper: '
', - className: 'test-suggest', - inputWrapper: '
' - }; - - var suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - - assertTrue(suggestInstance.dropdown.hasClass('wrapper-test')); - assertTrue(suggestInstance.dropdown.is(':hidden')); - assertTrue(suggestInstance.element.closest('.test-input-wrapper').size() > 0); - assertTrue(suggestInstance.element.closest('.' + suggestOptions.className).size() > 0); - assertEquals(suggestInstance.element.attr('autocomplete'), 'off'); - - suggestOptions.appendMethod = 'before'; - this.suggestDestroy(); - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - assertTrue(suggestInstance.element.prev().is(suggestInstance.dropdown)); - - suggestOptions.appendMethod = 'after'; - this.suggestDestroy(); - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._render(); - assertTrue(suggestInstance.element.next().is(suggestInstance.dropdown)); -}; -SuggestTest.prototype.testCreateValueField = function() { - var suggestInstance = this.suggestCreate(), - valueField = suggestInstance._createValueField(); - assertTrue(valueField.is('input')); - assertTrue(valueField.is(':hidden')); - this.suggestDestroy(); - - suggestInstance = this.suggestCreate({multiselect: true}); - valueField = suggestInstance._createValueField(); - assertTrue(valueField.is('select')); - assertTrue(valueField.is(':hidden')); - assertEquals(valueField.attr('multiple'), 'multiple'); -}; -SuggestTest.prototype.testPrepareValueField = function() { - var suggestInstance = this.suggestCreate(), - suggestName = this.suggestElement.attr('name'); - suggestInstance._prepareValueField(); - - assertNotUndefined(suggestInstance.valueField); - assertTrue(suggestInstance.element.prev().is(suggestInstance.valueField)); - assertUndefined(suggestInstance.element.attr('name')); - assertEquals(suggestInstance.valueField.attr('name'), suggestName); - this.suggestDestroy(); - - - var valueField = jQuery(''); - jQuery('body').append(valueField); - suggestInstance = this.suggestCreate({valueField: '#suggest-single-select-value'}); - assertTrue(suggestInstance.valueField.is(valueField)); -}; -SuggestTest.prototype.testDestroy = function() { - var suggestOptions = { - inputWrapper: '
', - valueField: null - }, - suggestInstance = this.suggestCreate(suggestOptions), - suggestName = suggestInstance.valueField.attr('name'); - - assertNotUndefined(suggestInstance.dropdown); - assertNotUndefined(suggestInstance.valueField); - assertUndefined(this.suggestElement.attr('name')); - - this.suggestElement.suggest('destroy'); - - assertEquals(this.suggestElement.closest('.test-input-wrapper').length, 0); - assertUndefined(this.suggestElement.attr('autocomplete')); - assertEquals(this.suggestElement.attr('name'), suggestName); - assertFalse(suggestInstance.valueField.parents('html').length > 0); - assertFalse(suggestInstance.dropdown.parents('html').length > 0); -}; -SuggestTest.prototype.testValue = function() { - var value = 'test-value'; - this.suggestElement.val(value); - jQuery('body').append('
' + value + '
'); - - var suggestInputInsatnce = this.suggestCreate(), - suggestDivInsatnce = this.suggestCreate(null, jQuery('#suggest-div')); - - assertEquals(suggestInputInsatnce._value(), value); - assertEquals(suggestDivInsatnce._value(), value); -}; -SuggestTest.prototype.testProxyEvents = function() { - var fakeEvent = $.extend({}, $.Event('keydown'), { - ctrlKey: false, - keyCode: $.ui.keyCode.ENTER, - which: $.ui.keyCode.ENTER - }), - suggestInstance = this.suggestCreate({controls: {selector: null}}), - ctrlKey, - keyCode, - which; - - suggestInstance.dropdown.on('keydown', function(e) { - ctrlKey = e.ctrlKey; - keyCode = e.keyCode; - which = e.which; - }); - - suggestInstance._proxyEvents(fakeEvent); - - assertEquals(ctrlKey, fakeEvent.ctrlKey); - assertEquals(keyCode, fakeEvent.keyCode); - assertEquals(which, fakeEvent.which); -}; -SuggestTest.prototype.testBind = function() { - var eventIsBinded = false, - suggestOptions = { - events: { - click: function() { - eventIsBinded = true; - } - } - }; - this.suggestCreate(suggestOptions); - - this.suggestElement.trigger('click'); - assertTrue(eventIsBinded); -}; -SuggestTest.prototype.testChange = function() { - var changeIsTriggered, - suggestInstance = this.suggestCreate(); - - suggestInstance._term = 'changed'; - this.suggestElement.on('suggestchange', function(e) { - changeIsTriggered = true; - }); - - suggestInstance._change($.Event('click')); - assertTrue(changeIsTriggered); -}; -SuggestTest.prototype.testBindDropdown = function() { - var suggestOptions = { - controls: { - eventsMap: { - focus: ['testFocus'], - blur: ['testBlur'], - select: ['testSelect'] - } - } - }, - suggestInstance = this.suggestCreate(suggestOptions), - focusTriggered, - blurTriggered, - selectTriggered; - - suggestInstance._onSelectItem = function() { - selectTriggered = true; - }; - suggestInstance._focusItem = function() { - focusTriggered = true; - }; - suggestInstance._blurItem = function() { - blurTriggered = true; - }; - suggestInstance._bindDropdown(); - - suggestInstance.dropdown.trigger('testFocus'); - suggestInstance.dropdown.trigger('testBlur'); - suggestInstance.dropdown.trigger('testSelect'); - - assertTrue(focusTriggered); - assertTrue(blurTriggered); - assertTrue(selectTriggered); -}; -SuggestTest.prototype.testTrigger = function() { - var propogationStopped = true, - suggestInstance = this.suggestCreate(); - - this.suggestElement - .on('suggesttestevent', function() { - return false; - }); - this.suggestElement.parent().on('suggesttestevent', function() { - propogationStopped = false; - }); - suggestInstance._trigger('testevent'); - - assertTrue(propogationStopped); -}; -SuggestTest.prototype.testFocusItem = function() { - var focusUiParam = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.on('suggestfocus', function(e, ui) { - focusUiParam = ui; - }); - - assertUndefined(suggestInstance._focused); - assertEquals(suggestInstance.element.val(), ''); - - suggestInstance._focusItem($.Event('focus'), this.uiHash); - assertEquals(suggestInstance._focused, this.uiHash.item); - assertEquals(focusUiParam, this.uiHash); - assertEquals(suggestInstance.element.val(), this.uiHash.item.label); -}; -SuggestTest.prototype.testBlurItem = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._focusItem($.Event('focus'), this.uiHash); - assertEquals(suggestInstance._focused, this.uiHash.item); - assertEquals(suggestInstance.element.val(), this.uiHash.item.label); - - suggestInstance._blurItem(); - assertNull(suggestInstance._focused); - //assertEquals(suggestInstance.element.val(), suggestInstance._term.toString()); -}; -SuggestTest.prototype.testOnSelectItem = function() { - var item = this.uiHash.item, - beforeSelect, - beforeSelectUI, - beforeSelectPropagationStopped = true, - select, - selectUI, - selectPropagationStopped = true, - suggestInstance = this.suggestCreate(); - - suggestInstance._focused = item; - this.suggestElement - .on('suggestbeforeselect', function(e, ui) { - beforeSelect = true; - beforeSelectUI = ui; - }) - .on('suggestselect', function(e, ui) { - select = true; - selectUI = ui; - }) - .parent() - .on('suggestbeforeselect', function() { - beforeSelectPropagationStopped = false; - }) - .on('suggestselect', function() { - selectPropagationStopped = false; - }); - - suggestInstance._onSelectItem($.Event('select')); - - assertTrue(beforeSelect); - assertTrue(select); - assertFalse(beforeSelectPropagationStopped); - assertFalse(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertEquals(selectUI.item, item); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement - .on('suggestbeforeselect.returnfalse', function(e, ui) { - return false; - }); - - suggestInstance._focused = item; - suggestInstance._onSelectItem($.Event('select')); - assertTrue(beforeSelect); - assertNull(select); - assertTrue(beforeSelectPropagationStopped); - assertTrue(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertNull(selectUI); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement - .off('suggestbeforeselect.returnfalse') - .on('suggestselect.returnfalse', function() { - return false; - }); - - suggestInstance._focused = item; - suggestInstance._onSelectItem($.Event('select')); - assertTrue(beforeSelect); - assertTrue(select); - assertFalse(beforeSelectPropagationStopped); - assertTrue(selectPropagationStopped); - assertEquals(beforeSelectUI.item, item); - assertEquals(selectUI.item, item); - - beforeSelect = select = beforeSelectUI = selectUI = null; - beforeSelectPropagationStopped = selectPropagationStopped = true; - - this.suggestElement.off('suggestselect.returnfalse'); - var event = $.Event('select'); - event.target = this.suggestElement[0]; - - suggestInstance._onSelectItem(event, item); - assertEquals(suggestInstance._selectedItem, item); -}; -SuggestTest.prototype.testSelectItem = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; - suggestInstance.valueField.val(''); - - suggestInstance._selectItem($.Event('select')); - assertNull(suggestInstance._selectedItem); - assertNull(suggestInstance._term); - assertEquals(suggestInstance.valueField.val(), ''); - - suggestInstance._focused = this.uiHash.item; - - suggestInstance._selectItem($.Event('select')); - assertEquals(suggestInstance._selectedItem, suggestInstance._focused); - assertEquals(suggestInstance._term, suggestInstance._focused.label); - assertEquals(suggestInstance.valueField.val(), suggestInstance._focused.id); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - this.suggestDestroy(); - - var suggestOptions; - if(window.localStorage) { - suggestOptions = { - showRecent: true, - storageKey: 'jsTestDriver-test-suggest-recent' - }; - suggestInstance = this.suggestCreate(suggestOptions); - suggestInstance._focused = this.uiHash.item; - - suggestInstance._selectItem($.Event('select')); - - var storedItem = localStorage.getItem(suggestOptions.storageKey); - assertEquals(storedItem, JSON.stringify([this.uiHash.item])); - localStorage.removeItem(suggestOptions.storageKey); - } -}; -SuggestTest.prototype.testSelectItemMultiselect = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - - suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; - suggestInstance.valueField.val(''); - - suggestInstance._selectItem($.Event('select')); - assertNull(suggestInstance._selectedItem); - assertNull(suggestInstance._term); - assertFalse(suggestInstance.valueField.find('option').length > 0); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - suggestInstance._focused = this.uiHash.item; - var selectedElement = jQuery('
'); - var event = $.Event('select'); - event.target = selectedElement[0]; - - suggestInstance._selectItem(event); - assertEquals(suggestInstance._selectedItem, suggestInstance._focused); - assertEquals(suggestInstance._term, ''); - assertTrue(suggestInstance._getOption(suggestInstance._focused).length > 0); - assertTrue(selectedElement.hasClass(suggestInstance.options.selectedClass)); - assertTrue(suggestInstance.dropdown.is(':hidden')); - - suggestInstance._selectItem(event); - assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem); - assertFalse(suggestInstance._getOption(suggestInstance._focused).length > 0); - assertFalse(selectedElement.hasClass(suggestInstance.options.selectedClass)); - assertTrue(suggestInstance.dropdown.is(':hidden')); -}; -SuggestTest.prototype.testResetSuggestValue = function() { - var suggestInstance = this.suggestCreate(); - suggestInstance.valueField.val('test'); - suggestInstance._resetSuggestValue(); - assertEquals(suggestInstance.valueField.val(), suggestInstance._nonSelectedItem.id); -}; -SuggestTest.prototype.testResetSuggestValueMultiselect = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - suggestInstance._focused = this.uiHash.item; - var selectedElement = jQuery('
'); - var event = $.Event('select'); - event.target = selectedElement[0]; - - suggestInstance._selectItem(event); - suggestInstance._resetSuggestValue(); - - var suggestValue = suggestInstance.valueField.val(); - assertArray(suggestValue); - assertNotUndefined(suggestValue[0]); - assertEquals(suggestValue[0], this.uiHash.item.id); -}; -SuggestTest.prototype.testReadItemData = function() { - var testElement = jQuery('
'), - suggestInstance = this.suggestCreate(); - assertEquals(suggestInstance._readItemData(testElement), suggestInstance._nonSelectedItem); - testElement.data('suggestOption', 'test'); - assertEquals(suggestInstance._readItemData(testElement), 'test'); -}; -SuggestTest.prototype.testIsDropdownShown = function() { - var suggestInstance = this.suggestCreate(); - suggestInstance.dropdown.hide(); - assertFalse(suggestInstance.isDropdownShown()); - suggestInstance.dropdown.show(); - assertTrue(suggestInstance.isDropdownShown()); -}; -SuggestTest.prototype.testOpen = function() { - var openTriggered = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.on('suggestopen', function() { - openTriggered = true; - }); - - suggestInstance.dropdown.show(); - suggestInstance.open($.Event('open')); - assertFalse(openTriggered); - - suggestInstance.dropdown.hide(); - suggestInstance.open($.Event('open')); - assertTrue(openTriggered); - assertTrue(suggestInstance.dropdown.is(':visible')); -}; -SuggestTest.prototype.testClose = function() { - var closeTriggered = false, - suggestInstance = this.suggestCreate(); - - suggestInstance.element.val('test'); - suggestInstance._renderedContext = 'test'; - suggestInstance.dropdown.show().append('
'); - - this.suggestElement.on('suggestclose', function() { - closeTriggered = true; - }); - - suggestInstance.close($.Event('close')); - assertNull(suggestInstance._renderedContext); - assertTrue(suggestInstance.dropdown.is(':hidden')); - assertFalse(suggestInstance.dropdown.children().length > 0); - assertTrue(closeTriggered); -}; -SuggestTest.prototype.testSetTemplate = function() { - /*:DOC += */ - var suggestInstance = this.suggestCreate({template: '
<%= data.test %>
'}), - tmpl, - html; - - tmpl = suggestInstance.templates[suggestInstance.templateName] - - html = jQuery('
').append(tmpl({ - data: { - test: 'test' - } - })).html(); - - assertEquals(html, '
test
'); - - suggestInstance = this.suggestCreate({ - template: '#test-template' - }); - - tmpl = suggestInstance.templates[suggestInstance.templateName]; - - html = jQuery('
').append(tmpl({ - data: { - test: 'test' - } - })).html(); - - assertEquals(html, '
test
'); -}; -SuggestTest.prototype.testSearch = function() { - var searchTriggered = false, - seachPropagationStopped = true, - suggestInstance = this.suggestCreate(); - - this.suggestElement - .on('suggestsearch', function() { - searchTriggered = true; - }) - .parent() - .on('suggestsearch', function() { - seachPropagationStopped = false; - }); - - suggestInstance._term = suggestInstance._value(); - suggestInstance._selectedItem = null; - - suggestInstance.preventBlur = true; - suggestInstance.search($.Event('search')); - - assertNull(suggestInstance._selectedItem); - assertFalse(searchTriggered); - suggestInstance.preventBlur = false; - - this.suggestElement.val('test'); - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._term, suggestInstance._value()); - assertTrue(searchTriggered); - assertFalse(seachPropagationStopped); - - searchTriggered = false; - seachPropagationStopped = true; - suggestInstance._selectedItem = null; - suggestInstance.options.minLength = 10; - this.suggestElement.val('testtest'); - - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._selectedItem, suggestInstance._nonSelectedItem); - assertEquals(suggestInstance.valueField.val(), suggestInstance._selectedItem.id); - assertFalse(searchTriggered); - - searchTriggered = false; - seachPropagationStopped = true; - suggestInstance._selectedItem = null; - suggestInstance.options.minLength = 1; - this.suggestElement.val('test'); - - this.suggestElement - .on('suggestsearch.returnfalse', function() { - return false; - }); - - suggestInstance.search($.Event('search')); - - assertEquals(suggestInstance._term, suggestInstance._value()); - assertTrue(searchTriggered); - assertTrue(seachPropagationStopped); -}; -SuggestTest.prototype.testUderscoreSearch = function() { - var sourceLaunched = false, - sorceTerm = null, - responceExists = false, - suggestOptions = { - source: function(term, response){ - sourceLaunched = true; - sorceTerm = term; - responceExists = (response && jQuery.type(response) === 'function'); - }, - delay: null - }, - suggestInstance = this.suggestCreate(suggestOptions); - - suggestInstance._search($.Event('search'), 'test', {}); - assertTrue(sourceLaunched); - assertEquals(sorceTerm, 'test'); - assertTrue(responceExists); - assertTrue(this.suggestElement.hasClass(suggestInstance.options.loadingClass)); - assertUndefined(suggestInstance._searchTimeout); - - suggestInstance.options.delay = 100; - suggestInstance._search($.Event('search'), 'test', {}); - assertNotUndefined(suggestInstance._searchTimeout); -}; -SuggestTest.prototype.testPrepareDropdownContext = function() { - var suggestInstance = this.suggestCreate(); - - suggestInstance._items = [this.uiHash.item]; - suggestInstance._term = 'test'; - suggestInstance._selectedItem = this.uiHash.item; - - var context = suggestInstance._prepareDropdownContext({}); - - assertEquals(context.items, suggestInstance._items); - assertEquals(context.term, suggestInstance._term); - assertEquals(context.optionData(this.uiHash.item), - 'data-suggest-option="' + JSON.stringify(this.uiHash.item).replace(/"/g, '"') + '"'); - assertTrue(context.itemSelected(this.uiHash.item)); - assertNotUndefined(context.noRecordsText); - assertFalse(context.recentShown()); - assertNotUndefined(context.recentTitle); - assertNotUndefined(context.showAllTitle); - assertFalse(context.allShown()); -}; -SuggestTest.prototype.testIsItemSelected = function() { - var suggestInstance = this.suggestCreate(); - assertFalse(suggestInstance._isItemSelected(this.uiHash.item)); - suggestInstance._selectedItem = this.uiHash.item; - assertTrue(suggestInstance._isItemSelected(this.uiHash.item)); - this.suggestDestroy(); - - suggestInstance = this.suggestCreate({multiselect: true}); - assertFalse(suggestInstance._isItemSelected(this.uiHash.item)); - suggestInstance.valueField.append(''); - assertTrue(suggestInstance._isItemSelected(this.uiHash.item)); -}; -SuggestTest.prototype.testRenderDropdown = function() { - var testContext = { - test: 'test' - }, - contentUpdatedTriggered = false, - suggestOptions = { - template: '
<%= data.test %>
' - }, - suggestInstance = this.suggestCreate(suggestOptions); - - suggestInstance.dropdown.on('contentUpdated', function() { - contentUpdatedTriggered = true; - }); - suggestInstance.element.addClass(suggestInstance.options.loadingClass); - - suggestInstance._renderDropdown(null, [this.uiHash.item], testContext); - - assertEquals(suggestInstance._items, [this.uiHash.item]); - assertEquals(suggestInstance.dropdown.html(), '
test
'); - assertTrue(contentUpdatedTriggered); - assertEquals(suggestInstance._renderedContext, suggestInstance._prepareDropdownContext(testContext)); - assertFalse(suggestInstance.element.hasClass(suggestInstance.options.loadingClass)); - assertTrue(suggestInstance.dropdown.is(':visible')); -}; -SuggestTest.prototype.testProcessResponse = function() { - var testContext = { - test: 'test' - }, - responseTriggered = false, - suggestOptions = { - template: '
<%= data.test %>
' - }, - responcePropagationStopped = true, - rendererExists, - responseData, - suggestInstance = this.suggestCreate(suggestOptions); - - this.suggestElement - .on('suggestresponse', function(e, data, renderer) { - responseTriggered = true; - rendererExists = (renderer && jQuery.type(renderer) === 'function'); - responseData = data; - }) - .parent() - .on('suggestresponse', function() { - responcePropagationStopped = false; - }); - suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext); - - assertTrue(responseTriggered); - assertTrue(rendererExists); - assertEquals(responseData, [this.uiHash.item]); - assertFalse(responcePropagationStopped); - assertEquals(suggestInstance.dropdown.html(), '
test
'); - - suggestInstance.dropdown.empty(); - this.suggestElement - .on('suggestresponse.returnfalse', function() { - return false; - }); - responcePropagationStopped = true; - - suggestInstance._processResponse($.Event('response'), [this.uiHash.item], testContext); - - assertTrue(responcePropagationStopped); - assertFalse(suggestInstance.dropdown.children().tength > 0); -}; -SuggestTest.prototype.testSource = function() { - var sourceArray = [this.uiHash.item], - sourceUrl = 'www.test.url', - sourceFuncExecuted = false, - responseExecuted = false, - responseItems = null, - sourceFuncTerm = "", - sourceFuncResponse = null, - ajaxData = '', - ajaxUrl = '', - sourceFunc = function(term, response) { - sourceFuncExecuted = true; - sourceFuncTerm = term; - sourceFuncResponse = (response && jQuery.type(response) === 'function'); - }, - response = function (items) { - responseExecuted = true; - responseItems = items; - }; - - var suggestInstance = this.suggestCreate({ - source: sourceArray - }); - - suggestInstance._source('test', response); - - assertTrue(responseExecuted); - assertEquals(responseItems, sourceArray); - this.suggestDestroy(); - - responseExecuted = false; - responseItems = null; - - suggestInstance = this.suggestCreate({ - source: sourceUrl, - ajaxOptions: { - beforeSend: function(xhr, settings) { - xhr.abort(); - ajaxData = settings.data; - ajaxUrl = settings.url; - settings.success(sourceArray); - } - }, - termAjaxArgument: 'test' - }); - suggestInstance._source('test', response); - - assertTrue(responseExecuted); - assertEquals(responseItems, sourceArray); - assertEquals(ajaxData, 'test=test'); - assertEquals(ajaxUrl, sourceUrl); - this.suggestDestroy(); - - responseExecuted = false; - responseItems = null; - - suggestInstance = this.suggestCreate({ - source: sourceFunc - }); - suggestInstance._source('test', response); - - assertTrue(sourceFuncExecuted); - assertEquals(sourceFuncTerm, 'test'); - assertTrue(sourceFuncResponse); -}; -SuggestTest.prototype.testAbortSearch = function() { - var searchAborted = false, - suggestInstance = this.suggestCreate(); - - this.suggestElement.addClass(suggestInstance.options.loadingClass); - suggestInstance._xhr = { - abort: function() { - searchAborted = true; - } - }; - - suggestInstance._abortSearch(); - - assertFalse(this.suggestElement.hasClass(suggestInstance.options.loadingClass)); - assertTrue(searchAborted); -}; -SuggestTest.prototype.testShowAll = function() { - var searchAborted, - showAllTerm, - showAllContext, - suggestInstance = this.suggestCreate(); - suggestInstance._abortSearch = function() { - searchAborted = true; - }; - suggestInstance._search = function(e, term, context) { - showAllTerm = term; - showAllContext = context; - }; - - suggestInstance._showAll(jQuery.Event('showAll')); - - assertTrue(searchAborted); - assertEquals(showAllTerm, ''); - assertEquals(showAllContext, {_allShown: true}); -}; -SuggestTest.prototype.testAddRecent = function() { - var recentItems = [ - {id: 2, label: 'Test Label 2'}, - {id: 3, label: 'Test Label 3'} - ], - suggestInstance = this.suggestCreate(); - - suggestInstance._recentItems = recentItems; - suggestInstance.options.storageKey = 'jsTestDriver-test-suggest-recent'; - suggestInstance._addRecent(this.uiHash.item); - - recentItems.unshift(this.uiHash.item); - assertEquals(recentItems, suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems)); - } - - suggestInstance._addRecent(this.uiHash.item); - assertEquals(recentItems, suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify(recentItems)); - } - - suggestInstance.options.storageLimit = 1; - var newRecentItem = {id: 4, label: 'Test Label 4'}; - suggestInstance._addRecent(newRecentItem); - - assertEquals([newRecentItem], suggestInstance._recentItems); - if(window.localStorage) { - assertEquals(localStorage.getItem(suggestInstance.options.storageKey), JSON.stringify([newRecentItem])); - localStorage.removeItem(suggestInstance.options.storageKey); - } -}; -SuggestTest.prototype.testRenderMultiselect = function() { - var suggestOptions = { - multiselect: true, - multiSuggestWrapper: '
' - }, - suggestInstance = this.suggestCreate(suggestOptions); - - assertTrue(this.suggestElement.closest('[data-role="parent-choice-element"]').is('#test-multisuggest-wrapper')); - assertTrue(suggestInstance.elementWrapper.is('#test-multisuggest-wrapper')); -}; -SuggestTest.prototype.testGetOptions = function() { - var suggestInstance = this.suggestCreate(); - - assertFalse(suggestInstance._getOptions().length > 0); - - var option = jQuery(''); - suggestInstance.valueField.append(option); - assertTrue(suggestInstance._getOptions().is(option)); -}; -SuggestTest.prototype.testFilterSelected = function() { - var items = [this.uiHash.item, {id: 2, label: 'Test Label2'}], - suggestInstance = this.suggestCreate(); - - suggestInstance.valueField.append(''); - assertEquals(suggestInstance._filterSelected(items), [this.uiHash.item]); -}; -SuggestTest.prototype.testCreateOption = function() { - var suggestInstance = this.suggestCreate(); - - var option = suggestInstance._createOption(this.uiHash.item); - assertEquals(option.val(), "1"); - assertEquals(option.prop('selected'), true); - assertEquals(option.text(), "Test Label"); - assertNotUndefined(option.data('renderedOption')); -}; -SuggestTest.prototype.testAddOption = function() { - var selectTarget = jQuery('
'), - event = jQuery.Event('add'), - suggestInstance = this.suggestCreate(); - - event.target = selectTarget[0]; - suggestInstance._addOption(event, this.uiHash.item); - - var option = suggestInstance.valueField.find('option[value=' + this.uiHash.item.id + ']'); - assertTrue(option.length > 0); - assertTrue(option.data('selectTarget').is(selectTarget)); -}; -SuggestTest.prototype.testGetOption = function() { - var suggestInstance = this.suggestCreate(); - - assertFalse(suggestInstance._getOption(this.uiHash.item).length > 0); - - var option = jQuery(''); - suggestInstance.valueField.append(option); - assertTrue(suggestInstance._getOption(this.uiHash.item).length > 0); - assertTrue(suggestInstance._getOption(option).length > 0); -}; -SuggestTest.prototype.testRemoveLastAdded = function() { - var suggestInstance = this.suggestCreate({multiselect: true}); - - suggestInstance._addOption({}, this.uiHash.item); - assertTrue(suggestInstance.valueField.find('option').length > 0); - suggestInstance._removeLastAdded(); - assertFalse(suggestInstance.valueField.find('option').length > 0); -}; -SuggestTest.prototype.testRemoveOption = function() { - var selectTarget = jQuery('
'), - event = jQuery.Event('select'), - suggestInstance = this.suggestCreate({multiselect: true}); - - selectTarget.addClass(suggestInstance.options.selectedClass); - event.target = selectTarget[0]; - - suggestInstance._addOption(event, this.uiHash.item); - assertTrue(suggestInstance.valueField.find('option').length > 0); - suggestInstance.removeOption(event, this.uiHash.item); - assertFalse(suggestInstance.valueField.find('option').length > 0); - assertFalse(selectTarget.hasClass(suggestInstance.options.selectedClass)); -}; -SuggestTest.prototype.testRenderOption = function() { - var suggestInstance = this.suggestCreate(), - choiceTmpl; - - suggestInstance.elementWrapper = jQuery('
').appendTo('body'); - - choiceTmpl = mageTemplate(suggestInstance.options.choiceTemplate, { - text: this.uiHash.item.label - }); - - var testOption = jQuery(choiceTmpl), - option = suggestInstance._renderOption(this.uiHash.item); - - assertTrue(option.next().is(suggestInstance.elementWrapper)); - assertEquals(jQuery('
').append(testOption).html(), jQuery('
').append(option).html()); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js deleted file mode 100644 index 2a63c6953ef87..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/suggest/tree-suggest-test.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -TreeSuggestTest = TestCase('TreeSuggestTest'); -TreeSuggestTest.prototype.setUp = function() { - /*:DOC += */ - this.suggestElement = jQuery('#tree-suggest'); -}; -TreeSuggestTest.prototype.tearDown = function() { - this.treeSuggestDestroy(); -}; -TreeSuggestTest.prototype.treeSuggestDestroy = function() { - if(this.suggestElement.data('treeSuggest')) { - this.suggestElement.treeSuggest('destroy'); - } -}; -TreeSuggestTest.prototype.treeSuggestCreate = function(options, element) { - return (element || this.suggestElement).treeSuggest(options || {} ).data('treeSuggest'); -}; -TreeSuggestTest.prototype.uiHash = { - item: { - id: 1, - label: 'Test Label' - } -}; -TreeSuggestTest.prototype.stub = function(instance, methodName, retVal) { - var d = $.Deferred(); - if(instance && instance[methodName]) { - instance[methodName] = function() { - d.resolve(arguments); - if(retVal) { - return retVal; - } - }; - } - return d.promise(); -}; - -TreeSuggestTest.prototype.testInit = function() { - var treeSuggestInstance = this.treeSuggestCreate(); - assertTrue(this.suggestElement.is(':mage-treeSuggest')); - assertEquals(treeSuggestInstance.widgetEventPrefix, 'suggest'); -}; - -TreeSuggestTest.prototype.testClose = function() { - var treeSuggestInstance = this.treeSuggestCreate(), - elementFocused = false; - treeSuggestInstance.element.on('focus', function() { - elementFocused = true; - }); - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(); - assertEquals(treeSuggestInstance.dropdown.text(), ''); - assertTrue(treeSuggestInstance.dropdown.is(':hidden')); - - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(jQuery.Event('select')); - assertEquals(treeSuggestInstance.dropdown.text(), ''); - assertTrue(treeSuggestInstance.dropdown.is(':hidden')); - - treeSuggestInstance.dropdown.text('test').show(); - treeSuggestInstance.close(jQuery.Event('select_tree_node')); - assertEquals(treeSuggestInstance.dropdown.text(), 'test'); - assertTrue(treeSuggestInstance.dropdown.is(':visible')); -}; -TreeSuggestTest.prototype.testFilterSelected = function() { - var treeSuggestInstance = this.treeSuggestCreate(); - assertEquals(treeSuggestInstance._filterSelected([this.uiHash.item], {_allShown: true}), [this.uiHash.item]); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html deleted file mode 100644 index 30c29e38cc102..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - Tabs Widget: QUnit Tests - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js deleted file mode 100644 index 7129357159f9f..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs-test.js +++ /dev/null @@ -1,203 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TabsTest = TestCase('TabsTest'); -TabsTest.prototype.testInit = function() { - /*:DOC +=
*/ - var tabs = jQuery('#tabs').tabs(); - assertTrue(tabs.is(':mage-tabs')); -}; - -TabsTest.prototype.testCreate = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - var tabs = jQuery('#tabs').tabs({active: 'tab2'}); - assertEquals(tabs.tabs('option', 'active'), tabs.data("tabs").anchors.index(jQuery('#tab2'))); -}; - -TabsTest.prototype.testActiveAnchor = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - var tabs = jQuery('#tabs').tabs({active: 'tab2'}); - assertTrue(tabs.tabs('activeAnchor').is(tabs.data("tabs").anchors.eq(tabs.tabs('option', 'active')))); -}; - -TabsTest.prototype.testGetTabIndex = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
*/ - var tabs = jQuery('#tabs').tabs(); - assertEquals(0, tabs.data("tabs")._getTabIndex('tab1')); - assertEquals(1, tabs.data("tabs")._getTabIndex('tab2')); -}; - -TabsTest.prototype.testGetPanelForTab = function() { - /*:DOC +=
    -
  • - -
  • -
-
-
-
*/ - var tabs = jQuery('#tabs').tabs({destination: '#destination'}); - assertTrue(jQuery(tabs.data("tabs")._getPanelForTab(jQuery('#tab1').closest('li'))).is('#tab1_content')); -}; - -TabsTest.prototype.testMovePanelsInDestination = function() { - /*:DOC +=
    -
  • - -
    -
  • -
-
-
*/ - var tabs = jQuery('#tabs').tabs({destination: '#destination'}); - var panel = jQuery('#tab1_content'); - tabs.append(panel); - assertTrue(panel.parents('#tabs').length > 0); - assertEquals(panel.parents(tabs.tabs('option', 'destination')).length, 0); - - tabs.data("tabs")._movePanelsInDestination(panel); - assertEquals(panel.parents('#tabs').length, 0); - assertTrue(panel.parents(tabs.tabs('option', 'destination')).length > 0); - - tabs.tabs('option', 'destination', null); - tabs.append(panel); - assertTrue(panel.parents('#tabs').length > 0); - - tabs.data("tabs")._movePanelsInDestination(panel); - assertTrue(panel.parents('#tabs').length > 0); -}; - -TabsTest.prototype.testAjaxLoad = function() { - /*:DOC +=
- */ - var tabs = jQuery('#tabs').tabs(), - ui = { - tab: jQuery('#tab1'), - panel: jQuery('#tab1_content') - }; - tabs.tabs('option', 'load')({}, ui); - assertEquals(jQuery('#tab1').attr('href'), '#tab1_content'); -}; - -TabsTest.prototype.testOnContentChange = function() { - /*:DOC +=
- */ - var eventMock = { - data: { - index: 0 - } - }, - tabs = jQuery('#tabs').tabs(); - - tabs.data("tabs")._onContentChange(eventMock); - assertTrue(jQuery('#tab1').hasClass('_changed')); -}; - -TabsTest.prototype.testOnFocus = function() { - /*:DOC +=
    -
  • - -
    -
  • -
  • - -
    -
  • -
- */ - var eventMock = { - data: { - index: 1 - } - }, - tabs = jQuery('#tabs').tabs(); - - assertNotEquals(tabs.tabs('option', '_active'), eventMock.data.index); - - tabs.data("tabs")._onFocus(eventMock); - assertEquals(tabs.tabs('option', '_active'), eventMock.data.index); -}; - -TabsTest.prototype.testOnBeforeSubmit = function() { - /*:DOC +=
    -
  • - -
    -
  • -
- */ - var tabs = jQuery('#tabs').tabs({active: 'tab1'}), - data= {}, - testData = { - action: { - args: { - tab: 'tab1' - } - } - }, - testDataTabArgument = { - action: { - args: { - testtab: 'tab1' - } - } - }, - tabPrefix = 'test-', - tabIdArgument = 'testtab'; - - tabs.data("tabs")._onBeforeSubmit({}, data); - assertEquals(data, testData); - data = {}; - - jQuery('#tab1').prop('id', 'test-tab1'); - tabs.tabs('option', 'tabsBlockPrefix', tabPrefix); - tabs.data("tabs")._onBeforeSubmit({}, data); - assertEquals(data, testData); - tabs.tabs('option', 'tabsBlockPrefix', null); - jQuery('#test-tab1').prop('id', 'tab1'); - data = {}; - - tabs.tabs('option', 'tabIdArgument', tabIdArgument); - tabs.data("tabs")._onBeforeSubmit({}, data); - assertEquals(data, testDataTabArgument); -}; - - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js b/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js deleted file mode 100644 index 582c55da344d3..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/tabs/tabs.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * @category mage.js - * @package test - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -/* - - */ -test( "Initialization", function() { - expect(2); - var tabs = $("
"); - tabs.tabs(); - ok( tabs.is(':mage-tabs'), "widget instantiated" ); - tabs.tabs('destroy'); - ok( !tabs.is(':mage-tabs'), "widget destroyed" ); -}); - -test( "Collapsible instantiation", function() { - expect(2); - var tabs = $("
"); - var title = $("
").attr("data-role","collapsible"); - title.appendTo(tabs); - tabs.tabs(); - ok( title.is(':mage-collapsible'), "widget instantiated" ); - tabs.tabs('destroy'); - ok( !title.is(':mage-collapsible'), "widget destroyed" ); -}); - -test( "Tabs behavior - closing others tabs when one gets activated", function() { - expect(4); - var tabs = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').appendTo(tabs); - tabs.appendTo("body"); - tabs.tabs(); - ok( content1.is(':visible'), "content visible" ); - ok( content2.is(':hidden'), "content hidden" ); - title2.trigger('click'); - ok( content1.is(':hidden'), "content hidden" ); - ok( content2.is(':visible'), "content visible" ); - tabs.tabs('destroy'); -}); - -test( "Testing enable,disable,activate,deactivate options", function() { - expect(6); - var tabs = $('
'); - var title = $('
').appendTo(tabs); - var content = $('
').appendTo(tabs); - tabs.appendTo("body"); - tabs.tabs(); - ok( content.is(':visible'), "content visible" ); - tabs.tabs("deactivate",0); - ok( content.is(':hidden'), "content hidden" ); - tabs.tabs("activate",0); - ok( content.is(':visible'), "content visible" ); - tabs.tabs("disable",0); - ok( content.is(':hidden'), "content hidden" ); - title.trigger("click"); - ok( content.is(':hidden'), "content hidden" ); - tabs.tabs("enable",0); - title.trigger("click"); - ok( content.is(':visible'), "content visible" ); - tabs.tabs('destroy'); -}); - -asyncTest( "Keyboard support for tabs view", function() { - - expect( 5 ); - var tabs = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').appendTo(tabs); - tabs.appendTo("body"); - tabs.tabs(); - - title1.on("focus",function(ev){ - ok(content1.is(':visible'), "Content is expanded"); - title1.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.RIGHT } )); - ok(content2.is(':visible'), "Content is expanded"); - ok(content1.is(':hidden'), "Content is collapsed"); - title2.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.LEFT } )); - ok(content1.is(':visible'), "Content is expanded"); - ok(content2.is(':hidden'), "Content is collapsed"); - tabs.tabs('destroy'); - start(); - } ); - - setTimeout(function(){ - title1.focus(); - },10); -}); - -asyncTest( "Keyboard support for accordion view", function() { - - expect( 5 ); - var tabs = $('
'); - var title1 = $('
').appendTo(tabs); - var content1 = $('
').appendTo(tabs); - var title2 = $('
').appendTo(tabs); - var content2 = $('
').appendTo(tabs); - tabs.appendTo("body"); - tabs.tabs({openOnFocus:false}); - - title1.on("focus",function(ev){ - ok(content1.is(':visible'), "Content is expanded"); - title1.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.RIGHT } )); - ok(content1.is(':visible'), "Content is expanded"); - ok(content2.is(':hidden'), "Content is collapsed"); - title2.trigger($.Event( 'keydown', { keyCode: $.ui.keyCode.ENTER } )); - ok(content2.is(':visible'), "Content is expanded"); - ok(content1.is(':hidden'), "Content is collapsed"); - tabs.tabs('destroy'); - start(); - } ); - - setTimeout(function(){ - title1.focus(); - },10); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js deleted file mode 100644 index a9bbc7fb10d2d..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/translate/translate-test.js +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TranslateTest = TestCase('TranslateTest'); -TranslateTest.prototype.testTranslateExist = function() { - assertNotUndefined(jQuery.mage.translate); -}; -TranslateTest.prototype.testTranslationParametersOneArgument = function() { - jQuery.mage.translate.add('Hello World!'); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersArray = function() { - jQuery.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); - assertEquals( - 'Hello World!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationParametersObject = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals( - translation['Hello World!'], - jQuery.mage.translate.translate('Hello World!')); - - translation = { - 'Hello World!': 'Hallo Welt!', - 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' - }; - jQuery.mage.translate.add(translation); - jQuery.each(translation, function(key) { - assertEquals(translation[key], jQuery.mage.translate.translate(key)); - }); -}; -TranslateTest.prototype.testTranslationParametersTwoArguments = function() { - jQuery.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); - assertEquals( - 'Bonjour tout le monde!', - jQuery.mage.translate.translate('Hello World!')); -}; -TranslateTest.prototype.testTranslationAlias = function() { - var translation = {'Hello World!': 'Bonjour tout le monde!'}; - jQuery.mage.translate.add(translation); - assertEquals(translation['Hello World!'], jQuery.mage.__('Hello World!')); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js deleted file mode 100644 index 18a117f1913b1..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/translate_inline/translate-inline-test.js +++ /dev/null @@ -1,123 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -TranslateInlineTest = TestCase('TranslateInlineTest'); -TranslateInlineTest.prototype.testInit = function() { - /*:DOC += -
- */ - var translateInline = jQuery('[data-role="translate-dialog"]').translateInline(); - assertTrue(translateInline.is(':mage-translateInline')); - translateInline.translateInline('destroy'); -}; -TranslateInlineTest.prototype.testDialogOpenOnEdit = function() { - /*:DOC += -
- */ - var options= { - dialog: { - id: 'dialog-id' - } - }; - var translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options), - isDialogHiddenOnInit = translateInline.is(':hidden'); - translateInline.trigger('edit.editTrigger'); - var dialogVisibleAfterTriggerEdit = translateInline.is(':visible'); - assertTrue(isDialogHiddenOnInit); - assertTrue(dialogVisibleAfterTriggerEdit); - translateInline.translateInline('destroy'); -}; -TranslateInlineTest.prototype.testTranslationFormTemplate = function() { - /*:DOC += -
- */ - var options = { - translateForm: { - data:{ - id: 'translate-form-id', - newTemplateVariable: 'New Template Variable' - } - } - }, - translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options); - translateInline.trigger('edit.editTrigger'); - var translateForm = jQuery('#' + options.translateForm.data.id); - assertTrue(translateForm.size() > 0); - assertEquals(translateForm.text(), options.translateForm.data.newTemplateVariable); - translateInline.translateInline('destroy'); -}; -// @TODO Need to be fixed to avoid errors on the bamboo server in context of MAGETWO-5085 ticket -/*TranslateInlineTest.prototype._testTranslateFormSubmit = function() { - FORM_KEY = 'form_key'; - var options = { - ajaxUrl: 'www.test.com', - area: 'test', - translateForm: { - template:'
', - data:{ - id: 'translate-form-id' - } - }, - dialog: { - id: 'dialog-id', - buttons : [{ - 'class': 'submit-button' - }] - } - }, - translateInline = jQuery(document).translateInline(options), - submit = jQuery('.ui-dialog-buttonset .submit-button'), - ajaxParametersCorrect = false; - - translateInline.trigger('edit.editTrigger'); - var parameters = jQuery.param({area: options.area}) + - '&' + jQuery('#' + options.translateForm.data.id).serialize(), - dialog = jQuery('#' + options.dialog.id), - dialogVisibleOnAjaxSend = false, - dialogHiddenAfterAjaxComplete = false; - jQuery(document) - .on('ajaxSend', function(e, jqXHR, settings){ - jqXHR.abort(); - dialogVisibleOnAjaxSend = dialog.is(':visible'); - ajaxParametersCorrect = settings.data.indexOf(parameters) >= 0; - jQuery(this).trigger('ajaxComplete'); - }); - submit.trigger('click'); - assertEquals(true, dialogVisibleOnAjaxSend); - assertEquals(true, ajaxParametersCorrect); - assertEquals(true, dialog.is(':hidden')); - translateInline.translateInline('destroy'); -};*/ -TranslateInlineTest.prototype.testDestroy = function() { - /*:DOC += -
- - */ - var options = { - translateForm: { - data:{ - id: 'translate-form-id', - newTemplateVariable: '' - } - } - }, - translateInline = jQuery('[data-role="translate-dialog"]').translateInline(options), - editTrigger = jQuery('#edit-trigger-id').editTrigger(), - editTriggerCreated = editTrigger.size() && jQuery('#edit-trigger-id').is(':mage-editTrigger'), - editTriggerEventIsBound = false; - - assertTrue(translateInline.is(':mage-translateInline')); - assertTrue(editTriggerCreated); - translateInline.on('edit.editTrigger', function(){editTriggerEventIsBound = true;}); - translateInline.translateInline('destroy'); - translateInline.trigger('edit.editTrigger'); - assertFalse(translateInline.is(':mage-translateInline')); - assertFalse(editTriggerEventIsBound); -}; diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html b/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html deleted file mode 100644 index 00661de6d8153..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/validation/index.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - Validation - - - - - - - - - - - - - - - - - -
-
-
- - diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js b/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js deleted file mode 100644 index 602ba4b8d3e60..0000000000000 --- a/dev/tests/js/JsTestDriver/testsuite/mage/validation/test-validation.js +++ /dev/null @@ -1,611 +0,0 @@ -/** - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ -test( "testValidateNoHtmlTags", function() { - expect(4); - equal($.validator.methods['validate-no-html-tags'].call(this, ""),true); - equal($.validator.methods['validate-no-html-tags'].call(this, null),true); - equal($.validator.methods['validate-no-html-tags'].call(this, "abc"),true); - equal($.validator.methods['validate-no-html-tags'].call(this, "
abc
"),false); - -}); - -test( "testAllowContainerClassName", function() { - expect(4); - var radio = $(''); - radio.appendTo("#qunit-fixture"); - equal($.validator.methods['allow-container-className'].call(this, radio[0]),true); - var checkbox = $(''); - equal($.validator.methods['allow-container-className'].call(this, checkbox[0]),true); - var radio2 = $(''); - equal($.validator.methods['allow-container-className'].call(this, radio2[0]),false); - var checkbox2 = $(''); - equal($.validator.methods['allow-container-className'].call(this, checkbox2[0]),false); -}); - -test( "testValidateSelect", function() { - expect(5); - equal($.validator.methods['validate-select'].call(this, ""),false); - equal($.validator.methods['validate-select'].call(this, "none"),false); - equal($.validator.methods['validate-select'].call(this, null),false); - equal($.validator.methods['validate-select'].call(this, undefined),false); - equal($.validator.methods['validate-select'].call(this, "abc"),true); -}); - -test( "testValidateNotEmpty", function() { - expect(5); - ok(!$.validator.methods['validate-no-empty'].call(this, "")); - ok(!$.validator.methods['validate-no-empty'].call(this, null)); - ok(!$.validator.methods['validate-no-empty'].call(this, undefined)); - ok(!$.validator.methods['validate-no-empty'].call(this, " ")); - ok($.validator.methods['validate-no-empty'].call(this, "test")); -}); - -test( "testValidateStreet", function() { - expect(9); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, ""),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, null),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, undefined),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, "abc "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " 123 "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " abc123 "),true); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " !@# "),false); - equal($.validator.methods['validate-alphanum-with-spaces'].call(this, " abc.123 "),false); -}); - -test( "testValidatePhoneStrict", function() { - expect(9); - equal($.validator.methods['validate-phoneStrict'].call(this, ""),true); - equal($.validator.methods['validate-phoneStrict'].call(this, null),true); - equal($.validator.methods['validate-phoneStrict'].call(this, undefined),true); - equal($.validator.methods['validate-phoneStrict'].call(this, " "),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "5121231234"),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "512.123.1234"),false); - equal($.validator.methods['validate-phoneStrict'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-phoneStrict'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-phoneStrict'].call(this, "(512) 123-1234"),true); -}); - -test( "testValidatePhoneLax", function() { - expect(11); - equal($.validator.methods['validate-phoneLax'].call(this, ""),true); - equal($.validator.methods['validate-phoneLax'].call(this, null),true); - equal($.validator.methods['validate-phoneLax'].call(this, undefined),true); - equal($.validator.methods['validate-phoneLax'].call(this, " "),false); - equal($.validator.methods['validate-phoneLax'].call(this, "5121231234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "512.123.1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512) 123-1234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)1231234"),true); - equal($.validator.methods['validate-phoneLax'].call(this, "(512)_123_1234"),false); -}); - -test( "testValidateFax", function() { - expect(9); - equal($.validator.methods['validate-fax'].call(this, ""),true); - equal($.validator.methods['validate-fax'].call(this, null),true); - equal($.validator.methods['validate-fax'].call(this, undefined),true); - equal($.validator.methods['validate-fax'].call(this, " "),false); - equal($.validator.methods['validate-fax'].call(this, "5121231234"),false); - equal($.validator.methods['validate-fax'].call(this, "512.123.1234"),false); - equal($.validator.methods['validate-fax'].call(this, "512-123-1234"),true); - equal($.validator.methods['validate-fax'].call(this, "(512)123-1234"),true); - equal($.validator.methods['validate-fax'].call(this, "(512) 123-1234"),true); -}); - -test( "testValidateEmail", function() { - expect(11); - equal($.validator.methods['validate-email'].call(this, ""),true); - equal($.validator.methods['validate-email'].call(this, null),true); - equal($.validator.methods['validate-email'].call(this, undefined),true); - equal($.validator.methods['validate-email'].call(this, " "),false); - equal($.validator.methods['validate-email'].call(this, "123@123.com"),true); - equal($.validator.methods['validate-email'].call(this, "abc@124.en"),true); - equal($.validator.methods['validate-email'].call(this, "abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc.abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc-abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc_abc@abc.commmmm"),true); - equal($.validator.methods['validate-email'].call(this, "abc.abc_abc@abc"),false); -}); - -test( "testValidateEmailSender", function() { - expect(10); - equal($.validator.methods['validate-emailSender'].call(this, ""),true); - equal($.validator.methods['validate-emailSender'].call(null),true); - equal($.validator.methods['validate-emailSender'].call(undefined),true); - equal($.validator.methods['validate-emailSender'].call(" "),true); - equal($.validator.methods['validate-emailSender'].call("123@123.com"),true); - equal($.validator.methods['validate-emailSender'].call("abc@124.en"),true); - equal($.validator.methods['validate-emailSender'].call("abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc.abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc-abc@abc.commmmm"),true); - equal($.validator.methods['validate-emailSender'].call("abc.abc_abc@abc.commmmm"),true); -}); - -test( "testValidatePassword", function() { - expect(9); - equal($.validator.methods['validate-password'].call(this, ""),true); - equal($.validator.methods['validate-password'].call(this, null),false); - equal($.validator.methods['validate-password'].call(this, undefined),false); - equal($.validator.methods['validate-password'].call(this, " "),true); - equal($.validator.methods['validate-password'].call(this, "123@123.com"),true); - equal($.validator.methods['validate-password'].call(this, "abc"),false); - equal($.validator.methods['validate-password'].call(this, "abc "),false); - equal($.validator.methods['validate-password'].call(this, " abc "),false); - equal($.validator.methods['validate-password'].call(this, "dddd"),false); -}); - -test( "testValidateAdminPassword", function() { - expect(9); - equal(true, $.validator.methods['validate-admin-password'].call(this, "")); - equal(false, $.validator.methods['validate-admin-password'].call(this, null)); - equal(false, $.validator.methods['validate-admin-password'].call(this, undefined)); - equal(true, $.validator.methods['validate-admin-password'].call(this, " ")); - equal(true, $.validator.methods['validate-admin-password'].call(this, "123@123.com")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "abc")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "abc ")); - equal(false, $.validator.methods['validate-admin-password'].call(this, " abc ")); - equal(false, $.validator.methods['validate-admin-password'].call(this, "dddd")); -}); - -test( "testValidateUrl", function() { - expect(8); - equal(true, $.validator.methods['validate-url'].call(this, "")); - equal(true, $.validator.methods['validate-url'].call(this, null)); - equal(true, $.validator.methods['validate-url'].call(this, undefined)); - equal(false, $.validator.methods['validate-url'].call(this, " ")); - equal(true, $.validator.methods['validate-url'].call(this, "http://www.google.com")); - equal(true, $.validator.methods['validate-url'].call(this, "http://127.0.0.1:8080/index.php")); - equal(true, $.validator.methods['validate-url'].call(this, "http://app-spot.com/index.php")); - equal(true, $.validator.methods['validate-url'].call(this, "http://app-spot_space.com/index.php")); -}); - -test( "testValidateCleanUrl", function() { - expect(8); - equal(true, $.validator.methods['validate-clean-url'].call(this, "")); - equal(true, $.validator.methods['validate-clean-url'].call(this, null)); - equal(true, $.validator.methods['validate-clean-url'].call(this, undefined)); - equal(false, $.validator.methods['validate-clean-url'].call(this, " ")); - equal(true, $.validator.methods['validate-clean-url'].call(this, "http://www.google.com")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1:8080/index.php")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1:8080")); - equal(false, $.validator.methods['validate-clean-url'].call(this, "http://127.0.0.1")); -}); - -test( "testValidateXmlIdentifier", function() { - expect(8); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, null)); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, undefined)); - equal(false, $.validator.methods['validate-xml-identifier'].call(this, " ")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc_123")); - equal(true, $.validator.methods['validate-xml-identifier'].call(this, "abc-123")); - equal(false, $.validator.methods['validate-xml-identifier'].call(this, "123-abc")); -}); - -test( "testValidateSsn", function() { - expect(8); - equal(true, $.validator.methods['validate-ssn'].call(this, "")); - equal(true, $.validator.methods['validate-ssn'].call(this, null)); - equal(true, $.validator.methods['validate-ssn'].call(this, undefined)); - equal(false, $.validator.methods['validate-ssn'].call(this, " ")); - equal(false, $.validator.methods['validate-ssn'].call(this, "abc")); - equal(true, $.validator.methods['validate-ssn'].call(this, "123-13-1234")); - equal(true, $.validator.methods['validate-ssn'].call(this, "012-12-1234")); - equal(false, $.validator.methods['validate-ssn'].call(this, "23-12-1234")); -}); - -test( "testValidateZip", function() { - expect(8); - equal(true, $.validator.methods['validate-zip-us'].call(this, "")); - equal(true, $.validator.methods['validate-zip-us'].call(this, null)); - equal(true, $.validator.methods['validate-zip-us'].call(this, undefined)); - equal(false, $.validator.methods['validate-zip-us'].call(this, " ")); - equal(true, $.validator.methods['validate-zip-us'].call(this, "12345-1234")); - equal(true, $.validator.methods['validate-zip-us'].call(this, "02345")); - equal(false, $.validator.methods['validate-zip-us'].call(this, "1234")); - equal(false, $.validator.methods['validate-zip-us'].call(this, "1234-1234")); -}); - -test( "testValidateDateAu", function() { - expect(8); - equal(true, $.validator.methods['validate-date-au'].call(this, "")); - equal(true, $.validator.methods['validate-date-au'].call(this, null)); - equal(true, $.validator.methods['validate-date-au'].call(this, undefined)); - equal(false, $.validator.methods['validate-date-au'].call(this, " ")); - equal(true, $.validator.methods['validate-date-au'].call(this, "01/01/2012")); - equal(true, $.validator.methods['validate-date-au'].call(this, "30/01/2012")); - equal(false, $.validator.methods['validate-date-au'].call(this, "01/30/2012")); - equal(false, $.validator.methods['validate-date-au'].call(this, "1/1/2012")); -}); - -test( "testValidateCurrencyDollar", function() { - expect(8); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, null)); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, undefined)); - equal(false, $.validator.methods['validate-currency-dollar'].call(this, " ")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$123")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$1,123.00")); - equal(true, $.validator.methods['validate-currency-dollar'].call(this, "$1234")); - equal(false, $.validator.methods['validate-currency-dollar'].call(this, "$1234.1234")); -}); - -test( "testValidateNotNegativeNumber", function() { - expect(11); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, null)); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, undefined)); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, " ")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "0")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1234")); - equal(true, $.validator.methods['validate-not-negative-number'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1e")); - equal(false, $.validator.methods['validate-not-negative-number'].call(this, "-1,234.1234")); -}); - -test( "testValidateGreaterThanZero", function() { - expect(11); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, null)); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, undefined)); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, " ")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "0")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1234")); - equal(true, $.validator.methods['validate-greater-than-zero'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1e")); - equal(false, $.validator.methods['validate-greater-than-zero'].call(this, "-1,234.1234")); -}); - -test( "testValidateCssLength", function() { - expect(11); - equal(true, $.validator.methods['validate-css-length'].call(this, "")); - equal(true, $.validator.methods['validate-css-length'].call(this, null)); - equal(true, $.validator.methods['validate-css-length'].call(this, undefined)); - equal(false, $.validator.methods['validate-css-length'].call(this, " ")); - equal(false, $.validator.methods['validate-css-length'].call(this, "0")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1234")); - equal(true, $.validator.methods['validate-css-length'].call(this, "1,234.1234")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1e")); - equal(false, $.validator.methods['validate-css-length'].call(this, "-1,234.1234")); -}); - -test( "testValidateData", function() { - expect(9); - equal(true, $.validator.methods['validate-data'].call(this, "")); - equal(true, $.validator.methods['validate-data'].call(this, null)); - equal(true, $.validator.methods['validate-data'].call(this, undefined)); - equal(false, $.validator.methods['validate-data'].call(this, " ")); - equal(false, $.validator.methods['validate-data'].call(this, "123abc")); - equal(true, $.validator.methods['validate-data'].call(this, "abc")); - equal(false, $.validator.methods['validate-data'].call(this, " abc")); - equal(true, $.validator.methods['validate-data'].call(this, "abc123")); - equal(false, $.validator.methods['validate-data'].call(this, "abc-123")); -}); - - -test( "testValidateOneRequiredByName", function() { - expect(4); - var radio = $(''); - radio.appendTo("#qunit-fixture"); - ok(!$.validator.methods['validate-one-required-by-name'].call(this, - null, radio[0])); - var radio2 = $(''); - radio2.appendTo("#qunit-fixture"); - ok($.validator.methods['validate-one-required-by-name'].call(this, - null, radio2[0])); - - var checkbox = $(''); - checkbox.appendTo("#qunit-fixture"); - ok(!$.validator.methods['validate-one-required-by-name'].call(this, - null, checkbox[0])); - var checkbox2 = $(''); - checkbox2.appendTo("#qunit-fixture"); - ok($.validator.methods['validate-one-required-by-name'].call(this, - null, checkbox2[0])); -}); - -test( "testLessThanEqualsTo", function() { - expect(5); - var elm1 = $(''); - var elm2 = $(''); - ok(!$.validator.methods['less-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - elm1[0].value = 4; - ok($.validator.methods['less-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - - var elm3 = $(''); - var elm4= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm3[0].value, - elm3, elm4)); - - var elm5 = $(''); - var elm6= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm5[0].value, - elm5, elm6)); - - var elm7 = $(''); - var elm8= $(''); - ok($.validator.methods['less-than-equals-to'].call(this, elm7[0].value, - elm7, elm8)); -}); - -test( "testGreaterThanEqualsTo", function() { - expect(5); - - var elm1 = $(''); - var elm2 = $(''); - ok(!$.validator.methods['greater-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - elm1[0].value = 9; - ok($.validator.methods['greater-than-equals-to'].call(this, elm1[0].value, - elm1, elm2)); - - var elm3 = $(''); - var elm4= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm3[0].value, - elm3, elm4)); - - var elm5 = $(''); - var elm6= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm5[0].value, - elm5, elm6)); - - var elm7 = $(''); - var elm8= $(''); - ok($.validator.methods['greater-than-equals-to'].call(this, elm7[0].value, - elm7, elm8)); -}); - -test( "testValidateGroupedQty", function() { - expect(5); - var div1 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div1); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div1); - $('').appendTo(div1); - - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div1[0])); - - var div2 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div2); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div2); - $('').appendTo(div2); - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div2[0])); - - var div3 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div3); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div3); - $('').appendTo(div3); - ok(!$.validator.methods['validate-grouped-qty'].call(this, null, null, div3[0])); - - var div4 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div4); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div4); - $('').appendTo(div4); - ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div4[0])); - - var div5 = $('
'); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div5); - $('').attr("data-validate","{'validate-grouped-qty':'#super-product-table'}") - .appendTo(div5); - $('').appendTo(div5); - ok($.validator.methods['validate-grouped-qty'].call(this, null, null, div5[0])); - -}); - -test( "testValidateCCTypeSelect", function() { - expect(14); - var visaValid = $(''); - var visaInvalid = $(''); - var mcValid = $(''); - var mcInvalid = $(''); - var aeValid = $(''); - var aeInvalid = $(''); - - var diValid = $(''); - var diInvalid = $(''); - var dnValid = $(''); - var dnInvalid = $(''); - var jcbValid = $(''); - var jcbInvalid = $(''); - var upValid = $(''); - var upInvalid = $(''); - - ok($.validator.methods['validate-cc-type-select'].call(this, 'VI', null, visaValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'VI', null, visaInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'MC', null, mcValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'MC', null, mcInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'AE', null, aeValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'AE', null, aeInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'DI', null, diValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'DI', null, diInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'DN', null, dnValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'DN', null, dnInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'JCB', null, jcbValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'JCB', null, jcbInvalid)); - ok($.validator.methods['validate-cc-type-select'].call(this, 'UP', null, upValid)); - ok(!$.validator.methods['validate-cc-type-select'].call(this, 'UP', null, upInvalid)); -}); - -test( "testValidateCCNumber", function() { - expect(37); - ok($.validator.methods['validate-cc-number'].call(this, '4916835098995909', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '5265071363284878', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6011120623356953', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '371293266574617', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '4916835098995901', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '5265071363284870', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011120623356951', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '371293266574619', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '2221220000000003', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '2721220000000008', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601109020000000003', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011111144444444', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6011222233334444', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011522233334447', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601174455555553', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6011745555555550', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601177455555556', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '601182455555556', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '601187999555558', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '601287999555556', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6444444444444443', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6644444444444441', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3044444444444444', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3064444444444449', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3095444444444442', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3096444444444441', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3696444444444445', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3796444444444444', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3896444444444443', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '3528444444444449', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '3529444444444448', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6221262244444440', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6229981111111111', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6249981111111117', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6279981111111110', null, null)); - ok($.validator.methods['validate-cc-number'].call(this, '6282981111111115', null, null)); - ok(!$.validator.methods['validate-cc-number'].call(this, '6289981111111118', null, null)); -}); - -test( "testValidateCCType", function() { - expect(14); - var select = $(''); - - select.val('VI'); - ok($.validator.methods['validate-cc-type'].call(this, '4916835098995909', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - select.val('MC'); - ok($.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '4916835098995909', null, select)); - select.val('AE'); - ok($.validator.methods['validate-cc-type'].call(this, '371293266574617', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '5265071363284878', null, select)); - select.val('DI'); - ok($.validator.methods['validate-cc-type'].call(this, '6011050000000009', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '371293266574617', null, select)); - select.val('DN'); - ok($.validator.methods['validate-cc-type'].call(this, '3095434000000001', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '6011050000000009', null, select)); - select.val('JCB'); - ok($.validator.methods['validate-cc-type'].call(this, '3528000000000007', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '3095434000000001', null, select)); - select.val('UP'); - ok($.validator.methods['validate-cc-type'].call(this, '6221260000000000', null, select)); - ok(!$.validator.methods['validate-cc-type'].call(this, '3528000000000007', null, select)); -}); - -test( "testValidateCCExp", function() { - expect(3); - var year = $(''), - currentTime = new Date(), - currentMonth = currentTime.getMonth() + 1, - currentYear = currentTime.getFullYear(); - year.val(currentYear); - if (currentMonth > 1) { - ok(!$.validator.methods['validate-cc-exp'].call(this, currentMonth - 1, null, year)); - } - ok($.validator.methods['validate-cc-exp'].call(this, currentMonth, null, year)); - year.val(currentYear + 1); - ok($.validator.methods['validate-cc-exp'].call(this, currentMonth, null, year)); - -}); - -test( "testValidateCCCvn", function() { - expect(8); - var ccType = $(''); - - ccType.val('VI'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ccType.val('MC'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ccType.val('AE'); - ok($.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ccType.val('DI'); - ok($.validator.methods['validate-cc-cvn'].call(this, '123', null, ccType)); - ok(!$.validator.methods['validate-cc-cvn'].call(this, '1234', null, ccType)); -}); - -test( "testValidateNumberRange", function() { - expect(14); - ok($.validator.methods['validate-number-range'].call(this, '-1', null, null)); - ok($.validator.methods['validate-number-range'].call(this, '1', null, null)); - ok($.validator.methods['validate-number-range'].call(this, '', null, null)); - ok($.validator.methods['validate-number-range'].call(this, null, null, null)); - ok($.validator.methods['validate-number-range'].call(this, '0', null, null)); - ok(!$.validator.methods['validate-number-range'].call(this, 'asds', null, null)); - - ok($.validator.methods['validate-number-range'].call(this, '10', null, '10-20.06')); - ok($.validator.methods['validate-number-range'].call(this, '15', null, '10-20.06')); - ok(!$.validator.methods['validate-number-range'].call(this, '1', null, '10-20.06')); - ok(!$.validator.methods['validate-number-range'].call(this, '30', null, '10-20.06')); - - var el1 = $('').get(0); - ok($.validator.methods['validate-number-range'].call(this, '10', el1, null)); - ok($.validator.methods['validate-number-range'].call(this, '15', el1, null)); - ok(!$.validator.methods['validate-number-range'].call(this, '1', el1, null)); - ok($.validator.methods['validate-number-range'].call(this, '30', el1, null)); -}); - - - -test( "testValidateDigitsRange", function() { - expect(15); - ok($.validator.methods['validate-digits-range'].call(this, '-1', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '1', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '', null, null)); - ok($.validator.methods['validate-digits-range'].call(this, null, null, null)); - ok($.validator.methods['validate-digits-range'].call(this, '0', null, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, 'asds', null, null)); - - ok($.validator.methods['validate-digits-range'].call(this, '10', null, '10-20')); - ok($.validator.methods['validate-digits-range'].call(this, '15', null, '10-20')); - ok(!$.validator.methods['validate-digits-range'].call(this, '1', null, '10-20')); - ok(!$.validator.methods['validate-digits-range'].call(this, '30', null, '10-20')); - ok($.validator.methods['validate-digits-range'].call(this, '30', null, '10-20.06')); - - var el1 = $('').get(0); - ok($.validator.methods['validate-digits-range'].call(this, '10', el1, null)); - ok($.validator.methods['validate-digits-range'].call(this, '15', el1, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, '1', el1, null)); - ok(!$.validator.methods['validate-digits-range'].call(this, '30', el1, null)); -}); diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html b/dev/tests/js/jasmine/assets/lib/web/mage/menu.html similarity index 50% rename from dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html rename to dev/tests/js/jasmine/assets/lib/web/mage/menu.html index d0a3b9b873801..03c673a7dac5f 100644 --- a/dev/tests/js/JsTestDriver/testsuite/mage/menu/index.html +++ b/dev/tests/js/jasmine/assets/lib/web/mage/menu.html @@ -1,36 +1,10 @@ - - - - - - Unit test - - - - - - - - - - - - -
-
- - + \ No newline at end of file diff --git a/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html b/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html new file mode 100644 index 0000000000000..dd4d665ca188e --- /dev/null +++ b/dev/tests/js/jasmine/assets/lib/web/mage/tabs.html @@ -0,0 +1,8 @@ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html b/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html new file mode 100644 index 0000000000000..5e48598a081a2 --- /dev/null +++ b/dev/tests/js/jasmine/assets/lib/web/mage/translate-inline.html @@ -0,0 +1,4 @@ + +
\ No newline at end of file diff --git a/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js new file mode 100644 index 0000000000000..19a54d95cf704 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/accordion.test.js @@ -0,0 +1,80 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +define([ + 'jquery', + 'mage/accordion' +], function ($) { + 'use strict'; + + describe('Test for mage/accordion jQuery plugin', function () { + it('check if accordion can be initialized', function () { + var accordion = $('
'); + + accordion.accordion(); + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + accordion.accordion('destroy'); + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check one-collapsible element accordion', function () { + var accordion = $('
'), + title1 = $('
').appendTo(accordion), + content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo('body'); + + accordion.accordion(); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + title2.trigger('click'); + + expect(content1.is(':hidden')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + title1.trigger('click'); + + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + accordion.accordion('destroy'); + + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + it('check multi-collapsible element accordion', function () { + var accordion = $('
'), + title1 = $('
').appendTo(accordion), + content1 = $('
').appendTo(accordion), + title2 = $('
').appendTo(accordion), + content2 = $('
').appendTo(accordion); + + accordion.appendTo('body'); + + accordion.accordion({ + multipleCollapsible: true + }); + + expect(accordion.is(':mage-accordion')).toBeTruthy(); + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + $(title1).trigger('click'); + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':hidden')).toBeTruthy(); + + $(title2).trigger('click'); + expect(content1.is(':visible')).toBeTruthy(); + expect(content2.is(':visible')).toBeTruthy(); + + accordion.accordion('destroy'); + expect(accordion.is(':mage-accordion')).toBeFalsy(); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js new file mode 100644 index 0000000000000..84880e6af72c5 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/backend/suggest.test.js @@ -0,0 +1,524 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/backend/suggest' +], function ($) { + 'use strict'; + + describe('mage/backend/suggest', function () { + var suggestSelector = '#suggest'; + + beforeEach(function () { + var $suggest = $(''); + + $('body').append($suggest); + $('body').append(''); + }); + + afterEach(function () { + $(suggestSelector).remove(); + $('#test-template').remove(); + $(suggestSelector).suggest('destroy'); + }); + + it('Check that suggest inited', function () { + var $suggest = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }); + + expect($suggest.is(':mage-suggest')).toBe(true); + }); + + it('Check suggest create', function () { + var options = { + template: '#test-template', + choiceTemplate: '
  • ', + controls: { + selector: '.test', + eventsMap: { + focus: ['testfocus'], + blur: ['testblur'], + select: ['testselect'] + } + }, + showRecent: true, + storageKey: 'test-suggest-recent', + multiselect: true + }, + recentItems = [{ + id: '1', + label: 'TestLabel1' + }, + { + id: '2', + label: 'TestLabel2' + } + ], + nonSelectedItem = { + id: '', + label: '' + }, + suggestInstance; + + if (window.localStorage) { + localStorage.setItem(options.storageKey, JSON.stringify(recentItems)); + } + + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + + expect(suggestInstance._term).toBe(null); + expect(suggestInstance._nonSelectedItem).toEqual(nonSelectedItem); + expect(suggestInstance._renderedContext).toBe(null); + expect(suggestInstance._selectedItem).toEqual(nonSelectedItem); + expect(suggestInstance._control).toEqual(suggestInstance.options.controls); + expect(suggestInstance._recentItems).toEqual(window.localStorage ? recentItems : []); + expect(suggestInstance.valueField.is(':hidden')).toBe(true); + + if (window.localStorage) { + localStorage.removeItem(options.storageKey); + } + }); + + it('Check suggest render', function () { + var options = { + template: '#test-template', + choiceTemplate: '
  • ', + dropdownWrapper: '
    ', + className: 'test-suggest', + inputWrapper: '
    ' + }, + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + + suggestInstance._render(); + + expect(suggestInstance.dropdown.hasClass('wrapper-test')).toBe(true); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + expect(suggestInstance.element.closest('.test-input-wrapper').size()).toBeGreaterThan(0); + expect(suggestInstance.element.closest('.' + options.className).size()).toBeGreaterThan(0); + expect(suggestInstance.element.attr('autocomplete')).toBe('off'); + + options.appendMethod = 'before'; + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + suggestInstance._render(); + expect(suggestInstance.element.prev().is(suggestInstance.dropdown)).toBe(true); + + options.appendMethod = 'after'; + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest(options).data('mage-suggest'); + suggestInstance._render(); + expect(suggestInstance.element.next().is(suggestInstance.dropdown)).toBe(true); + }); + + it('Check suggest createValueField', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + valueField = suggestInstance._createValueField(); + + expect(valueField.is('input')).toBe(true); + expect(valueField.is(':hidden')).toBe(true); + + $(suggestSelector).suggest('destroy'); + suggestInstance = $(suggestSelector).suggest({ + multiselect: true, + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + valueField = suggestInstance._createValueField(); + + expect(valueField.is('select')).toBe(true); + expect(valueField.is(':hidden')).toBe(true); + expect(valueField.attr('multiple')).toBe('multiple'); + }); + + it('Check suggest prepareValueField', function () { + var $suggest = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }), + suggestInstance = $suggest.data('mage-suggest'), + suggestName = $suggest.attr('name'); + + suggestInstance._prepareValueField(); + + expect(suggestInstance.valueField).not.toBe(true); + expect(suggestInstance.element.prev().is(suggestInstance.valueField)).toBe(true); + expect(suggestInstance.element.attr('name')).toBe(undefined); + expect(suggestInstance.valueField.attr('name')).toBe(suggestName); + }); + + it('Check suggest destroy', function () { + var options = { + template: '#test-template', + choiceTemplate: '
  • ', + inputWrapper: '
    ', + valueField: null + }, + $suggest = $(suggestSelector).suggest(options), + suggestInstance = $suggest.data('mage-suggest'), + suggestName = $suggest.attr('name'); + + expect(suggestInstance.dropdown).not.toBe(undefined); + expect(suggestInstance.valueField).not.toBe(undefined); + expect(suggestName).toBe(undefined); + + $suggest.suggest('destroy'); + + expect($suggest.closest('.test-input-wrapper').length).toBe(0); + expect($suggest.attr('autocomplete')).toBe(undefined); + expect($suggest.attr('name')).toBe(suggestInstance.valueField.attr('name')); + expect(suggestInstance.valueField.parents('html').length).not.toBeGreaterThan(0); + expect(suggestInstance.dropdown.parents('html').length).not.toBeGreaterThan(0); + }); + + it('Check suggest value', function () { + var value = 'test-value', + suggestInstance, suggestDivInstance; + + $(suggestSelector).val(value); + $('body').append('
    ' + value + '
    '); + + suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + suggestDivInstance = $('#suggest-div').suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + + expect(suggestInstance._value()).toBe(value); + expect(suggestDivInstance._value()).toBe(value); + $('#suggest-div').remove(); + }); + + it('Check suggest bind', function () { + var eventIsBinded = false, + options = { + template: '#test-template', + choiceTemplate: '
  • ', + events: { + /** Stub function */ + click: function () { + eventIsBinded = true; + } + } + }, + $suggest = $(suggestSelector).suggest(options); + + $suggest.trigger('click'); + expect(eventIsBinded).toBe(true); + }); + + it('Check suggest focus/blur', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + expect(suggestInstance._focused).toBe(undefined); + expect(suggestInstance.element.val()).toBe(''); + + suggestInstance._focusItem($.Event('focus'), uiHash); + + expect(suggestInstance._focused).toEqual(uiHash.item); + expect(suggestInstance.element.val()).toBe(uiHash.item.label); + + suggestInstance._blurItem(); + + expect(suggestInstance._focused).toBe(null); + expect(suggestInstance.element.val()).toBe(''); + }); + + it('Check suggest select', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; + suggestInstance.valueField.val(''); + suggestInstance._selectItem($.Event('select')); + + expect(suggestInstance._selectedItem).toBe(null); + expect(suggestInstance._term).toBe(null); + expect(suggestInstance.valueField.val()).toBe(''); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._focused = uiHash.item; + suggestInstance._selectItem($.Event('select')); + + expect(suggestInstance._selectedItem).toEqual(suggestInstance._focused); + expect(suggestInstance._term).toBe(suggestInstance._focused.label); + expect(suggestInstance.valueField.val()).toBe(suggestInstance._focused.id.toString()); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + }); + + it('Check suggest multiselect', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + event = $.Event('select'), + selectedElement = $('
    '); + + event.target = selectedElement[0]; + suggestInstance._focused = suggestInstance._term = suggestInstance._selectedItem = null; + suggestInstance.valueField.val(''); + suggestInstance._selectItem(event); + + expect(suggestInstance._selectedItem).toBe(null); + expect(suggestInstance._term).toBe(null); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._focused = uiHash.item; + suggestInstance._selectItem(event); + + expect(suggestInstance._selectedItem).toEqual(suggestInstance._focused); + expect(suggestInstance._term).toBe(''); + expect(suggestInstance._getOption(suggestInstance._focused).length).toBeGreaterThan(0); + expect(selectedElement.hasClass(suggestInstance.options.selectedClass)).toBe(true); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance._selectItem(event); + expect(suggestInstance._selectedItem).toEqual(suggestInstance._nonSelectedItem); + expect(suggestInstance._term).toBe(''); + expect(suggestInstance._getOption(suggestInstance._focused).length).not.toBeGreaterThan(0); + expect(selectedElement.hasClass(suggestInstance.options.selectedClass)).toBe(false); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + }); + + it('Check suggest reset value', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + + suggestInstance.valueField.val('test'); + expect(suggestInstance.valueField.val()).toBe('test'); + suggestInstance._resetSuggestValue(); + expect(suggestInstance.valueField.val()).toBe(suggestInstance._nonSelectedItem.id); + }); + + it('Check suggest reset multiselect value', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + event = $.Event('select'); + + event.target = $('
    ')[0]; + suggestInstance._focused = uiHash.item; + + suggestInstance._selectItem(event); + suggestInstance._resetSuggestValue(); + + expect(suggestInstance.valueField.val() instanceof Array).toBe(true); + expect(suggestInstance.valueField.val()[0]).not.toBe(undefined); + expect(suggestInstance.valueField.val()[0]).toBe(uiHash.item.id.toString()); + }); + + it('Check suggest read item data', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + testElement = $('
    '); + + expect(suggestInstance._readItemData(testElement)).toEqual(suggestInstance._nonSelectedItem); + testElement.data('suggestOption', 'test'); + expect(suggestInstance._readItemData(testElement)).toEqual('test'); + }); + + it('Check suggest template', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '
    <%= data.test %>
    ', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + tmpl = suggestInstance.templates[suggestInstance.templateName], + html = $('
    ').append(tmpl({ + data: { + test: 'test' + } + })).html(); + + expect(html).toEqual('
    test
    '); + suggestInstance.destroy(); + $('body').append(''); + + suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + tmpl = suggestInstance.templates[suggestInstance.templateName]; + html = $('
    ').append(tmpl({ + data: { + test: 'test' + } + })).html(); + + expect(html).toEqual('
    test
    '); + $('#test-template').remove(); + }); + + it('Check suggest dropdown visibility', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'); + + suggestInstance.dropdown.hide(); + expect(suggestInstance.isDropdownShown()).toBe(false); + expect(suggestInstance.dropdown.is(':hidden')).toBe(true); + + suggestInstance.dropdown.show(); + expect(suggestInstance.isDropdownShown()).toBe(true); + expect(suggestInstance.dropdown.is(':visible')).toBe(true); + }); + + it('Check suggest create option', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + option = suggestInstance._createOption(uiHash.item); + + expect(option.val()).toBe('1'); + expect(option.prop('selected')).toBe(true); + expect(option.text()).toBe('Test Label'); + expect(option.data('renderedOption')).not.toBe(undefined); + }); + + it('Check suggest add option', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + selectTarget = $('
    '), + event = $.Event('add'), + option; + + event.target = selectTarget[0]; + suggestInstance._addOption(event, uiHash.item); + option = suggestInstance.valueField.find('option[value=' + uiHash.item.id + ']'); + + expect(option.length).toBeGreaterThan(0); + expect(option.data('selectTarget').is(selectTarget)).toBe(true); + }); + + it('Check suggest get option', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ' + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + option = $(''); + + expect(suggestInstance._getOption(uiHash.item).length).not.toBeGreaterThan(0); + + suggestInstance.valueField.append(option); + expect(suggestInstance._getOption(uiHash.item).length).toBeGreaterThan(0); + expect(suggestInstance._getOption(option).length).toBeGreaterThan(0); + }); + + it('Check suggest last added', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + suggestInstance._addOption({}, uiHash.item); + expect(suggestInstance.valueField.find('option').length).toBeGreaterThan(0); + suggestInstance._removeLastAdded(); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + }); + + it('Check suggest remove option', function () { + var suggestInstance = $(suggestSelector).suggest({ + template: '#test-template', + choiceTemplate: '
  • ', + multiselect: true + }).data('mage-suggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }, + selectTarget = $('
    '), + event = $.Event('select'); + + selectTarget.addClass(suggestInstance.options.selectedClass); + event.target = selectTarget[0]; + + suggestInstance._addOption(event, uiHash.item); + expect(suggestInstance.valueField.find('option').length).toBeGreaterThan(0); + suggestInstance.removeOption(event, uiHash.item); + expect(suggestInstance.valueField.find('option').length).not.toBeGreaterThan(0); + expect(selectTarget.hasClass(suggestInstance.options.selectedClass)).toBe(false); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js b/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js new file mode 100644 index 0000000000000..b116fc7058808 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/backend/tree-suggest.test.js @@ -0,0 +1,52 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/backend/tree-suggest' +], function ($) { + 'use strict'; + + describe('mage/backend/tree-suggest', function () { + var treeSuggestSelector = '#tree-suggest'; + + beforeEach(function () { + var $treeSuggest = $(''); + + $('body').append($treeSuggest); + }); + + afterEach(function () { + $(treeSuggestSelector).remove(); + $(treeSuggestSelector).treeSuggest('destroy'); + }); + + it('Check that treeSuggest inited', function () { + var $treeSuggest = $(treeSuggestSelector).treeSuggest(), + treeSuggestInstance = $treeSuggest.data('mage-treeSuggest'); + + expect($treeSuggest.is(':mage-treeSuggest')).toBe(true); + expect(treeSuggestInstance.widgetEventPrefix).toBe('suggest'); + }); + + it('Check treeSuggest filter', function () { + var treeSuggestInstance = $(treeSuggestSelector).treeSuggest().data('mage-treeSuggest'), + uiHash = { + item: { + id: 1, + label: 'Test Label' + } + }; + + expect(treeSuggestInstance._filterSelected( + [uiHash.item], + { + _allShown: true + } + )).toEqual([uiHash.item]); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js b/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js new file mode 100644 index 0000000000000..b2c6aed2c9fba --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/calendar.test.js @@ -0,0 +1,173 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'jquery/ui', + 'mage/calendar' +], function ($) { + 'use strict'; + + describe('mage/calendar', function () { + describe('Check calendar', function () { + var calendarSelector = '#calendar'; + + beforeEach(function () { + var $calendar = $(''); + + $('body').append($calendar); + }); + + afterEach(function () { + $(calendarSelector).remove(); + $(calendarSelector).calendar('destroy'); + }); + + it('Check that calendar inited', function () { + var $calendar = $(calendarSelector).calendar(); + + expect($calendar.is(':mage-calendar')).toBe(true); + }); + + it('Check configuration merge', function () { + var $calendar; + + $.extend(true, $, { + calendarConfig: { + showOn: 'button', + showAnim: '', + buttonImageOnly: true, + showButtonPanel: true, + showWeek: true, + timeFormat: '', + showTime: false, + showHour: false, + showMinute: false + } + }); + + $calendar = $(calendarSelector).calendar(); + + expect($calendar.calendar('option', 'showOn')).toBe('button'); + expect($calendar.calendar('option', 'showAnim')).toBe(''); + expect($calendar.calendar('option', 'buttonImageOnly')).toBe(true); + expect($calendar.calendar('option', 'showButtonPanel')).toBe(true); + expect($calendar.calendar('option', 'showWeek')).toBe(true); + expect($calendar.calendar('option', 'timeFormat')).toBe(''); + expect($calendar.calendar('option', 'showTime')).toBe(false); + expect($calendar.calendar('option', 'showHour')).toBe(false); + expect($calendar.calendar('option', 'showMinute')).toBe(false); + + delete $.calendarConfig; + }); + + it('Specifying AM/PM in timeformat option changes AMPM option to true', function () { + var $calendar = $(calendarSelector).calendar({ + timeFormat: 'hh:mm tt', + ampm: false + }); + + expect($calendar.calendar('option', 'ampm')).toBe(true); + }); + + it('Omitting AM/PM in timeformat option changes AMPM option to false', function () { + var $calendar = $(calendarSelector).calendar({ + timeFormat: 'hh:mm' + }); + + expect($calendar.calendar('option', 'ampm')).toBe(null); + }); + + it('With server timezone offset', function () { + var serverTimezoneSeconds = 1346122095, + $calendar = $(calendarSelector).calendar({ + serverTimezoneSeconds: serverTimezoneSeconds + }), + currentDate = new Date(); + + currentDate.setTime((serverTimezoneSeconds + currentDate.getTimezoneOffset() * 60) * 1000); + + expect($calendar.calendar('getTimezoneDate').toString()).toBe(currentDate.toString()); + }); + + it('Without sever timezone offset', function () { + var $calendar = $(calendarSelector).calendar(), + currentDate = new Date(); + + expect($calendar.calendar('getTimezoneDate').toString()).toBe(currentDate.toString()); + }); + + it('Check destroy', function () { + var $calendar = $(calendarSelector).calendar(); + + expect($calendar.is(':mage-calendar')).toBe(true); + $calendar.calendar('destroy'); + expect($calendar.is(':mage-calendar')).toBe(false); + }); + }); + describe('Check dateRange', function () { + var dateRangeSelector = '#date-range'; + + beforeEach(function () { + var $dateRange = $('
    ' + + '' + + '' + + '
    '); + + $('body').append($dateRange); + }); + + afterEach(function () { + $(dateRangeSelector).remove(); + $(dateRangeSelector).dateRange('destroy'); + }); + + it('Check that dateRange inited', function () { + var $dateRange = $(dateRangeSelector).dateRange(); + + expect($dateRange.is(':mage-dateRange')).toBe(true); + }); + + it('Check that dateRange inited with additional options', function () { + var $from = $('#from'), + $to = $('#to'); + + $(dateRangeSelector).dateRange({ + from: { + id: 'from' + }, + to: { + id: 'to' + } + }); + + expect($from.hasClass('_has-datepicker')).toBe(true); + expect($to.hasClass('_has-datepicker')).toBe(true); + }); + + it('Check destroy', function () { + var $dateRange = $(dateRangeSelector).dateRange({ + from: { + id: 'from' + }, + to: { + id: 'to' + } + }), + $from = $('#from'), + $to = $('#to'); + + expect($dateRange.is(':mage-dateRange')).toBe(true); + expect($from.hasClass('_has-datepicker')).toBe(true); + expect($to.hasClass('_has-datepicker')).toBe(true); + $dateRange.dateRange('destroy'); + expect($dateRange.is(':mage-dateRange')).toBe(false); + expect($from.hasClass('_has-datepicker')).toBe(false); + expect($to.hasClass('_has-datepicker')).toBe(false); + }); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js new file mode 100644 index 0000000000000..d6c95d2887ec7 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/collapsible.test.js @@ -0,0 +1,211 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ +/* jscs:disable jsDoc */ + +define([ + 'jquery', + 'jquery/ui', + 'mage/collapsible' +], function ($) { + 'use strict'; + + describe('Test for mage/collapsible jQuery plugin', function () { + it('check if collapsible can be initialized and destroyed', function () { + var group = $('
    '); + + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); + }); + + describe('Test enable, disable, activate and deactivate methods', function () { + var group = $('
    '), + content = $('
    ').appendTo(group); + + $('
    ').prependTo(group); + + beforeEach(function () { + group.appendTo('body'); + }); + + afterEach(function () { + group.remove(); + }); + + it('check enable and disable methods', function () { + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('disable'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('enable'); + expect(content.is(':visible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + + it('check activate and deactivate methods', function () { + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('activate'); + expect(content.is(':visible')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + }); + }); + + it('check if the widget gets expanded/collapsed when the title is clicked', function () { + var group = $('
    '), + title = $('
    ').appendTo(group), + content = $('
    ').appendTo(group); + + group.appendTo('body'); + + group.collapsible(); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + + title.trigger('click'); + expect(content.is(':visible')).toBeTruthy(); + + title.trigger('click'); + expect(content.is(':hidden')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); + }); + + it('check state classes', function () { + var group = $('
    '), + title = $('
    ').appendTo(group); + + $('
    ').appendTo(group); + + group.appendTo('body'); + + group.collapsible({ + openedState: 'opened', + closedState: 'closed', + disabledState: 'disabled' + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + expect(group.hasClass('closed')).toBeTruthy(); + + title.trigger('click'); + expect(group.hasClass('opened')).toBeTruthy(); + + group.collapsible('disable'); + expect(group.hasClass('disabled')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); + }); + + it('check if icons are added to title when initialized and removed when destroyed', function () { + var group = $('
    '), + title = $('
    ').appendTo(group); + + $('
    ').appendTo(group); + + group.appendTo('body'); + + group.collapsible({ + icons: { + header: 'minus', + activeHeader: 'plus' + } + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + expect(title.children('[data-role=icons]').length).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + expect(title.children('[data-role=icons]').length).toBeFalsy(); + group.remove(); + }); + + it('check if icon classes are changed when content gets expanded/collapsed', function () { + var group = $('
    '), + title = $('
    ').appendTo(group), + content = $('
    ').appendTo(group), + icons; + + group.appendTo('body'); + + group.collapsible({ + icons: { + header: 'minus', + activeHeader: 'plus' + } + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + icons = group.collapsible('option', 'icons'); + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + expect(title.children('[data-role=icons]').hasClass(icons.header)).toBeTruthy(); + + title.trigger('click'); + expect(title.children('[data-role=icons]').hasClass(icons.activeHeader)).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); + }); + + it('check if content gets updated via Ajax when title is clicked', function () { + var group = $('
    '), + title = $('
    ').appendTo(group), + content = $('
    ').appendTo(group); + + $('').appendTo(group); + + $.get = jasmine.createSpy().and.callFake(function () { + var d = $.Deferred(); + + d.promise().success = function () { + }; + + d.promise().complete = function () { + }; + + return d.promise(); + }); + + group.appendTo('body'); + + group.collapsible({ + ajaxContent: true + }); + expect(group.is(':mage-collapsible')).toBeTruthy(); + + group.collapsible('deactivate'); + expect(content.is(':hidden')).toBeTruthy(); + expect(content.children('p').length).toBeFalsy(); + + title.trigger('click'); + expect(content.children('p')).toBeTruthy(); + + group.collapsible('destroy'); + expect(group.is(':mage-collapsible')).toBeFalsy(); + group.remove(); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js new file mode 100644 index 0000000000000..898bcf8b51128 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/decorate.test.js @@ -0,0 +1,201 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'mage/decorate', + 'jquery' +], function (decorate, $) { + 'use strict'; + + describe('mage/decorate', function () { + describe('"list" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
    '); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('list'); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + }); + + describe('"generic" method', function () { + var listId = 'testList'; + + beforeEach(function () { + var list = $('
    '); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic'); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(true); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(true); + expect($list.find('li:even').hasClass('odd')).toBe(true); + }); + + it('Check correct class decoration with custom params', function () { + var $list = $('#' + listId); + + $list.find('li').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(true); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(true); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + + it('Check correct class decoration with empty items', function () { + var $list = $('#' + listId); + + $list.find('span').decorate('generic', ['last', 'first']); + expect($list.find('li:first').hasClass('first')).toBe(false); + expect($list.find('li:first').hasClass('odd')).toBe(false); + expect($list.find('li:last').hasClass('last')).toBe(false); + expect($list.find('li:odd').hasClass('even')).toBe(false); + expect($list.find('li:even').hasClass('odd')).toBe(false); + }); + }); + + describe('"table" method', function () { + var tableId = 'testTable'; + + beforeEach(function () { + var table = $('' + + '' + + '' + + '' + + '' + + '' + + '>' + + '' + + '
    '); + + $('body').append(table); + }); + + afterEach(function () { + $('#' + tableId).remove(); + }); + + it('Check correct class decoration with default params', function () { + var $table = $('#' + tableId); + + $table.decorate('table'); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(true); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(true); + expect($table.find('tbody tr:last').hasClass('last')).toBe(true); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(true); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(true); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(true); + expect($table.find('tr td:first').hasClass('first')).toBe(false); + }); + + it('Check correct class decoration with custom params', function () { + var $table = $('#' + tableId); + + $table.decorate('table', { + 'tbody': ['first'], + 'tbody tr': ['first'], + 'thead tr': ['first'], + 'tfoot tr': ['last'], + 'tr td': ['first'] + }); + expect($table.find('tbody:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('first')).toBe(true); + expect($table.find('tbody tr:first').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:odd').hasClass('even')).toBe(false); + expect($table.find('tbody tr:even').hasClass('odd')).toBe(false); + expect($table.find('tbody tr:last').hasClass('last')).toBe(false); + expect($table.find('thead tr:first').hasClass('first')).toBe(true); + expect($table.find('thead tr:last').hasClass('last')).toBe(false); + expect($table.find('tfoot tr:first').hasClass('first')).toBe(false); + expect($table.find('tfoot tr:last').hasClass('last')).toBe(true); + expect($table.find('tr td:last').hasClass('last')).toBe(false); + expect($table.find('tr td:first').hasClass('first')).toBe(true); + }); + }); + + describe('"dataList" method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
    '); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check correct class decoration', function () { + var $list = $('#' + listId); + + $list.decorate('dataList'); + expect($list.find('dt:first').hasClass('first')).toBe(false); + expect($list.find('dt:first').hasClass('odd')).toBe(true); + expect($list.find('dt:odd').hasClass('even')).toBe(true); + expect($list.find('dt:even').hasClass('odd')).toBe(true); + expect($list.find('dt:last').hasClass('last')).toBe(true); + expect($list.find('dd:first').hasClass('first')).toBe(false); + expect($list.find('dd:first').hasClass('odd')).toBe(true); + expect($list.find('dd:odd').hasClass('even')).toBe(true); + expect($list.find('dd:even').hasClass('odd')).toBe(true); + expect($list.find('dd:last').hasClass('last')).toBe(true); + }); + }); + + describe('Call decorate with fake method', function () { + var listId = 'testDataList'; + + beforeEach(function () { + var list = $('
    '); + + $('body').append(list); + }); + + afterEach(function () { + $('#' + listId).remove(); + }); + + it('Check error message', function () { + var $list = $('#' + listId); + + spyOn($, 'error'); + $list.decorate('customMethod'); + expect($.error).toHaveBeenCalledWith('Method customMethod does not exist on jQuery.decorate'); + }); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js new file mode 100644 index 0000000000000..1d149efe040e0 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/dropdown.test.js @@ -0,0 +1,357 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ + +define([ + 'jquery', + 'mage/dropdown' +], function ($) { + 'use strict'; + + describe('Test for mage/dropdown jQuery plugin', function () { + it('check if dialog opens when the triggerEvent is triggered', function () { + var opener = $('
    '), + dialog = $('
    '); + + dialog.dropdownDialog({ + 'triggerEvent': 'click', + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerEvent': null, + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the trigger', function () { + var opener = $('
    '), + dialog = $('
    '); + + dialog.dropdownDialog({ + 'triggerClass': 'active', + 'triggerTarget': opener + }); + + dialog.dropdownDialog('open'); + expect(opener.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerClass': null, + 'triggerTarget': opener + }); + + dialog.dropdownDialog('open'); + expect(opener.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the element which the dialog appends to', function () { + var parent = $('
    '), + dialog = $('
    '); + + dialog.dropdownDialog({ + 'parentClass': 'active', + 'appendTo': parent + }); + + dialog.dropdownDialog('open'); + expect(parent.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'parentClass': null, + 'appendTo': parent + }); + + dialog.dropdownDialog('open'); + expect(parent.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to the element that becomes dialog', function () { + var dialog = $('
    '), + content; + + dialog.dropdownDialog({ + 'dialogContentClass': 'active' + }); + + content = $('.ui-dialog-content'); + dialog.dropdownDialog('open'); + expect(content.hasClass('active')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'dialogContentClass': null + }); + + dialog.dropdownDialog('open'); + expect(content.hasClass('active')).toBeFalsy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + }); + + it('check if a specified class is added to dialog', function () { + var dialog = $('
    '), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'defaultDialogClass': 'custom' + }); + + ui = $(uiClass); + expect(ui.hasClass('custom')).toBeTruthy(); + expect(ui.hasClass('mage-dropdown-dialog')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({}); + ui = $(uiClass); + expect(ui.hasClass('mage-dropdown-dialog')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the specified trigger actually opens the dialog', function () { + var opener = $('
    '), + dialog = $('
    '); + + dialog.dropdownDialog({ + 'triggerTarget': opener + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('close'); + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'triggerTarget': null + }); + + opener.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the dialog gets closed when clicking outside of it', function () { + var container = $('
    '), + outside = $('
    ').attr('id', 'outside').appendTo(container), + dialog = $('
    ').attr('id', 'dialog').appendTo(container); + + container.appendTo('body'); + + dialog.dropdownDialog({ + 'closeOnClickOutside': true + }); + + dialog.dropdownDialog('open'); + outside.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'closeOnClickOutside': false + }); + + dialog.dropdownDialog('open'); + outside.trigger('click'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the dialog gets closed when mouse leaves the dialog area', function () { + var container = $('
    '), + dialog = $('
    ').attr('id', 'dialog').appendTo(container); + + $('
    ').attr('id', 'outside').appendTo(container); + $('
    ').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + jasmine.clock().install(); + + dialog.dropdownDialog({ + 'closeOnMouseLeave': true + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + dialog.trigger('mouseleave'); + + jasmine.clock().tick(10); + + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + + jasmine.clock().uninstall(); + }); + + it('check if the dialog does not close when mouse leaves the dialog area', function () { + var container = $('
    '), + dialog = $('
    ').attr('id', 'dialog').appendTo(container); + + $('
    ').attr('id', 'outside').appendTo(container); + $('
    ').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + jasmine.clock().install(); + + dialog.dropdownDialog({ + 'closeOnMouseLeave': false + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + dialog.trigger('mouseleave'); + jasmine.clock().tick(10); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + dialog.dropdownDialog('destroy'); + + jasmine.clock().uninstall(); + }); + + it('check if the dialog gets closed with the specified delay', function (done) { + var container = $('
    '), + dialog = $('
    ').attr('id', 'dialog').appendTo(container); + + $('
    ').attr('id', 'outside').appendTo(container); + $('
    ').attr('id', 'opener').appendTo(container); + + container.appendTo('body'); + + dialog.dropdownDialog({ + 'timeout': 5 + }); + + dialog.dropdownDialog('open'); + dialog.trigger('mouseenter'); + dialog.trigger('mouseleave'); + expect(dialog.dropdownDialog('isOpen')).toBeTruthy(); + + setTimeout(function () { + expect(dialog.dropdownDialog('isOpen')).toBeFalsy(); + dialog.dropdownDialog('destroy'); + done(); + }, 6); + }); + + /* + * jQuery ui version 1.9.2 belongs to the adminhtml. + * + * This test will fail on backend since backend's jquery.ui will + * add ui-dialog-titlebar class anyway on create. + */ + if ($.ui.version !== '1.9.2') { + it('check if the title bar is prevented from being created', function () { + var dialog = $('
    '), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'createTitleBar': true + }); + + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length > 0).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'createTitleBar': false + }); + + ui = $(uiClass); + expect(ui.find('.ui-dialog-titlebar').length <= 0).toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + } + + it('check if the position function gets disabled', function () { + var dialog = $('
    '), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'autoPosition': false + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('top') === 'auto').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'autoPosition': true + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('top') !== '0px').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + }); + + it('check if the size function gets disabled', function () { + var dialog = $('
    '), + uiClass = '.ui-dialog', + ui; + + dialog.dropdownDialog({ + 'autoSize': true, + 'width': '300' + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('width') === '300px').toBeTruthy(); + + dialog.dropdownDialog('destroy'); + + dialog.dropdownDialog({ + 'autoSize': false, + 'width': '300' + }); + + ui = $(uiClass); + dialog.dropdownDialog('open'); + expect(ui.css('width') === '300px').toBeFalsy(); + + dialog.dropdownDialog('destroy'); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/form.test.js b/dev/tests/js/jasmine/tests/lib/mage/form.test.js new file mode 100644 index 0000000000000..6202f93da999a --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/form.test.js @@ -0,0 +1,262 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ +/* jscs:disable jsDoc */ + +define([ + 'jquery', + 'mage/backend/form' +], function ($) { + 'use strict'; + + /* + * jQuery ui version 1.9.2 belongs to the adminhtml. + * + * This test will fail on frontend since mage/backend/form only belongs to backend. + */ + if ($.ui.version === '1.9.2') { + describe('Test for mage/form jQuery plugin', function () { + var id = 'edit_form', + elementId = '#' + id; + + beforeEach(function () { + var element = $('
    '); + + element.appendTo('body'); + }); + + afterEach(function () { + $(elementId).remove(); + }); + + it('check if form can be initialized', function () { + var form = $(elementId).form(); + + expect(form.is(':mage-form')).toBeTruthy(); + }); + + it('check get handlers', function () { + var form = $(elementId).form(), + handlersData = form.form('option', 'handlersData'), + handlers = []; + + $.each(handlersData, function (key) { + handlers.push(key); + }); + expect(handlers.join(' ')).toBe(form.data('form')._getHandlers().join(' ')); + }); + + it('check store attribute', function () { + var form = $(elementId).form(), + initialFormAttrs = { + action: form.attr('action'), + target: form.attr('target'), + method: form.attr('method') + }; + + form.data('form')._storeAttribute('action'); + form.data('form')._storeAttribute('target'); + form.data('form')._storeAttribute('method'); + + expect(form.data('form').oldAttributes.action).toBe(initialFormAttrs.action); + expect(form.data('form').oldAttributes.target).toBe(initialFormAttrs.target); + expect(form.data('form').oldAttributes.method).toBe(initialFormAttrs.method); + }); + + it('check bind', function () { + var form = $(elementId).form(), + submitted = false, + handlersData = form.form('option', 'handlersData'); + + form.on('submit', function (e) { + submitted = true; + e.stopImmediatePropagation(); + e.preventDefault(); + }); + + $.each(handlersData, function (key) { + form.trigger(key); + expect(submitted).toBeTruthy(); + submitted = false; + }); + + form.off('submit'); + }); + + it('check get action URL', function () { + var form = $(elementId).form(), + action = form.attr('action'), + testUrl = 'new/action/url', + testArgs = { + args: { + arg: 'value' + } + }; + + form.data('form')._storeAttribute('action'); + expect(form.data('form')._getActionUrl(testArgs)).toBe(action + '/arg/value/'); + expect(form.data('form')._getActionUrl(testUrl)).toBe(testUrl); + expect(form.data('form')._getActionUrl()).toBe(action); + }); + + it('check process data', function () { + var form = $(elementId).form(), + initialFormAttrs = { + action: form.attr('action'), + target: form.attr('target'), + method: form.attr('method') + }, + testSimpleData = { + action: 'new/action/url', + target: '_blank', + method: 'POST' + }, + testActionArgsData = { + action: { + args: { + arg: 'value' + } + } + }, + processedData = form.data('form')._processData(testSimpleData); + + expect(form.data('form').oldAttributes.action).toBe(initialFormAttrs.action); + expect(form.data('form').oldAttributes.target).toBe(initialFormAttrs.target); + expect(form.data('form').oldAttributes.method).toBe(initialFormAttrs.method); + expect(processedData.action).toBe(testSimpleData.action); + expect(processedData.target).toBe(testSimpleData.target); + expect(processedData.method).toBe(testSimpleData.method); + + form.data('form')._rollback(); + processedData = form.data('form')._processData(testActionArgsData); + form.data('form')._storeAttribute('action'); + expect(processedData.action).toBe(form.data('form')._getActionUrl(testActionArgsData.action)); + }); + + it('check before submit', function () { + var testForm = $('
    ').appendTo('body'), + testHandler = { + action: { + args: { + arg1: 'value1' + } + } + }, + form = $(elementId).form({ + handlersData: { + testHandler: testHandler + } + }), + beforeSubmitData = { + action: { + args: { + arg2: 'value2' + } + }, + target: '_blank' + }, + eventData = { + method: 'POST' + }, + resultData = $.extend(true, {}, testHandler, beforeSubmitData, eventData); + + form.data('form')._storeAttribute('action'); + resultData = form.data('form')._processData(resultData); + testForm.prop(resultData); + + form.on('beforeSubmit', function (e, data) { + $.extend(data, beforeSubmitData); + }); + + form.on('submit', function (e) { + e.stopImmediatePropagation(); + e.preventDefault(); + }); + + form.data('form')._beforeSubmit('testHandler', eventData); + expect(testForm.prop('action')).toBe(form.prop('action')); + expect(testForm.prop('target')).toBe(form.prop('target')); + expect(testForm.prop('method')).toBe(form.prop('method')); + }); + + it('check submit', function () { + var formSubmitted = false, + form = $(elementId).form({ + handlersData: { + save: {} + } + }); + + form.data('form')._storeAttribute('action'); + form.data('form')._storeAttribute('target'); + form.data('form')._storeAttribute('method'); + + form.on('submit', function (e) { + e.preventDefault(); + e.stopImmediatePropagation(); + e.preventDefault(); + formSubmitted = true; + }).prop({ + action: 'new/action/url', + target: '_blank', + method: 'POST' + }); + + form.data('form')._submit({ + type: 'save' + }); + + expect(form.attr('action')).toBe(form.data('form').oldAttributes.action); + expect(form.attr('target')).toBe(form.data('form').oldAttributes.target); + expect(form.attr('method')).toBe(form.data('form').oldAttributes.method); + expect(formSubmitted).toBeTruthy(); + + form.off('submit'); + }); + + it('check build URL', function () { + var dataProvider = [ + { + params: ['http://domain.com//', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' + }, + { + params: ['http://domain.com', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com/key[one]/value%201/key2/%23%20value/' + }, + { + params: ['http://domain.com?some=param', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' + }, + { + params: ['http://domain.com?some=param&', { + 'key[one]': 'value 1', + 'key2': '# value' + }], + expected: 'http://domain.com?some=param&key[one]=value%201&key2=%23%20value' + } + ], + method = $.mage.form._proto._buildURL, + quantity = dataProvider.length, + i = 0; + + expect(quantity).toBeTruthy(); + + for (i; i < quantity; i++) { + expect(dataProvider[i].expected).toBe(method.apply(null, dataProvider[i].params)); + } + }); + }); + } +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/loader.test.js b/dev/tests/js/jasmine/tests/lib/mage/loader.test.js new file mode 100644 index 0000000000000..93dd2ee91902c --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/loader.test.js @@ -0,0 +1,79 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/loader' +], function ($) { + 'use strict'; + + describe('mage/loader', function () { + describe('Check loader', function () { + var loaderSelector = '#loader'; + + beforeEach(function () { + var $loader = $('
    '); + + $('body').append($loader); + }); + + afterEach(function () { + $(loaderSelector).remove(); + $(loaderSelector).loader('destroy'); + }); + + it('Check that loader inited', function () { + var $loader = $(loaderSelector).loader({ + icon: 'icon.gif' + }); + + $loader.loader('show'); + + expect($loader.is(':mage-loader')).toBe(true); + expect($loader.find('p').text()).toBe('Please wait...'); + expect($loader.find('img').prop('src').split('/').pop()).toBe('icon.gif'); + expect($loader.find('img').prop('alt')).toBe('Loading...'); + }); + + it('Body init', function () { + var $loader = $('body').loader(); + + $loader.loader('show'); + + expect($loader.is(':mage-loader')).toBe(true); + $loader.loader('destroy'); + }); + + it('Check show/hide', function () { + var $loader = $(loaderSelector).loader(), + $loadingMask; + + $loader.loader('show'); + $loadingMask = $('.loading-mask'); + expect($loadingMask.is(':visible')).toBe(true); + + $loader.loader('hide'); + expect($loadingMask.is(':hidden')).toBe(true); + + $loader.loader('show'); + $loader.trigger('processStop'); + expect($loadingMask.is(':hidden')).toBe(true); + }); + + it('Check destroy', function () { + var $loader = $(loaderSelector).loader(), + $loadingMask; + + $loader.loader('show'); + $loadingMask = $('.loading-mask'); + expect($loadingMask.is(':visible')).toBe(true); + + $loader.loader('destroy'); + expect($loadingMask.is(':visible')).toBe(false); + }); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/menu.test.js b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js new file mode 100644 index 0000000000000..69d8af4ff3dba --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/menu.test.js @@ -0,0 +1,110 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/menu', + 'text!tests/assets/lib/web/mage/menu.html' +], function ($, menu, menuTmpl) { + 'use strict'; + + describe('mage/menu', function () { + describe('Menu expanded', function () { + var menuSelector = '#menu'; + + beforeEach(function () { + var $menu = $(menuTmpl); + + $('body').append($menu); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check that menu expanded', function () { + var $menu = $(menuSelector), + $menuItems = $menu.find('li'), + $submenu = $menuItems.find('ul'); + + menu.menu({ + expanded: true + }, $menu); + expect($submenu.hasClass('expanded')).toBe(true); + }); + }); + + describe('Menu hover event', function () { + var menuSelector = '#menu', + $menu; + + beforeEach(function () { + var $menuObject = $(menuTmpl); + + $('body').append($menuObject); + $menu = $(menuSelector).menu({ + delay: 0, + showDelay: 0, + hideDelay: 0 + }); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check that menu expanded', function (done) { + var $menuItem = $menu.find('li.test-menu-item'), + $submenu = $menuItem.find('ul'); + + $menuItem.trigger('mouseover'); + setTimeout(function () { + expect($submenu.attr('aria-expanded')).toBe('true'); + $menuItem.trigger('mouseout'); + setTimeout(function () { + expect($submenu.attr('aria-expanded')).toBe('false'); + done(); + }, 300); + }, 300); + }); + }); + + describe('Menu navigation', function () { + var menuSelector = '#menu', + $menu; + + beforeEach(function () { + var $menuObject = $(menuTmpl); + + $('body').append($menuObject); + $menu = $(menuSelector).menu(); + }); + + afterEach(function () { + $(menuSelector).remove(); + }); + + it('Check max item limit', function () { + var $menuItems; + + $menu.navigation({ + maxItems: 3 + }); + $menuItems = $menu.find('li:visible'); + + expect($menuItems.length).toBe(4); + }); + + it('Check that More Menu item will be added', function () { + $menu.navigation({ + responsive: 'onResize' + }); + + expect($('body').find('.ui-menu-more').length).toBeGreaterThan(0); + }); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js new file mode 100644 index 0000000000000..a6138df073434 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/tabs.test.js @@ -0,0 +1,93 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'jquery/ui', + 'mage/tabs', + 'text!tests/assets/lib/web/mage/tabs.html' +], function ($, ui, tabs, tabsTmpl) { + 'use strict'; + + describe('mage/tabs', function () { + var tabsSelector = '#tabs'; + + beforeEach(function () { + var $tabs = $(tabsTmpl); + + $('body').append($tabs); + }); + + afterEach(function () { + $(tabsSelector).remove(); + $(tabsSelector).tabs('destroy'); + }); + + it('Check tabs inited', function () { + var $tabs = $(tabsSelector).tabs(); + + expect($tabs.is(':mage-tabs')).toBe(true); + }); + + it('Check tabs collapsible inited', function () { + var $title1 = $('#title1'), + $title2 = $('#title2'); + + $(tabsSelector).tabs(); + + expect($title1.is(':mage-collapsible')).toBe(true); + expect($title2.is(':mage-collapsible')).toBe(true); + }); + + it('Check tabs active', function () { + var $content1 = $('#content1'), + $content2 = $('#content2'); + + $(tabsSelector).tabs({ + active: 1 + }); + + expect($content1.is(':hidden')).toBe(true); + expect($content2.is(':visible')).toBe(true); + }); + + it('Check tabs closing others tabs when one gets activated', function () { + var $title2 = $('#title2'), + $content1 = $('#content1'), + $content2 = $('#content2'); + + $(tabsSelector).tabs(); + + expect($content1.is(':visible')).toBe(true); + expect($content2.is(':hidden')).toBe(true); + + $title2.trigger('click'); + + expect($content1.is(':hidden')).toBe(true); + expect($content2.is(':visible')).toBe(true); + }); + + it('Check tabs enable,disable,activate,deactivate options', function () { + var $title1 = $('#title1'), + $content1 = $('#content1'), + $tabs = $(tabsSelector).tabs(); + + expect($content1.is(':visible')).toBe(true); + $tabs.tabs('deactivate', 0); + expect($content1.is(':hidden')).toBe(true); + $tabs.tabs('activate', 0); + expect($content1.is(':visible')).toBe(true); + $tabs.tabs('disable', 0); + expect($content1.is(':hidden')).toBe(true); + $title1.trigger('click'); + expect($content1.is(':hidden')).toBe(true); + $tabs.tabs('enable', 0); + expect($content1.is(':visible')).toBe(true); + $title1.trigger('click'); + expect($content1.is(':visible')).toBe(true); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js new file mode 100644 index 0000000000000..bcdfc4cc59705 --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/translate-inline.test.js @@ -0,0 +1,111 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/translate-inline', + 'text!tests/assets/lib/web/mage/translate-inline.html' +], function ($, TranslateInline, translateTmpl) { + 'use strict'; + + describe('mage/translate-inline', function () { + describe('Check translate', function () { + var translateSelector = '[data-role="translate-dialog"]', + translateTemplateSelector = '#translate-form-template'; + + beforeEach(function () { + var translateBlock = $(translateTmpl); + + $('body').append(translateBlock); + }); + + afterEach(function () { + $(translateSelector).remove(); + $(translateSelector).translateInline('destroy'); + $(translateTemplateSelector).remove(); + }); + + it('Check that translate inited', function () { + var translateInline = $(translateSelector).translateInline(); + + expect(translateInline.is(':mage-translateInline')).toBe(true); + }); + + it('Check that translate hidden on init and visible on trigger', function () { + var translateInline = $(translateSelector).translateInline({ + id: 'dialog-id' + }), + isDialogHiddenOnInit = translateInline.is(':hidden'), + dialogVisibleAfterTriggerEdit; + + translateInline.trigger('edit.editTrigger'); + dialogVisibleAfterTriggerEdit = translateInline.is(':visible'); + expect(isDialogHiddenOnInit).toBe(true); + expect(dialogVisibleAfterTriggerEdit).toBe(true); + }); + + it('Check translation form template', function () { + var translateFormId = 'translate-form-id', + translateFormContent = 'New Template Variable', + translateInline = $(translateSelector).translateInline({ + translateForm: { + data: { + id: translateFormId, + newTemplateVariable: translateFormContent + } + } + }), + $translateForm; + + translateInline.trigger('edit.editTrigger'); + $translateForm = $('#' + translateFormId); + + expect($translateForm.length).toBeGreaterThan(0); + expect($translateForm.text()).toBe(translateFormContent); + }); + + it('Check translation submit', function () { + var options = { + ajaxUrl: 'www.test.com', + area: 'test', + translateForm: { + template: '
    ', + data: { + id: 'translate-form-id' + } + } + }, + expectedEequestData = 'area=test&test=test', + translateInline = $(translateSelector).translateInline(options), + $submitButton = $('body').find('.action-primary'), + originalAjax = $.ajax; + + $.ajax = jasmine.createSpy().and.callFake(function (request) { + expect(request.url).toBe(options.ajaxUrl); + expect(request.type).toBe('POST'); + expect(request.data).toBe(expectedEequestData); + + return { + complete: jasmine.createSpy() + }; + }); + + translateInline.trigger('edit.editTrigger'); + $submitButton.trigger('click'); + $.ajax = originalAjax; + }); + + it('Check translation destroy', function () { + var translateInline = $(translateSelector).translateInline(); + + translateInline.trigger('edit.editTrigger'); + expect(translateInline.is(':mage-translateInline')).toBe(true); + translateInline.translateInline('destroy'); + expect(translateInline.is(':mage-translateInline')).toBe(false); + }); + }); + }); +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/translate.test.js b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js new file mode 100644 index 0000000000000..c87cfa227c1aa --- /dev/null +++ b/dev/tests/js/jasmine/tests/lib/mage/translate.test.js @@ -0,0 +1,49 @@ +/** + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ +/* eslint-disable max-nested-callbacks */ +define([ + 'jquery', + 'mage/translate' +], function ($) { + 'use strict'; + + describe('Test for mage/translate jQuery plugin', function () { + it('works with one string as parameter', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one array as parameter', function () { + $.mage.translate.add(['Hello World!', 'Bonjour tout le monde!']); + expect('Hello World!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with one object as parameter', function () { + var translation = { + 'Hello World!': 'Bonjour tout le monde!' + }; + + $.mage.translate.add(translation); + expect(translation['Hello World!']).toEqual($.mage.translate.translate('Hello World!')); + + translation = { + 'Hello World!': 'Hallo Welt!', + 'Some text with symbols!-+"%#*': 'Ein Text mit Symbolen!-+"%#*' + }; + + $.mage.translate.add(translation); + $.each(translation, function (key) { + expect(translation[key]).toEqual($.mage.translate.translate(key)); + }); + }); + it('works with two string as parameter', function () { + $.mage.translate.add('Hello World!', 'Bonjour tout le monde!'); + expect('Bonjour tout le monde!').toEqual($.mage.translate.translate('Hello World!')); + }); + it('works with translation alias __', function () { + $.mage.translate.add('Hello World!'); + expect('Hello World!').toEqual($.mage.__('Hello World!')); + }); + }); + +}); diff --git a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js index 12138e5939a7b..ccf3591be0dfe 100644 --- a/dev/tests/js/jasmine/tests/lib/mage/validation.test.js +++ b/dev/tests/js/jasmine/tests/lib/mage/validation.test.js @@ -255,4 +255,891 @@ define([ }); }); + describe('Testing validate-no-html-tags', function () { + it('validate-no-html-tags', function () { + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-no-html-tags'] + .call($.validator.prototype, '
    abc
    ')).toEqual(false); + }); + }); + + describe('Testing allow-container-className', function () { + it('allow-container-className', function () { + var radio = $(''), + checkbox = $(''), + radio2 = $(''), + checkbox2 = $(''); + + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, radio[0])).toEqual(true); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, checkbox[0])).toEqual(true); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, radio2[0])).toEqual(false); + expect($.validator.methods['allow-container-className'] + .call($.validator.prototype, checkbox2[0])).toEqual(false); + }); + }); + + describe('Testing validate-select', function () { + it('validate-select', function () { + expect($.validator.methods['validate-select'] + .call($.validator.prototype, '')).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, 'none')).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-select'] + .call($.validator.prototype, 'abc')).toEqual(true); + }); + }); + + describe('Testing validate-no-empty', function () { + it('validate-no-empty', function () { + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, '')).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-no-empty'] + .call($.validator.prototype, 'test')).toEqual(true); + }); + }); + + describe('Testing validate-alphanum-with-spaces', function () { + it('validate-alphanum-with-spaces', function () { + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, 'abc ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' 123 ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' abc123 ')).toEqual(true); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' !@# ')).toEqual(false); + expect($.validator.methods['validate-alphanum-with-spaces'] + .call($.validator.prototype, ' abc.123 ')).toEqual(false); + }); + }); + + describe('Testing validate-phoneStrict', function () { + it('validate-phoneStrict', function () { + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '5121231234')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '512.123.1234')).toEqual(false); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneStrict'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + }); + }); + + describe('Testing validate-phoneLax', function () { + it('validate-phoneLax', function () { + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '5121231234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '512.123.1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)1231234')).toEqual(true); + expect($.validator.methods['validate-phoneLax'] + .call($.validator.prototype, '(512)_123_1234')).toEqual(false); + }); + }); + + describe('Testing validate-fax', function () { + it('validate-fax', function () { + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '5121231234')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '512.123.1234')).toEqual(false); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '512-123-1234')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '(512)123-1234')).toEqual(true); + expect($.validator.methods['validate-fax'] + .call($.validator.prototype, '(512) 123-1234')).toEqual(true); + }); + }); + + describe('Testing validate-email', function () { + it('validate-email', function () { + expect($.validator.methods['validate-email'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc@124.en')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc.abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc-abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc_abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-email'] + .call($.validator.prototype, 'abc.abc_abc@abc')).toEqual(false); + }); + }); + + describe('Testing validate-emailSender', function () { + it('validate-emailSender', function () { + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc@124.en')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc.abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc-abc@abc.commmmm')).toEqual(true); + expect($.validator.methods['validate-emailSender'] + .call($.validator.prototype, 'abc.abc_abc@abc.commmmm')).toEqual(true); + }); + }); + + describe('Testing validate-password', function () { + it('validate-password', function () { + expect($.validator.methods['validate-password'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'abc ')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, ' abc ')).toEqual(false); + expect($.validator.methods['validate-password'] + .call($.validator.prototype, 'dddd')).toEqual(false); + }); + }); + + describe('Testing validate-admin-password', function () { + it('validate-admin-password', function () { + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, ' ')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, '123@123.com')).toEqual(true); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'abc ')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, ' abc ')).toEqual(false); + expect($.validator.methods['validate-admin-password'] + .call($.validator.prototype, 'dddd')).toEqual(false); + }); + }); + + describe('Testing validate-url', function () { + it('validate-url', function () { + expect($.validator.methods['validate-url'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://www.google.com')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080/index.php')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://app-spot.com/index.php')).toEqual(true); + expect($.validator.methods['validate-url'] + .call($.validator.prototype, 'http://app-spot_space.com/index.php')).toEqual(true); + }); + }); + + describe('Testing validate-clean-url', function () { + it('validate-clean-url', function () { + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://www.google.com')).toEqual(true); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080/index.php')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1:8080')).toEqual(false); + expect($.validator.methods['validate-clean-url'] + .call($.validator.prototype, 'http://127.0.0.1')).toEqual(false); + }); + }); + + describe('Testing validate-xml-identifier', function () { + it('validate-xml-identifier', function () { + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc_123')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, 'abc-123')).toEqual(true); + expect($.validator.methods['validate-xml-identifier'] + .call($.validator.prototype, '123-abc')).toEqual(false); + }); + }); + + describe('Testing validate-ssn', function () { + it('validate-ssn', function () { + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, 'abc')).toEqual(false); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '123-13-1234')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '012-12-1234')).toEqual(true); + expect($.validator.methods['validate-ssn'] + .call($.validator.prototype, '23-12-1234')).toEqual(false); + }); + }); + + describe('Testing validate-zip-us', function () { + it('validate-zip-us', function () { + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '12345-1234')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '02345')).toEqual(true); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '1234')).toEqual(false); + expect($.validator.methods['validate-zip-us'] + .call($.validator.prototype, '1234-1234')).toEqual(false); + }); + }); + + describe('Testing validate-date-au', function () { + it('validate-date-au', function () { + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '01/01/2012')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '30/01/2012')).toEqual(true); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '01/30/2012')).toEqual(false); + expect($.validator.methods['validate-date-au'] + .call($.validator.prototype, '1/1/2012')).toEqual(false); + }); + }); + + describe('Testing validate-currency-dollar', function () { + it('validate-currency-dollar', function () { + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$123')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1,123.00')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1234')).toEqual(true); + expect($.validator.methods['validate-currency-dollar'] + .call($.validator.prototype, '$1234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-not-negative-number', function () { + it('validate-not-negative-number', function () { + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '0')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '1,234.1234')).toEqual(true); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-not-negative-number'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-greater-than-zero', function () { + it('validate-greater-than-zero', function () { + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '0')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '1,234.1234')).toEqual(true); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-greater-than-zero'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-css-length', function () { + it('validate-css-length', function () { + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, null)).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, undefined)).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '0')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1234')).toEqual(true); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '1,234.1234')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1e')).toEqual(false); + expect($.validator.methods['validate-css-length'] + .call($.validator.prototype, '-1,234.1234')).toEqual(false); + }); + }); + + describe('Testing validate-data', function () { + it('validate-data', function () { + expect($.validator.methods['validate-data'] + .call($.validator.prototype, '')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, null)).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, undefined)).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, ' ')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, '123abc')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, ' abc')).toEqual(false); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc123')).toEqual(true); + expect($.validator.methods['validate-data'] + .call($.validator.prototype, 'abc-123')).toEqual(false); + }); + }); + + describe('Testing validate-one-required-by-name', function () { + it('validate-one-required-by-name', function () { + var radio = $(''), + radio2 = $(''), + checkbox = $(''), + checkbox2 = $(''), + $test = $('
    '), + prevForm = $.validator.prototype.currentForm; + + $.validator.prototype.currentForm = $test[0]; + + $test.append(radio); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, radio[0], true)).toEqual(false); + $test.append(radio2); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, radio2[0], true)).toEqual(true); + $test.append(checkbox); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, checkbox[0], true)).toEqual(false); + $test.append(checkbox2); + expect($.validator.methods['validate-one-required-by-name'] + .call($.validator.prototype, null, checkbox2[0], true)).toEqual(true); + + $.validator.prototype.currentForm = prevForm; + }); + }); + + describe('Testing less-than-equals-to', function () { + it('less-than-equals-to', function () { + var elm1 = $(''), + elm2 = $(''), + elm3 = $(''), + elm4 = $(''), + elm5 = $(''), + elm6 = $(''), + elm7 = $(''), + elm8 = $(''); + + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(false); + elm1[0].value = 4; + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm3[0].value, elm3, elm4)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm5[0].value, elm5, elm6)).toEqual(true); + expect($.validator.methods['less-than-equals-to'] + .call($.validator.prototype, elm7[0].value, elm7, elm8)).toEqual(true); + }); + }); + + describe('Testing greater-than-equals-to', function () { + it('greater-than-equals-to', function () { + var elm1 = $(''), + elm2 = $(''), + elm3 = $(''), + elm4 = $(''), + elm5 = $(''), + elm6 = $(''), + elm7 = $(''), + elm8 = $(''); + + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(false); + elm1[0].value = 9; + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm1[0].value, elm1, elm2)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm3[0].value, elm3, elm4)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm5[0].value, elm5, elm6)).toEqual(true); + expect($.validator.methods['greater-than-equals-to'] + .call($.validator.prototype, elm7[0].value, elm7, elm8)).toEqual(true); + }); + }); + + describe('Testing validate-cc-type-select', function () { + it('validate-cc-type-select', function () { + var visaValid = $(''), + visaInvalid = $(''), + mcValid = $(''), + mcInvalid = $(''), + aeValid = $(''), + aeInvalid = $(''), + diValid = $(''), + diInvalid = $(''), + dnValid = $(''), + dnInvalid = $(''), + jcbValid = $(''), + jcbInvalid = $(''); + + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'VI', null, visaValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'VI', null, visaInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'MC', null, mcValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'MC', null, mcInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'AE', null, aeValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'AE', null, aeInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DI', null, diValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DI', null, diInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DN', null, dnValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'DN', null, dnInvalid)).toEqual(false); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'JCB', null, jcbValid)).toEqual(true); + expect($.validator.methods['validate-cc-type-select'] + .call($.validator.prototype, 'JCB', null, jcbInvalid)).toEqual(false); + }); + }); + + describe('Testing validate-cc-number', function () { + it('validate-cc-number', function () { + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '4916835098995909', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '5265071363284878', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011120623356953', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '371293266574617', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '4916835098995901', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '5265071363284870', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011120623356951', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '371293266574619', null, null)).toEqual(false); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '2221220000000003', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '2721220000000008', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601109020000000003', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011111144444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011222233334444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011522233334447', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601174455555553', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6011745555555550', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601177455555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601182455555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601187999555558', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '601287999555556', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6444444444444443', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6644444444444441', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3044444444444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3064444444444449', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3095444444444442', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3096444444444441', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3696444444444445', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3796444444444444', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3896444444444443', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3528444444444449', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '3529444444444448', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6221262244444440', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6229981111111111', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6249981111111117', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6279981111111110', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6282981111111115', null, null)).toEqual(true); + expect($.validator.methods['validate-cc-number'] + .call($.validator.prototype, '6289981111111118', null, null)).toEqual(true); + }); + }); + + describe('Testing validate-cc-type', function () { + it('validate-cc-type', function () { + var select = $(''); + + select.val('VI'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '4916835098995909', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(false); + + select.val('MC'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '4916835098995909', null, select)).toEqual(false); + + select.val('AE'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '371293266574617', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '5265071363284878', null, select)).toEqual(false); + + select.val('DI'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '6011050000000009', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '371293266574617', null, select)).toEqual(false); + + select.val('DN'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3095434000000001', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '6011050000000009', null, select)).toEqual(false); + + select.val('JCB'); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3528000000000007', null, select)).toEqual(true); + expect($.validator.methods['validate-cc-type'] + .call($.validator.prototype, '3095434000000001', null, select)).toEqual(false); + }); + }); + + describe('Testing validate-cc-exp', function () { + it('validate-cc-exp', function () { + var year = $(''), + currentTime = new Date(), + currentMonth = currentTime.getMonth() + 1, + currentYear = currentTime.getFullYear(); + + year.val(currentYear); + + if (currentMonth > 1) { + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth - 1, null, year)).toEqual(false); + } + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth, null, year)).toEqual(true); + year.val(currentYear + 1); + expect($.validator.methods['validate-cc-exp'] + .call($.validator.prototype, currentMonth, null, year)).toEqual(true); + }); + }); + + describe('Testing validate-cc-cvn', function () { + it('validate-cc-cvn', function () { + var ccType = $(''); + + ccType.val('VI'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + + ccType.val('MC'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + + ccType.val('AE'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(false); + + ccType.val('DI'); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '123', null, ccType)).toEqual(true); + expect($.validator.methods['validate-cc-cvn'] + .call($.validator.prototype, '1234', null, ccType)).toEqual(false); + }); + }); + + describe('Testing validate-number-range', function () { + it('validate-number-range', function () { + var el1 = $('').get(0); + + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '-1', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, null, null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '0', null, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, 'asds', null, null)).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '10', null, '10-20.06')).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '15', null, '10-20.06')).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '30', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '10', el1, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '15', el1, null)).toEqual(true); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '1', el1, null)).toEqual(false); + expect($.validator.methods['validate-number-range'] + .call($.validator.prototype, '30', el1, null)).toEqual(true); + }); + }); + + describe('Testing validate-digits-range', function () { + it('validate-digits-range', function () { + var el1 = $('').get(0); + + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '-1', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, null, null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '0', null, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, 'asds', null, null)).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '10', null, '10-20')).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '15', null, '10-20')).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', null, '10-20')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', null, '10-20')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', null, '10-20.06')).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '10', el1, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '15', el1, null)).toEqual(true); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '1', el1, null)).toEqual(false); + expect($.validator.methods['validate-digits-range'] + .call($.validator.prototype, '30', el1, null)).toEqual(false); + }); + }); }); diff --git a/lib/internal/Magento/Framework/Data/AbstractSearchResult.php b/lib/internal/Magento/Framework/Data/AbstractSearchResult.php index f9272683005ce..bcedf16e3f5be 100644 --- a/lib/internal/Magento/Framework/Data/AbstractSearchResult.php +++ b/lib/internal/Magento/Framework/Data/AbstractSearchResult.php @@ -235,6 +235,7 @@ protected function load() if (is_array($data)) { foreach ($data as $row) { $item = $this->createDataObject(['data' => $row]); + $item->setOrigData(); $this->addItem($item); } } diff --git a/lib/web/jquery/jstree/jquery.jstree.js b/lib/web/jquery/jstree/jquery.jstree.js index e2f6330ba45eb..4671256b4207b 100644 --- a/lib/web/jquery/jstree/jquery.jstree.js +++ b/lib/web/jquery/jstree/jquery.jstree.js @@ -28,7 +28,7 @@ "use strict"; // top wrapper to prevent multiple inclusion (is this OK?) -(function () { if(jQuery && jQuery.jstree) { return; } +(function () { var is_ie6 = false, is_ie7 = false, is_ff2 = false; /* diff --git a/lib/web/mage/collapsible.js b/lib/web/mage/collapsible.js index 0d8cf836c198e..267734605f141 100644 --- a/lib/web/mage/collapsible.js +++ b/lib/web/mage/collapsible.js @@ -243,7 +243,7 @@ define([ }); // For collapsible widget only (not tabs or accordion) - if (this.header.parent().attr('role') != 'presentation') { //eslint-disable-line eqeqeq + if (this.header.parent().attr('role') !== 'presentation') { this.header .parent() .attr('role', 'tablist'); @@ -316,9 +316,9 @@ define([ * Disable. */ disable: function () { + this.options.disabled = true; this._off(this.trigger); this.forceDeactivate(); - this.options.disabled = true; if (this.options.disabledState) { this.element.addClass(this.options.disabledState); @@ -330,12 +330,14 @@ define([ * Enable. */ enable: function () { - this._on(this.trigger, this.events); this.options.disabled = false; + this._on(this.trigger, this.events); + this.forceActivate(); if (this.options.disabledState) { this.element.removeClass(this.options.disabledState); } + this.trigger.attr('tabIndex', 0); }, /** @@ -517,7 +519,7 @@ define([ that = this; if (url) { - this.xhr = $.get({ + that.xhr = $.get({ url: url, dataType: 'html' }, function () { @@ -533,7 +535,8 @@ define([ setTimeout(function () { that.content.html(response); }, 1); - }).complete(function (jqXHR, status) { + }); + that.xhr.complete(function (jqXHR, status) { setTimeout(function () { if (status === 'abort') { that.content.stop(false, true); diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js index 2b5aaff838502..ac99b04ad1b7a 100644 --- a/lib/web/mage/validation.js +++ b/lib/web/mage/validation.js @@ -845,11 +845,13 @@ result = true; range = param; - if (typeof range === 'object') { + if (typeof range === 'string') { m = dataAttrRange.exec(range); if (m) { result = result && $.mage.isBetween(numValue, m[1], m[2]); + } else { + result = false; } } else if (elm && elm.className) { classes = elm.className.split(' '); @@ -896,11 +898,13 @@ result = true; range = param; - if (typeof range === 'object') { + if (typeof range === 'string') { m = dataAttrRange.exec(range); if (m) { result = result && $.mage.isBetween(numValue, m[1], m[2]); + } else { + result = false; } } else if (elm && elm.className) { classes = elm.className.split(' ');