Beispiel #1
0
 public function testPaymentMethods()
 {
     $invoker = new \Magento\Framework\App\Utility\AggregateInvoker($this);
     $invoker(function ($configFile, $moduleName) {
         $config = simplexml_load_file($configFile);
         $nodes = $config->xpath('/config/default/payment/*/model') ?: [];
         $formalModuleName = str_replace('_', '\\', $moduleName);
         foreach ($nodes as $node) {
             if (!Classes::isVirtual((string) $node)) {
                 $this->assertStringStartsWith($formalModuleName . '\\Model\\', (string) $node, "'{$node}' payment method is declared in '{$configFile}' module, " . "but doesn't belong to '{$moduleName}' module");
             }
         }
     }, $this->paymentMethodsDataProvider());
 }
 /**
  * Validate DI config file
  *
  * @param string $file
  */
 protected function _validateFile($file)
 {
     $dom = new \DOMDocument();
     $dom->load($file);
     $data = $this->_mapper->convert($dom);
     foreach ($data as $instanceName => $parameters) {
         if (!isset($parameters['parameters']) || empty($parameters['parameters'])) {
             continue;
         }
         if (\Magento\Framework\App\Utility\Classes::isVirtual($instanceName)) {
             $instanceName = \Magento\Framework\App\Utility\Classes::resolveVirtualType($instanceName);
         }
         if (!$this->_classExistsAsReal($instanceName)) {
             continue;
         }
         $reflectionClass = new \ReflectionClass($instanceName);
         $constructor = $reflectionClass->getConstructor();
         if (!$constructor) {
             $this->fail('Class ' . $instanceName . ' does not have __constructor');
         }
         $parameters = $parameters['parameters'];
         $classParameters = $constructor->getParameters();
         foreach ($classParameters as $classParameter) {
             $parameterName = $classParameter->getName();
             if (array_key_exists($parameterName, $parameters)) {
                 unset($parameters[$parameterName]);
             }
         }
         $message = 'Configuration of ' . $instanceName . ' contains data for non-existed parameters: ' . implode(', ', array_keys($parameters));
         $this->assertEmpty($parameters, $message);
     }
 }
Beispiel #3
0
 /**
  * Check whether specified classes correspond to a file according PSR-0 standard
  *
  * Cyclomatic complexity is because of temporary marking test as incomplete
  * Suppressing "unused variable" because of the "catch" block
  *
  * @param array $classes
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  */
 protected function _assertClassesExist($classes, $path)
 {
     if (!$classes) {
         return;
     }
     $badClasses = [];
     $badUsages = [];
     foreach ($classes as $class) {
         try {
             if (strrchr($class, '\\') === false and !Classes::isVirtual($class)) {
                 $badUsages[] = $class;
                 continue;
             } else {
                 $this->assertTrue(isset(self::$_existingClasses[$class]) || Files::init()->classFileExists($class) || Classes::isVirtual($class) || Classes::isAutogenerated($class));
             }
             self::$_existingClasses[$class] = 1;
         } catch (\PHPUnit_Framework_AssertionFailedError $e) {
             $badClasses[] = $class;
         }
     }
     if ($badClasses) {
         $this->fail("Files not found for following usages in {$path}:\n" . implode("\n", $badClasses));
     }
     if ($badUsages) {
         $this->fail("Bad usages of classes in {$path}: \n" . implode("\n", $badUsages));
     }
 }