crossword-8.x-1.x-dev/tests/src/Functional/CrosswordFieldValidateTest.php

tests/src/Functional/CrosswordFieldValidateTest.php
<?php

namespace Drupal\Tests\crossword\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests validation of Crossword field.
 *
 * This does not test ReferenceAccess and FileValidation, which are Validators
 * provided by core.
 *
 * @group crossword
 */
class CrosswordFieldValidateTest extends BrowserTestBase {

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

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

  /**
   * Tests validation of file structure.
   *
   * Note that the parsers themselves are tested more thoroughly in other tests.
   */
  public function testCrosswordFileValdator() {
    // Not crossword.
    $filename = 'failure.txt';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $not_crossword = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Corrupted txt.
    $filename = 'corrupted_bad_grid.txt';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $corrupted_txt = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Ok txt.
    $filename = 'test.txt';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $ok_txt = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Ok puz.
    $filename = 'test.puz';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $ok_puz = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Log in as admin.
    $this->drupalLogin($this->drupalCreateUser([], 'radmin', TRUE));

    $this->drupalGet('/node/add/crossword');
    $page = $this->getSession()->getPage();
    $page->attachFileToField('files[field_crossword_0]', $not_crossword->getFileUri());
    $this->submitForm([], 'Upload');
    $error_message = t('That does not appear to be a supported Crossword Puzzle file format.');
    $this->assertSession()->responseContains('Error message');
    $this->assertSession()->responseContains($error_message);

    $this->submitForm([], 'Remove');
    $page->attachFileToField('files[field_crossword_0]', $corrupted_txt->getFileUri());
    $this->submitForm([], 'Upload');
    $error_message = t('The file format was identified as %parser, but the file reader was unsuccessful. The file may be corrupted or contain unsupported features. The message was: %message', ['%parser' => 'Across Lite Text', '%message' => 'The grid is not rectangular.']);
    $this->assertSession()->responseContains('Error message');
    $this->assertSession()->responseContains($error_message);

    $this->submitForm([], 'Remove');
    $page->attachFileToField('files[field_crossword_0]', $ok_txt->getFileUri());
    $this->submitForm([], 'Upload');
    $this->assertSession()->responseNotContains('Error message');

    $this->submitForm([], 'Remove');
    $page->attachFileToField('files[field_crossword_0]', $ok_puz->getFileUri());
    $this->submitForm([], 'Upload');
    $this->assertSession()->responseNotContains('Error message');
  }

  /**
   * Tests validation of dimensions.
   */
  public function testCrosswordDimensionsValdator() {
    // Big file (25x25).
    $filename = '3185956.puz';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $big_file = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Tiny File (2x2).
    $filename = 'tiny.txt';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $tiny_file = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Ok size (3x3).
    $filename = 'test.txt';
    $contents = file_get_contents(\Drupal::service('extension.list.module')->getPath('crossword') . "/tests/files/" . $filename);
    $ok_file = \Drupal::service('file.repository')->writeData($contents, "public://$filename");

    // Log in as admin.
    $this->drupalLogin($this->drupalCreateUser([], 'radmin', TRUE));

    $this->drupalGet('/node/add/crossword');
    $page = $this->getSession()->getPage();
    $page->attachFileToField('files[field_crossword_0]', $big_file->getFileUri());
    $this->submitForm([], 'Upload');
    $error_message = t('That puzzle has %columns columns, which is more than the allowed %allowed.', ['%columns' => '25', '%allowed' => '15']);
    $this->assertSession()->responseContains('Error message');
    $this->assertSession()->responseContains($error_message);

    $this->submitForm([], 'Remove');
    $page->attachFileToField('files[field_crossword_0]', $tiny_file->getFileUri());
    $this->submitForm([], 'Upload');
    $error_message = t('That puzzle has %columns columns, which is fewer than the required %required.', ['%columns' => '2', '%required' => '3']);
    $this->assertSession()->responseContains('Error message');
    $this->assertSession()->responseContains($error_message);

    $this->submitForm([], 'Remove');
    $page->attachFileToField('files[field_crossword_0]', $ok_file->getFileUri());
    $this->submitForm([], 'Upload');
    $this->assertSession()->responseNotContains('Error message');
  }

}

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

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