ui_patterns-8.x-1.4/tests/src/Unit/Definition/PatternDefinitionTest.php

tests/src/Unit/Definition/PatternDefinitionTest.php
<?php

namespace Drupal\Tests\ui_patterns\Unit\Definition;

use Drupal\Component\Serialization\Yaml;
use Drupal\Core\Url;
use Drupal\Tests\ui_patterns\Unit\UiPatternsTestBase;
use Drupal\ui_patterns\Definition\PatternDefinition;

/**
 * @coversDefaultClass \Drupal\ui_patterns\Definition\PatternDefinition
 *
 * @group ui_patterns
 */
class PatternDefinitionTest extends UiPatternsTestBase {

  /**
   * Test getters.
   *
   * @dataProvider definitionGettersProvider
   *
   * @covers ::getCategory
   * @covers ::getDescription
   * @covers ::getLabel
   * @covers ::getProvider
   * @covers ::getUse
   * @covers ::getWeight
   * @covers ::getTags
   * @covers ::getBasePath
   * @covers ::getClass
   * @covers ::getFileName
   * @covers ::getTemplate
   * @covers ::getThemeHook
   * @covers ::hasCustomThemeHook
   * @covers ::id
   */
  public function testGettersSetters($getter, $name, $value) {
    $pattern_definition = new PatternDefinition([$name => $value]);
    $this->assertEquals($value, call_user_func([$pattern_definition, $getter]));
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public static function definitionGettersProvider() {
    return [
      ['getProvider', 'provider', 'my_module'],
      ['id', 'id', 'pattern_id'],
      ['getLabel', 'label', 'Pattern label'],
      ['getDescription', 'description', 'Pattern description.'],
      ['getCategory', 'category', 'Pattern category'],
      ['getUse', 'use', 'template.twig'],
      ['hasCustomThemeHook', 'custom theme hook', FALSE],
      ['getThemeHook', 'theme hook', 'eme hook: custom_my_theme_hook'],
      ['getTemplate', 'template', 'my-template.html.twig'],
      ['getFileName', 'file name', '/path/to/filename.ui_patterns.yml'],
      ['getClass', 'class', '\Drupal\ui_patterns\MyClass'],
      ['getBasePath', 'base path', '/path/to'],
      ['getTags', 'tags', ['a', 'b']],
      ['getWeight', 'weight', 10],
    ];
  }

  /**
   * Test field singleton.
   *
   * @covers ::getField
   * @covers ::setFields
   */
  public function testFields() {
    $fields = [
      'name' => [
        'name' => 'name',
        'label' => 'Label',
      ],
    ];
    $pattern_definition = new PatternDefinition();
    $pattern_definition->setFields($fields);
    $this->assertEquals(
      [
        $fields['name']['label'],
        $fields['name']['name'],
        NULL,
        NULL,
        NULL,
      ],
      [
        $pattern_definition->getField('name')->getLabel(),
        $pattern_definition->getField('name')->getName(),
        $pattern_definition->getField('name')->getType(),
        $pattern_definition->getField('name')->getDescription(),
        $pattern_definition->getField('name')->getPreview(),
      ]);

    $pattern_definition->getField('name')->setType('type');
    $pattern_definition->getField('name')->setPreview('preview');
    $pattern_definition->getField('name')->setDescription('description');

    $this->assertEquals(
      [
        'type',
        'description',
        'preview',
      ],
      [
        $pattern_definition->getField('name')->getType(),
        $pattern_definition->getField('name')->getDescription(),
        $pattern_definition->getField('name')->getPreview(),
      ]);
  }

  /**
   * Test fields processing.
   *
   * @dataProvider fieldsProcessingProvider
   *
   * @covers ::setFields
   */
  public function testFieldsProcessing($actual, $expected) {
    $pattern_definition = new PatternDefinition();
    $data = $pattern_definition->setFields($actual)->toArray();
    $this->assertEquals($expected, $data['fields']);
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public function fieldsProcessingProvider() {
    return Yaml::decode(file_get_contents($this->getFixturePath() . '/definition/fields_processing.yml'));
  }

  /**
   * Test fields processing.
   *
   * @dataProvider variantsProcessingProvider
   *
   * @covers ::setVariants
   */
  public function testVariantsProcessing($actual, $expected) {
    $pattern_definition = new PatternDefinition();
    $data = $pattern_definition->setVariants($actual)->toArray();
    $this->assertEquals($expected, $data['variants']);
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public function variantsProcessingProvider() {
    return Yaml::decode(file_get_contents($this->getFixturePath() . '/definition/variants_processing.yml'));
  }

  /**
   * Test hasUse method.
   *
   * @dataProvider hasUseProvider
   *
   * @covers ::hasUse
   */
  public function testHasUse(array $pattern, bool $expected): void {
    $patternDefinition = new PatternDefinition($pattern);
    $this->assertEquals($expected, $patternDefinition->hasUse());
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public static function hasUseProvider(): array {
    return [
      'pattern_without_use' => [
        [
          'id' => 'test',
        ],
        FALSE,
      ],
      'pattern_with_use' => [
        [
          'id' => 'test',
          'use' => 'my use',
        ],
        TRUE,
      ],
      'pattern_with_use_with_variant' => [
        [
          'id' => 'test',
          'use' => 'my use',
          'variants' => [
            'default' => [
              'label' => 'Default',
            ],
          ],
        ],
        TRUE,
      ],
      'pattern_with_variant' => [
        [
          'id' => 'test',
          'variants' => [
            'default' => [
              'label' => 'Default',
            ],
          ],
        ],
        FALSE,
      ],
      'pattern_with_variant_with_use' => [
        [
          'id' => 'test',
          'variants' => [
            'default' => [
              'label' => 'Default',
              'use' => 'my use',
            ],
          ],
        ],
        TRUE,
      ],
      'pattern_with_use_with_variant_with_use' => [
        [
          'id' => 'test',
          'use' => 'my use',
          'variants' => [
            'default' => [
              'label' => 'Default',
              'use' => 'my use',
            ],
          ],
        ],
        TRUE,
      ],
    ];
  }

  /**
   * Test getLinks.
   *
   * @param array $links
   *   The links like in the YAML declaration.
   * @param array $expected
   *   The expected result.
   *
   * @covers ::getLinks
   *
   * @dataProvider definitionGetLinksProvider
   */
  public function testGetLinks(array $links, array $expected): void {
    $definition = new PatternDefinition([
      'links' => $links,
    ]);
    $this->assertEquals($expected, $definition->getLinks());
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public static function definitionGetLinksProvider(): array {
    return [
      [
        [
          'https://test.com',
          [
            'url' => 'https://example.com',
            'title' => 'Example',
            'options' => [
              'attributes' => [
                'query' => [
                  'test_param' => 'test_value',
                ],
                'target' => '_blank',
              ],
            ],
          ],
        ],
        [
          [
            'url' => 'https://test.com',
            'title' => 'External documentation',
          ],
          [
            'url' => 'https://example.com',
            'title' => 'Example',
            'options' => [
              'attributes' => [
                'query' => [
                  'test_param' => 'test_value',
                ],
                'target' => '_blank',
              ],
            ],
          ],
        ],
      ],
    ];
  }

  /**
   * Test getRenderLinks.
   *
   * @param array $links
   *   The links like in the YAML declaration.
   * @param array $expected
   *   The expected result.
   *
   * @covers ::getRenderLinks
   *
   * @dataProvider definitionGetRenderLinksProvider
   */
  public function testGetRenderLinks(array $links, array $expected): void {
    $definition = new PatternDefinition([
      'links' => $links,
    ]);
    $this->assertEquals($expected, $definition->getRenderLinks());
  }

  /**
   * Provider.
   *
   * @return array
   *   Data.
   */
  public static function definitionGetRenderLinksProvider(): array {
    return [
      [
        [
          'https://test.com',
          [
            'url' => 'https://example.com',
            'title' => 'Example',
            'options' => [
              'attributes' => [
                'query' => [
                  'test_param' => 'test_value',
                ],
                'target' => '_blank',
              ],
            ],
          ],
        ],
        [
          [
            '#type' => 'link',
            '#url' => Url::fromUri('https://test.com'),
            '#title' => 'External documentation',
          ],
          [
            '#type' => 'link',
            '#url' => Url::fromUri('https://example.com'),
            '#title' => 'Example',
            '#options' => [
              'attributes' => [
                'query' => [
                  'test_param' => 'test_value',
                ],
                'target' => '_blank',
              ],
            ],
          ],
        ],
      ],
    ];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc