Skip to content
Snippets Groups Projects
Commit 010156ff authored by Roman Ganin's avatar Roman Ganin Committed by GitHub
Browse files

Merge pull request #623 from magento-troll/troll_pr

MAGETWO-60201: Test UnsecureFunctionsUsageTest fails in case of changes in files with unsecure code
MAGETWO-60818: [FT] Incorrect array index 'frontend_type' in the CreateBundleProductEntityTest
parents b4c3bfdf 7b926793
No related merge requests found
...@@ -95,6 +95,7 @@ class View extends \Magento\Catalog\Test\Block\Product\View ...@@ -95,6 +95,7 @@ class View extends \Magento\Catalog\Test\Block\Product\View
); );
$this->_rootElement->find($this->customizeButton)->click(); $this->_rootElement->find($this->customizeButton)->click();
$this->waitForElementVisible($this->addToCart); $this->waitForElementVisible($this->addToCart);
$this->waitForElementVisible($this->visibleOptions, Locator::SELECTOR_XPATH);
} }
/** /**
......
...@@ -8,8 +8,7 @@ ...@@ -8,8 +8,7 @@
<mapping strict="1"> <mapping strict="1">
<fields> <fields>
<qty> <qty>
<selector>//input[contains(@class,"qty")]</selector> <selector>input.qty</selector>
<strategy>xpath</strategy>
<class>Magento\Bundle\Test\Block\Catalog\Product\View\Type\Option\Element\Qty</class> <class>Magento\Bundle\Test\Block\Catalog\Product\View\Type\Option\Element\Qty</class>
</qty> </qty>
</fields> </fields>
......
...@@ -52,6 +52,7 @@ class AssertBundleProductForm extends AssertProductForm ...@@ -52,6 +52,7 @@ class AssertBundleProductForm extends AssertProductForm
protected function prepareBundleOptions(array $bundleSelections) protected function prepareBundleOptions(array $bundleSelections)
{ {
foreach ($bundleSelections as &$item) { foreach ($bundleSelections as &$item) {
unset($item['frontend_type']);
foreach ($item['assigned_products'] as &$selection) { foreach ($item['assigned_products'] as &$selection) {
$selection['data']['getProductName'] = $selection['search_data']['name']; $selection['data']['getProductName'] = $selection['search_data']['name'];
$selection = $selection['data']; $selection = $selection['data'];
......
...@@ -353,6 +353,7 @@ ...@@ -353,6 +353,7 @@
<item name="3" xsi:type="array"> <item name="3" xsi:type="array">
<item name="title" xsi:type="string">Multiple Select Option</item> <item name="title" xsi:type="string">Multiple Select Option</item>
<item name="type" xsi:type="string">Multiple</item> <item name="type" xsi:type="string">Multiple</item>
<item name="frontend_type" xsi:type="string">Multiple</item>
<item name="value" xsi:type="array"> <item name="value" xsi:type="array">
<item name="name" xsi:type="string">product_100_dollar</item> <item name="name" xsi:type="string">product_100_dollar</item>
</item> </item>
...@@ -367,6 +368,7 @@ ...@@ -367,6 +368,7 @@
<item name="0" xsi:type="array"> <item name="0" xsi:type="array">
<item name="title" xsi:type="string">Drop-down Option</item> <item name="title" xsi:type="string">Drop-down Option</item>
<item name="type" xsi:type="string">Drop-down</item> <item name="type" xsi:type="string">Drop-down</item>
<item name="frontend_type" xsi:type="string">Drop-down</item>
<item name="value" xsi:type="array"> <item name="value" xsi:type="array">
<item name="name" xsi:type="string">Test simple product</item> <item name="name" xsi:type="string">Test simple product</item>
</item> </item>
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
* Copyright © 2016 Magento. All rights reserved. * Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details. * See COPYING.txt for license details.
*/ */
namespace Magento\TestFramework\Utility; namespace Magento\TestFramework\Utility;
use Magento\Framework\App\Utility\Files; use Magento\Framework\App\Utility\Files;
...@@ -15,6 +16,11 @@ use Magento\TestFramework\Utility\File\RegexIteratorFactory; ...@@ -15,6 +16,11 @@ use Magento\TestFramework\Utility\File\RegexIteratorFactory;
*/ */
class ChangedFiles class ChangedFiles
{ {
/**
* File path with changed files content.
*/
const CHANGED_FILES_CONTENT_FILE = '/dev/tests/static/testsuite/Magento/Test/_files/changed_%s_files_content.json';
/** /**
* Returns array of PHP-files, that use or declare Magento application classes and Magento libs * Returns array of PHP-files, that use or declare Magento application classes and Magento libs
* *
...@@ -45,4 +51,36 @@ class ChangedFiles ...@@ -45,4 +51,36 @@ class ChangedFiles
return $phpFiles; return $phpFiles;
} }
/**
* Get changed content.
*
* @param string $fileName
* @return string
*/
public static function getChangedContent($fileName)
{
$data = [];
$extension = self::getFileExtension($fileName);
$fileName = ltrim(str_replace(BP, '', $fileName), DIRECTORY_SEPARATOR);
$changedFilesContentFile = BP . sprintf(self::CHANGED_FILES_CONTENT_FILE, $extension);
if (file_exists($changedFilesContentFile)) {
$changedContent = file_get_contents($changedFilesContentFile);
$data = json_decode($changedContent, true);
}
return isset($data[$fileName]) ? $data[$fileName] : '';
}
/**
* Get file extension.
*
* @param string $fileName
* @return string
*/
public static function getFileExtension($fileName)
{
$fileInfo = pathinfo($fileName);
return isset($fileInfo['extension']) ? $fileInfo['extension'] : 'unknown';
}
} }
...@@ -35,19 +35,65 @@ class FunctionDetector ...@@ -35,19 +35,65 @@ class FunctionDetector
{ {
$result = []; $result = [];
$regexp = $this->composeRegexp($functions); $regexp = $this->composeRegexp($functions);
if ($regexp) {
$file = file($filePath); if (!$regexp) {
array_unshift($file, ''); return $result;
$lines = preg_grep( }
$regexp,
$file $fileContent = \Magento\TestFramework\Utility\ChangedFiles::getChangedContent($filePath);
); $file = file($filePath);
foreach ($lines as $lineNumber => $line) {
if (preg_match_all($regexp, $line, $matches)) { return $fileContent
$result[$lineNumber] = $matches[1]; ? $this->grepChangedContent($file, $regexp, $functions, $fileContent)
: $this->grepFile($file, $regexp);
}
/**
* Grep only changed content.
*
* @param array $file
* @param string $regexp
* @param string[] $functions
* @param string $fileContent
* @return array
*/
public function grepChangedContent(array $file, $regexp, $functions, $fileContent)
{
$result = [];
$matches = preg_grep($regexp, explode("\n", $fileContent));
if (!empty($matches)) {
foreach ($matches as $line) {
$actualFunctions = [];
foreach ($functions as $function) {
if (false !== strpos($line, $function)) {
$actualFunctions[] = $function;
}
} }
$result[array_search($line . "\n", $file) + 1] = $actualFunctions;
} }
} }
return $result;
}
/**
* Grep File.
*
* @param array $file
* @param string $regexp
* @return array
*/
public function grepFile(array $file, $regexp)
{
$result = [];
array_unshift($file, '');
$lines = preg_grep($regexp, $file);
foreach ($lines as $lineNumber => $line) {
if (preg_match_all($regexp, $line, $matches)) {
$result[$lineNumber] = $matches[1];
}
}
return $result; return $result;
} }
......
...@@ -34,6 +34,8 @@ if (!validateInput($options, $requiredOptions)) { ...@@ -34,6 +34,8 @@ if (!validateInput($options, $requiredOptions)) {
$fileExtensions = explode(',', isset($options['file-extensions']) ? $options['file-extensions'] : 'php'); $fileExtensions = explode(',', isset($options['file-extensions']) ? $options['file-extensions'] : 'php');
include_once __DIR__ . '/framework/autoload.php';
$mainline = 'mainline_' . (string)rand(0, 9999); $mainline = 'mainline_' . (string)rand(0, 9999);
$repo = getRepo($options, $mainline); $repo = getRepo($options, $mainline);
$branches = $repo->getBranches('--remotes'); $branches = $repo->getBranches('--remotes');
...@@ -41,8 +43,27 @@ generateBranchesList($options['output-file'], $branches, $options['branch']); ...@@ -41,8 +43,27 @@ generateBranchesList($options['output-file'], $branches, $options['branch']);
$changes = retrieveChangesAcrossForks($mainline, $repo, $options['branch']); $changes = retrieveChangesAcrossForks($mainline, $repo, $options['branch']);
$changedFiles = getChangedFiles($changes, $fileExtensions); $changedFiles = getChangedFiles($changes, $fileExtensions);
generateChangedFilesList($options['output-file'], $changedFiles); generateChangedFilesList($options['output-file'], $changedFiles);
saveChangedFileContent($repo);
cleanup($repo, $mainline); cleanup($repo, $mainline);
/**
* Save changed file content.
*
* @param GitRepo $repo
* @return void
*/
function saveChangedFileContent(GitRepo $repo)
{
$changedFilesContentFileName = BP . Magento\TestFramework\Utility\ChangedFiles::CHANGED_FILES_CONTENT_FILE;
foreach ($repo->getChangedContentFiles() as $key => $changedContentFile) {
$filePath = sprintf($changedFilesContentFileName, $key);
$oldContent = file_exists($filePath) ? file_get_contents($filePath) : '{}';
$oldData = json_decode($oldContent, true);
$data = array_merge($oldData, $changedContentFile);
file_put_contents($filePath, json_encode($data));
}
}
/** /**
* Generates a file containing changed files * Generates a file containing changed files
* *
...@@ -170,6 +191,18 @@ class GitRepo ...@@ -170,6 +191,18 @@ class GitRepo
*/ */
private $remoteList = []; private $remoteList = [];
/**
* Array of changed content files.
*
* Example:
* 'extension' =>
* 'path_to_file/filename' => 'Content that was edited',
* 'path_to_file/filename2' => 'Content that was edited',
*
* @var array
*/
private $changedContentFiles = [];
/** /**
* @param string $workTree absolute path to git project * @param string $workTree absolute path to git project
*/ */
...@@ -285,6 +318,9 @@ class GitRepo ...@@ -285,6 +318,9 @@ class GitRepo
'diff HEAD %s/%s -- %s', $remoteAlias, $remoteBranch, $this->workTree . '/' . $fileName) 'diff HEAD %s/%s -- %s', $remoteAlias, $remoteBranch, $this->workTree . '/' . $fileName)
); );
if ($result) { if ($result) {
if (!(isset($this->changedContentFiles[$fileName]))) {
$this->setChangedContentFile($result, $fileName);
}
$filteredChanges[] = $fileName; $filteredChanges[] = $fileName;
} }
} }
...@@ -295,6 +331,38 @@ class GitRepo ...@@ -295,6 +331,38 @@ class GitRepo
return $filteredChanges; return $filteredChanges;
} }
/**
* Set changed content for file.
*
* @param array $content
* @param string $fileName
* @return void
*/
private function setChangedContentFile(array $content, $fileName)
{
$changedContent = '';
$extension = Magento\TestFramework\Utility\ChangedFiles::getFileExtension($fileName);
foreach ($content as $item) {
if (strpos($item, '---') !== 0 && strpos($item, '-') === 0 && $line = ltrim($item, '-')) {
$changedContent .= $line . "\n";
}
}
if ($changedContent !== '') {
$this->changedContentFiles[$extension][$fileName] = $changedContent;
}
}
/**
* Get changed content files collection.
*
* @return array
*/
public function getChangedContentFiles()
{
return $this->changedContentFiles;
}
/** /**
* Makes call ro git cli * Makes call ro git cli
* *
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment