1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/**
* Rule for searching DB dependency
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\TestFramework\Dependency;
class DbRule implements \Magento\TestFramework\Dependency\RuleInterface
{
/**
* Map of tables and modules
*
* @var array
*/
protected $_moduleTableMap;
/**
* Constructor
*
* @param array $tables
*/
public function __construct(array $tables)
{
$this->_moduleTableMap = $tables;
}
/**
* Gets alien dependencies information for current module by analyzing file's contents
*
* @param string $currentModule
* @param string $fileType
* @param string $file
* @param string $contents
* @return array
*/
public function getDependencyInfo($currentModule, $fileType, $file, &$contents)
{
if ('php' != $fileType || !preg_match('#.*/(Setup|Resource)/.*\.php$#', $file)) {
return [];
}
$dependenciesInfo = [];
$unKnowTables = [];
if (preg_match_all('#>gettable(name)?\([\'"]([^\'"]+)[\'"]\)#i', $contents, $matches)) {
$tables = array_pop($matches);
foreach ($tables as $table) {
if (!isset($this->_moduleTableMap[$table])) {
$unKnowTables[$file][$table] = $table;
continue;
}
if (strtolower($currentModule) !== strtolower($this->_moduleTableMap[$table])) {
$dependenciesInfo[] = [
'module' => $this->_moduleTableMap[$table],
'type' => \Magento\TestFramework\Dependency\RuleInterface::TYPE_HARD,
'source' => $table,
];
}
}
}
foreach ($unKnowTables as $tables) {
foreach ($tables as $table) {
$dependenciesInfo[] = ['module' => 'Unknown', 'source' => $table];
}
}
return $dependenciesInfo;
}
}