You are here

DropzoneJsWebDriverTestBase.php in DropzoneJS 8.2

File

tests/src/FunctionalJavascript/DropzoneJsWebDriverTestBase.php
View source
<?php

namespace Drupal\Tests\dropzonejs\FunctionalJavascript;

use Drupal\file\Entity\File;
use Drupal\FunctionalJavascriptTests\WebDriverTestBase;

/**
 * Base class for DropzoneJS Web driver functional test base.
 *
 * @package Drupal\Tests\entity_browser\FunctionalJavascript
 */
abstract class DropzoneJsWebDriverTestBase extends WebDriverTestBase {
  protected $defaultTheme = 'classy';

  /**
   * Simple grey rectangle image data.
   *
   * @var string
   */
  var $fileData = "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAAAAABVicqIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA\nB3RJTUUH3gIYBAEMHCkuWQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUH\nAAAAQElEQVRo3u3NQQ0AAAgEoNN29i9kCh9uUICa3OtIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJ\nRCKRSCQSiUTyPlnSFQER9VCp/AAAAABJRU5ErkJggg==";

  /**
   * Modules to enable.
   *
   * @var array
   */
  public static $modules = [
    'dropzonejs_test',
    'views',
    'block',
    'node',
    'file',
    'image',
    'field_ui',
    'views_ui',
    'system',
  ];

  /**
   * Creates an file.
   *
   * @param string $name
   *   The name of the image.
   * @param string $extension
   *   File extension.
   *
   * @return \Drupal\file\FileInterface
   *   Returns an image.
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function getFile($name, $extension = 'jpg') {
    file_put_contents('public://' . $name . '.' . $extension, $this->fileData);
    $file = File::create([
      'filename' => $name . '.' . $extension,
      'uri' => 'public://' . $name . '.' . $extension,
    ]);
    $file
      ->setPermanent();
    $file
      ->save();
    return $file;
  }

  /**
   * Waits for jQuery to become ready and animations to complete.
   */
  protected function waitForAjaxToFinish() {
    $this
      ->assertSession()
      ->assertWaitOnAjaxRequest();
  }

  /**
   * Drop a predefined file to dropzone.
   *
   * @throws \Behat\Mink\Exception\ElementNotFoundException
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function dropFile() {

    // Sometimes we are not yet switched to the iframe. Stop the horses a bit
    // here.
    sleep(1);
    $file = $this
      ->getFile('notalama');
    $input = <<<JS
      jQuery('.form-type-dropzonejs').append('<input type=\\'file\\' name=\\'fakefile\\'>');
JS;
    $this
      ->getSession()
      ->evaluateScript($input);
    $full_path = \Drupal::service('file_system')
      ->realPath($file
      ->getFileUri());
    if (is_file($full_path)) {
      $path = $full_path;
    }
    if (!isset($path) || !file_exists($path)) {
      throw new \RuntimeException("File {$path} does not exist");
    }
    $this
      ->getSession()
      ->getPage()
      ->attachFileToField('fakefile', $path);
    $drop = <<<JS
    (function(jQuery) {
      var fakeFileInputs = jQuery('input[name=fakefile]' );
      var fileList = fakeFileInputs.map(function (i, el) { return el.files[0] });
      var e = jQuery.Event('drop', { dataTransfer : { files : fileList } });
      jQuery('.dropzone' )[0].dropzone.listeners[0].events.drop(e);
      fakeFileInputs.map(function (i, el) { return el.remove(); });
    })(jQuery);
JS;
    $this
      ->getSession()
      ->evaluateScript($drop);
  }

}

Classes

Namesort descending Description
DropzoneJsWebDriverTestBase Base class for DropzoneJS Web driver functional test base.