<?php

declare(strict_types=1);

namespace Drupal\FunctionalJavascriptTests\Components;

use Drupal\FunctionalJavascriptTests\WebDriverTestBase;

/**
 * Tests the correct rendering of components.
 *
 * @group sdc
 */
class ComponentRenderTest extends WebDriverTestBase {

  /**
   * {@inheritdoc}
   */
  protected static $modules = ['system', 'sdc_test'];

  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'sdc_theme_test';

  /**
   * Tests that the correct libraries are put on the page using CSS.
   *
   * This also covers all the path translations necessary to produce the correct
   * path to the assets.
   */
  public function testCssLibraryAttachesCorrectly(): void {
    $build = [
      '#type' => 'inline_template',
      '#template' => "{{ include('sdc_theme_test:lib-overrides') }}",
    ];
    \Drupal::state()->set('sdc_test_component', $build);
    $this->drupalGet('sdc-test-component');
    $wrapper = $this->getSession()->getPage()->find('css', '#sdc-wrapper');
    // Opacity is set to 0 in the CSS file (see another-stylesheet.css).
    $this->assertFalse($wrapper->isVisible());
  }

  /**
   * Tests that the correct libraries are put on the page using JS.
   *
   * This also covers all the path translations necessary to produce the correct
   * path to the assets.
   */
  public function testJsLibraryAttachesCorrectly(): void {
    $build = [
      '#type' => 'inline_template',
      '#template' => "{{ include('sdc_test:my-button', {
        text: 'Click'
      }, with_context = false) }}",
    ];
    \Drupal::state()->set('sdc_test_component', $build);
    $this->drupalGet('sdc-test-component');
    $page = $this->getSession()->getPage();
    $page->find('css', '[data-component-id="sdc_test:my-button"]')
      ->click();
    $this->assertSame(
      'Click power (1)',
      $page->find('css', '[data-component-id="sdc_test:my-button"]')->getText(),
    );
  }

}