function ImageFieldValidateTest::testResolution

Same name and namespace in other branches
  1. 9 core/modules/image/tests/src/Functional/ImageFieldValidateTest.php \Drupal\Tests\image\Functional\ImageFieldValidateTest::testResolution()
  2. 8.9.x core/modules/image/tests/src/Functional/ImageFieldValidateTest.php \Drupal\Tests\image\Functional\ImageFieldValidateTest::testResolution()
  3. 11.x core/modules/image/tests/src/Functional/ImageFieldValidateTest.php \Drupal\Tests\image\Functional\ImageFieldValidateTest::testResolution()

Tests min/max dimensions settings.

File

core/modules/image/tests/src/Functional/ImageFieldValidateTest.php, line 93

Class

ImageFieldValidateTest
Tests validation functions such as min/max dimensions.

Namespace

Drupal\Tests\image\Functional

Code

public function testResolution() : void {
  $field_names = [
    0 => $this->randomMachineName(),
    1 => $this->randomMachineName(),
    2 => $this->randomMachineName(),
  ];
  $min_resolution = [
    'width' => 50,
    'height' => 50,
  ];
  $max_resolution = [
    'width' => 100,
    'height' => 100,
  ];
  $no_height_min_resolution = [
    'width' => 50,
    'height' => NULL,
  ];
  $no_height_max_resolution = [
    'width' => 100,
    'height' => NULL,
  ];
  $no_width_min_resolution = [
    'width' => NULL,
    'height' => 50,
  ];
  $no_width_max_resolution = [
    'width' => NULL,
    'height' => 100,
  ];
  $field_settings = [
    0 => $this->getFieldSettings($min_resolution, $max_resolution),
    1 => $this->getFieldSettings($no_height_min_resolution, $no_height_max_resolution),
    2 => $this->getFieldSettings($no_width_min_resolution, $no_width_max_resolution),
  ];
  $this->createImageField($field_names[0], 'node', 'article', [], $field_settings[0]);
  $this->createImageField($field_names[1], 'node', 'article', [], $field_settings[1]);
  $this->createImageField($field_names[2], 'node', 'article', [], $field_settings[2]);
  // We want a test image that is too small, and a test image that is too
  // big, so cycle through test image files until we have what we need.
  $image_that_is_too_big = FALSE;
  $image_that_is_too_small = FALSE;
  $image_factory = $this->container
    ->get('image.factory');
  foreach ($this->drupalGetTestFiles('image') as $image) {
    $image_file = $image_factory->get($image->uri);
    if ($image_file->getWidth() > $max_resolution['width']) {
      $image_that_is_too_big = $image;
    }
    if ($image_file->getWidth() < $min_resolution['width']) {
      $image_that_is_too_small = $image;
      $image_that_is_too_small_file = $image_file;
    }
    if ($image_that_is_too_small && $image_that_is_too_big) {
      break;

    }
  }
  $this->uploadNodeImage($image_that_is_too_small, $field_names[0], 'article');
  $this->assertSession()
    ->statusMessageContains("The specified file {$image_that_is_too_small->filename} could not be uploaded.", 'error');
  $this->assertSession()
    ->statusMessageContains("The image is too small. The minimum dimensions are 50x50 pixels and the image size is {$image_that_is_too_small_file->getWidth()}x{$image_that_is_too_small_file->getHeight()} pixels.", 'error');
  $this->uploadNodeImage($image_that_is_too_big, $field_names[0], 'article');
  $this->assertSession()
    ->statusMessageContains('The image was resized to fit within the maximum allowed dimensions of 100x100 pixels.', 'status');
  $this->uploadNodeImage($image_that_is_too_small, $field_names[1], 'article');
  $this->assertSession()
    ->statusMessageContains("The specified file {$image_that_is_too_small->filename} could not be uploaded.", 'error');
  $this->uploadNodeImage($image_that_is_too_big, $field_names[1], 'article');
  $this->assertSession()
    ->statusMessageContains('The image was resized to fit within the maximum allowed width of 100 pixels.', 'status');
  $this->uploadNodeImage($image_that_is_too_small, $field_names[2], 'article');
  $this->assertSession()
    ->statusMessageContains("The specified file {$image_that_is_too_small->filename} could not be uploaded.", 'error');
  $this->uploadNodeImage($image_that_is_too_big, $field_names[2], 'article');
  $this->assertSession()
    ->statusMessageContains('The image was resized to fit within the maximum allowed height of 100 pixels.', 'status');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.