Chris@16
|
1 <?php
|
Chris@16
|
2
|
Chris@16
|
3 namespace Drupal\Tests\image\FunctionalJavascript;
|
Chris@16
|
4
|
Chris@16
|
5 use Drupal\field\Entity\FieldStorageConfig;
|
Chris@16
|
6 use Drupal\field\Entity\FieldConfig;
|
Chris@16
|
7
|
Chris@16
|
8 /**
|
Chris@16
|
9 * Tests validation functions such as min/max resolution.
|
Chris@16
|
10 *
|
Chris@16
|
11 * @group image
|
Chris@16
|
12 */
|
Chris@16
|
13 class ImageFieldValidateTest extends ImageFieldTestBase {
|
Chris@16
|
14
|
Chris@16
|
15 /**
|
Chris@16
|
16 * Test the validation message is displayed only once for ajax uploads.
|
Chris@16
|
17 */
|
Chris@16
|
18 public function testAJAXValidationMessage() {
|
Chris@16
|
19 $field_name = strtolower($this->randomMachineName());
|
Chris@16
|
20 $this->createImageField($field_name, 'article', ['cardinality' => -1]);
|
Chris@16
|
21
|
Chris@16
|
22 $this->drupalGet('node/add/article');
|
Chris@16
|
23 /** @var \Drupal\file\FileInterface[] $text_files */
|
Chris@16
|
24 $text_files = $this->drupalGetTestFiles('text');
|
Chris@16
|
25 $text_file = reset($text_files);
|
Chris@16
|
26
|
Chris@16
|
27 $field = $this->getSession()->getPage()->findField('files[' . $field_name . '_0][]');
|
Chris@16
|
28 $field->attachFile($this->container->get('file_system')->realpath($text_file->uri));
|
Chris@16
|
29 $this->assertSession()->waitForElement('css', '.messages--error');
|
Chris@16
|
30
|
Chris@16
|
31 $elements = $this->xpath('//div[contains(@class, :class)]', [
|
Chris@16
|
32 ':class' => 'messages--error',
|
Chris@16
|
33 ]);
|
Chris@16
|
34 $this->assertEqual(count($elements), 1, 'Ajax validation messages are displayed once.');
|
Chris@16
|
35 }
|
Chris@16
|
36
|
Chris@16
|
37 /**
|
Chris@16
|
38 * Tests that image field validation works with other form submit handlers.
|
Chris@16
|
39 */
|
Chris@16
|
40 public function testFriendlyAjaxValidation() {
|
Chris@16
|
41 // Add a custom field to the Article content type that contains an AJAX
|
Chris@16
|
42 // handler on a select field.
|
Chris@16
|
43 $field_storage = FieldStorageConfig::create([
|
Chris@16
|
44 'field_name' => 'field_dummy_select',
|
Chris@16
|
45 'type' => 'image_module_test_dummy_ajax',
|
Chris@16
|
46 'entity_type' => 'node',
|
Chris@16
|
47 'cardinality' => 1,
|
Chris@16
|
48 ]);
|
Chris@16
|
49 $field_storage->save();
|
Chris@16
|
50
|
Chris@16
|
51 $field = FieldConfig::create([
|
Chris@16
|
52 'field_storage' => $field_storage,
|
Chris@16
|
53 'entity_type' => 'node',
|
Chris@16
|
54 'bundle' => 'article',
|
Chris@16
|
55 'field_name' => 'field_dummy_select',
|
Chris@16
|
56 'label' => t('Dummy select'),
|
Chris@16
|
57 ])->save();
|
Chris@16
|
58
|
Chris@16
|
59 \Drupal::entityTypeManager()
|
Chris@16
|
60 ->getStorage('entity_form_display')
|
Chris@16
|
61 ->load('node.article.default')
|
Chris@16
|
62 ->setComponent(
|
Chris@16
|
63 'field_dummy_select',
|
Chris@16
|
64 [
|
Chris@16
|
65 'type' => 'image_module_test_dummy_ajax_widget',
|
Chris@16
|
66 'weight' => 1,
|
Chris@16
|
67 ])
|
Chris@16
|
68 ->save();
|
Chris@16
|
69
|
Chris@16
|
70 // Then, add an image field.
|
Chris@16
|
71 $this->createImageField('field_dummy_image', 'article');
|
Chris@16
|
72
|
Chris@16
|
73 // Open an article and trigger the AJAX handler.
|
Chris@16
|
74 $this->drupalGet('node/add/article');
|
Chris@16
|
75 $id = $this->getSession()->getPage()->find('css', '[name="form_build_id"]')->getValue();
|
Chris@16
|
76 $field = $this->getSession()->getPage()->findField('field_dummy_select[select_widget]');
|
Chris@16
|
77 $field->setValue('bam');
|
Chris@16
|
78 // Make sure that the operation did not end with an exception.
|
Chris@16
|
79 $this->assertSession()->waitForElement('css', "[name='form_build_id']:not([value='$id'])");
|
Chris@16
|
80 }
|
Chris@16
|
81
|
Chris@16
|
82 }
|