You are here

TestGenerateTask.php in Module Builder 8.3

File

tests/modules/module_builder_test_component_type/src/TestGenerateTask.php
View source
<?php

namespace Drupal\module_builder_test_component_type;

use DrupalCodeBuilder\Definition\GeneratorDefinition;
use DrupalCodeBuilder\Definition\PropertyDefinition;
use DrupalCodeBuilder\MutableTypedData\DrupalCodeBuilderDataItemFactory;
use DrupalCodeBuilder\Task\Generate;
use MutableTypedData\Definition\DataDefinition as BasePropertyDefinition;
use MutableTypedData\Definition\DefinitionProviderInterface;

/**
 * Mock Generate task for functional tests.
 *
 * We can't make this as a mock in TestDrupalCodeBuilder because some of the
 * methods we need to stub have reference arguments, which Prophecy doesn't
 * support, and it's too much of a PITA to create PHPUnit mock objects outside
 * of a test class.
 */
class TestGenerateTask extends Generate implements DefinitionProviderInterface {
  public function getRootComponentData($component_type = 'module') {
    $data = DrupalCodeBuilderDataItemFactory::createFromProvider(static::class);
    return $data;
  }

  /**
   * {@inheritdoc}
   */
  public static function getDefinition() : BasePropertyDefinition {
    $definition = GeneratorDefinition::createFromGeneratorType('module', 'complex');

    // The component form expects these to always exist.
    $definition
      ->addProperty(PropertyDefinition::create('string')
      ->setName('root_name')
      ->setLabel('Extension machine name'));
    $definition
      ->addProperty(PropertyDefinition::create('string')
      ->setName('readable_name')
      ->setLabel('Extension readable name'));

    // TODO: convert the whole definition to OO.
    $array_property_info = static::getInfoArray();

    // ARGH this method should be somewhere in a service!
    \DrupalCodeBuilder\Generator\BaseGenerator::addArrayPropertyInfoToDefinition($definition, $array_property_info);
    $definition
      ->setName('module');
    return $definition;
  }
  public static function getInfoArray() {
    return [
      // These need to be defined for the 'Name' form to work.
      'short_description' => [
        'label' => 'Description',
        'default' => '',
        'format' => 'string',
        'required' => FALSE,
      ],
      'module_package' => [
        'label' => 'Description',
        'default' => '',
        'format' => 'string',
        'required' => FALSE,
      ],
      'module_dependencies' => [
        'label' => 'Description',
        'default' => '',
        'format' => 'string',
        'required' => FALSE,
      ],
      // These will show on the 'Misc' form because the entity annotation
      // doesn't declare them.
      'string_empty' => [
        'label' => 'String empty',
        'default' => '',
        'format' => 'string',
        'required' => FALSE,
      ],
      'string_default' => [
        'label' => 'String default',
        'default' => 'default value',
        'format' => 'string',
        'required' => FALSE,
      ],
      'checkbox_empty' => [
        'label' => "Checkbox empty",
        'required' => FALSE,
        'default' => FALSE,
        'format' => 'boolean',
      ],
      'checkbox_default' => [
        'label' => "Checkbox default",
        'required' => FALSE,
        'default' => TRUE,
        'format' => 'boolean',
      ],
      'array_empty' => [
        'label' => 'Array empty',
        'default' => [],
        'format' => 'array',
        'required' => FALSE,
      ],
      'array_default' => [
        'label' => 'Array default',
        'default' => [
          'value 1',
          'value 2',
        ],
        'format' => 'array',
        'required' => FALSE,
      ],
      'compound_empty' => [
        'label' => 'Compound empty',
        'format' => 'compound',
        'required' => FALSE,
        'properties' => [
          'one' => [
            'label' => 'One',
            'required' => TRUE,
            'format' => 'string',
          ],
          'two' => [
            'label' => 'Two',
            'required' => FALSE,
            'format' => 'string',
          ],
        ],
      ],
    ];
  }

}

Classes

Namesort descending Description
TestGenerateTask Mock Generate task for functional tests.