utilikit-1.0.0/tests/src/Unit/FormHelperTraitTest.php

tests/src/Unit/FormHelperTraitTest.php
<?php

declare(strict_types=1);

namespace Drupal\Tests\utilikit\Unit;

use Drupal\Tests\UnitTestCase;
use Drupal\utilikit\Traits\FormHelperTrait;

/**
 * Tests FormHelperTrait functionality.
 *
 * @group utilikit
 * @coversDefaultClass \Drupal\utilikit\Traits\FormHelperTrait
 */
class FormHelperTraitTest extends UnitTestCase {

  /**
   * Test class that uses the FormHelperTrait.
   *
   * @var \Drupal\Tests\utilikit\Unit\Traits\FormHelperTraitTestClass
   */
  protected $traitObject;

  /**
   * {@inheritdoc}
   */
  protected function setUp(): void {
    parent::setUp();
    $this->traitObject = new FormHelperTraitTestClass();
  }

  /**
   * Tests createFormField with basic configuration.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldBasic() {
    $config = [
      'title' => 'Test Field',
      'description' => 'Test description',
      'default_value' => 'test_value',
    ];

    $field = $this->traitObject->createFormFieldPublic('textfield', $config);

    $this->assertEquals('textfield', $field['#type']);
    $this->assertEquals('Test Field', $field['#title']);
    $this->assertEquals('Test description', $field['#description']);
    $this->assertEquals('test_value', $field['#default_value']);
  }

  /**
   * Tests createFormField with select options.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldWithOptions() {
    $config = [
      'title' => 'Select Field',
      'options' => ['option1' => 'Option 1', 'option2' => 'Option 2'],
      'default_value' => 'option1',
    ];

    $field = $this->traitObject->createFormFieldPublic('select', $config);

    $this->assertEquals('select', $field['#type']);
    $this->assertEquals('Select Field', $field['#title']);
    $this->assertArrayHasKey('#options', $field);
    $this->assertEquals(['option1' => 'Option 1', 'option2' => 'Option 2'], $field['#options']);
    $this->assertEquals('option1', $field['#default_value']);
  }

  /**
   * Tests createFormField with states.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldWithStates() {
    $states = [
      'visible' => [
        ':input[name="test_field"]' => ['checked' => TRUE],
      ],
    ];

    $config = [
      'title' => 'Conditional Field',
      'states' => $states,
    ];

    $field = $this->traitObject->createFormFieldPublic('textfield', $config);

    $this->assertArrayHasKey('#states', $field);
    $this->assertEquals($states, $field['#states']);
  }

  /**
   * Tests createFormField with attributes.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldWithAttributes() {
    $attributes = [
      'class' => ['custom-class'],
      'data-test' => 'test-value',
    ];

    $config = [
      'title' => 'Field with Attributes',
      'attributes' => $attributes,
    ];

    $field = $this->traitObject->createFormFieldPublic('textfield', $config);

    $this->assertArrayHasKey('#attributes', $field);
    $this->assertEquals($attributes, $field['#attributes']);
  }

  /**
   * Tests createFormField with number field properties.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldNumberProperties() {
    $config = [
      'title' => 'Number Field',
      'min' => 0,
      'max' => 100,
      'step' => 5,
      'field_suffix' => 'px',
    ];

    $field = $this->traitObject->createFormFieldPublic('number', $config);

    $this->assertEquals(0, $field['#min']);
    $this->assertEquals(100, $field['#max']);
    $this->assertEquals(5, $field['#step']);
    $this->assertEquals('px', $field['#field_suffix']);
  }

  /**
   * Tests createFormField with prefix and suffix.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldPrefixSuffix() {
    $config = [
      'title' => 'Field with Prefix/Suffix',
      'prefix' => '<div class="prefix">',
      'suffix' => '</div>',
    ];

    $field = $this->traitObject->createFormFieldPublic('textfield', $config);

    $this->assertEquals('<div class="prefix">', $field['#prefix']);
    $this->assertEquals('</div>', $field['#suffix']);
  }

  /**
   * Tests createFormField with empty configuration.
   *
   * @covers ::createFormField
   */
  public function testCreateFormFieldEmptyConfig() {
    $field = $this->traitObject->createFormFieldPublic('textfield', []);

    $this->assertEquals('textfield', $field['#type']);
    $this->assertEquals('', $field['#title']);
    $this->assertEquals('', $field['#description']);
    $this->assertNull($field['#default_value']);
    $this->assertArrayNotHasKey('#options', $field);
    $this->assertArrayNotHasKey('#states', $field);
    $this->assertArrayNotHasKey('#attributes', $field);
  }

  /**
   * Tests createCheckbox helper method.
   *
   * @covers ::createCheckbox
   */
  public function testCreateCheckbox() {
    $checkbox = $this->traitObject->createCheckboxPublic(
      'Test Checkbox',
      'This is a test checkbox',
      TRUE,
      ['class' => ['test-class']]
    );

    $this->assertEquals('checkbox', $checkbox['#type']);
    $this->assertEquals('Test Checkbox', $checkbox['#title']);
    $this->assertEquals('This is a test checkbox', $checkbox['#description']);
    $this->assertTrue($checkbox['#default_value']);
    $this->assertEquals(['class' => ['test-class']], $checkbox['#attributes']);
  }

  /**
   * Tests createCheckbox with minimal parameters.
   *
   * @covers ::createCheckbox
   */
  public function testCreateCheckboxMinimal() {
    $checkbox = $this->traitObject->createCheckboxPublic('Simple Checkbox');

    $this->assertEquals('checkbox', $checkbox['#type']);
    $this->assertEquals('Simple Checkbox', $checkbox['#title']);
    $this->assertEquals('', $checkbox['#description']);
    $this->assertFalse($checkbox['#default_value']);
    $this->assertArrayNotHasKey('#attributes', $checkbox);
  }

  /**
   * Tests createTextfield helper method.
   *
   * @covers ::createTextfield
   */
  public function testCreateTextfield() {
    $textfield = $this->traitObject->createTextfieldPublic(
      'Test Textfield',
      'Enter some text',
      'default text',
      ['placeholder' => 'Enter text here...']
    );

    $this->assertEquals('textfield', $textfield['#type']);
    $this->assertEquals('Test Textfield', $textfield['#title']);
    $this->assertEquals('Enter some text', $textfield['#description']);
    $this->assertEquals('default text', $textfield['#default_value']);
    $this->assertEquals(['placeholder' => 'Enter text here...'], $textfield['#attributes']);
  }

  /**
   * Tests createSelect helper method.
   *
   * @covers ::createSelect
   */
  public function testCreateSelect() {
    $options = ['opt1' => 'Option 1', 'opt2' => 'Option 2'];

    $select = $this->traitObject->createSelectPublic(
      'Test Select',
      'Choose an option',
      $options,
      'opt2'
    );

    $this->assertEquals('select', $select['#type']);
    $this->assertEquals('Test Select', $select['#title']);
    $this->assertEquals('Choose an option', $select['#description']);
    $this->assertEquals($options, $select['#options']);
    $this->assertEquals('opt2', $select['#default_value']);
  }

  /**
   * Tests createNumber helper method.
   *
   * @covers ::createNumber
   */
  public function testCreateNumber() {
    $number = $this->traitObject->createNumberPublic(
      'Test Number',
      'Enter a number',
      50,
      0,
      100,
      5,
      'px'
    );

    $this->assertEquals('number', $number['#type']);
    $this->assertEquals('Test Number', $number['#title']);
    $this->assertEquals('Enter a number', $number['#description']);
    $this->assertEquals(50, $number['#default_value']);
    $this->assertEquals(0, $number['#min']);
    $this->assertEquals(100, $number['#max']);
    $this->assertEquals(5, $number['#step']);
    $this->assertEquals('px', $number['#field_suffix']);
  }

  /**
   * Tests createSubmitButton helper method.
   *
   * @covers ::createSubmitButton
   */
  public function testCreateSubmitButton() {
    $button = $this->traitObject->createSubmitButtonPublic(
      'Save Settings',
      ['::submitForm'],
      ['button--primary'],
      ['onclick' => 'return confirm("Save?");']
    );

    $this->assertEquals('submit', $button['#type']);
    $this->assertEquals('Save Settings', $button['#value']);
    $this->assertEquals(['::submitForm'], $button['#submit']);
    $this->assertEquals(['button--primary'], $button['#attributes']['class']);
    $this->assertEquals('return confirm("Save?");', $button['#attributes']['onclick']);
  }

  /**
   * Tests createSubmitButton with minimal parameters.
   *
   * @covers ::createSubmitButton
   */
  public function testCreateSubmitButtonMinimal() {
    $button = $this->traitObject->createSubmitButtonPublic(
      'Submit',
      ['::submitHandler']
    );

    $this->assertEquals('submit', $button['#type']);
    $this->assertEquals('Submit', $button['#value']);
    $this->assertEquals(['::submitHandler'], $button['#submit']);
    $this->assertArrayNotHasKey('class', $button['#attributes'] ?? []);
  }

}

/**
 * Test class that exposes FormHelperTrait protected methods for testing.
 */
class FormHelperTraitTestClass {

  use FormHelperTrait;

  /**
   * Public wrapper for createFormField method.
   */
  public function createFormFieldPublic(string $type, array $config): array {
    return $this->createFormField($type, $config);
  }

  /**
   * Public wrapper for createCheckbox method.
   */
  public function createCheckboxPublic(string $title, string $description = '', bool $defaultValue = FALSE, array $attributes = []): array {
    return $this->createCheckbox($title, $description, $defaultValue, $attributes);
  }

  /**
   * Public wrapper for createTextfield method.
   */
  public function createTextfieldPublic(string $title, string $description = '', string $defaultValue = '', array $attributes = []): array {
    return $this->createTextfield($title, $description, $defaultValue, $attributes);
  }

  /**
   * Public wrapper for createSelect method.
   */
  public function createSelectPublic(string $title, string $description, array $options, $defaultValue = NULL): array {
    return $this->createSelect($title, $description, $options, $defaultValue);
  }

  /**
   * Public wrapper for createNumber method.
   */
  public function createNumberPublic(string $title, string $description, $defaultValue = NULL, ?int $min = NULL, ?int $max = NULL, ?int $step = NULL, string $suffix = ''): array {
    return $this->createNumber($title, $description, $defaultValue, $min, $max, $step, $suffix);
  }

  /**
   * Public wrapper for createSubmitButton method.
   */
  public function createSubmitButtonPublic(string $value, array $submit, array $classes = [], array $attributes = []): array {
    return $this->createSubmitButton($value, $submit, $classes, $attributes);
  }

}

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

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