Updated Drupal to 8.6. This goes with the following updates because it's possible...
[yaffs-website] / web / core / modules / field / tests / src / FunctionalJavascript / Number / NumberFieldTest.php
diff --git a/web/core/modules/field/tests/src/FunctionalJavascript/Number/NumberFieldTest.php b/web/core/modules/field/tests/src/FunctionalJavascript/Number/NumberFieldTest.php
new file mode 100644 (file)
index 0000000..0248127
--- /dev/null
@@ -0,0 +1,183 @@
+<?php
+
+namespace Drupal\Tests\field\FunctionalJavascript\Number;
+
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
+use Drupal\node\Entity\Node;
+
+/**
+ * Tests the numeric field widget.
+ *
+ * @group field
+ */
+class NumberFieldTest extends WebDriverTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['node', 'entity_test', 'field_ui'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'view test entity',
+      'administer entity_test content',
+      'administer content types',
+      'administer node fields',
+      'administer node display',
+      'bypass node access',
+      'administer entity_test fields',
+    ]));
+  }
+
+  /**
+   * Test default formatter behavior.
+   */
+  public function testNumberFormatter() {
+    $type = mb_strtolower($this->randomMachineName());
+    $float_field = mb_strtolower($this->randomMachineName());
+    $integer_field = mb_strtolower($this->randomMachineName());
+    $thousand_separators = ['', '.', ',', ' ', chr(8201), "'"];
+    $decimal_separators = ['.', ','];
+    $prefix = $this->randomMachineName();
+    $suffix = $this->randomMachineName();
+    $random_float = rand(0, pow(10, 6));
+    $random_integer = rand(0, pow(10, 6));
+    $assert_session = $this->assertSession();
+
+    // Create a content type containing float and integer fields.
+    $this->drupalCreateContentType(['type' => $type]);
+
+    FieldStorageConfig::create([
+      'field_name' => $float_field,
+      'entity_type' => 'node',
+      'type' => 'float',
+    ])->save();
+
+    FieldStorageConfig::create([
+      'field_name' => $integer_field,
+      'entity_type' => 'node',
+      'type' => 'integer',
+    ])->save();
+
+    FieldConfig::create([
+      'field_name' => $float_field,
+      'entity_type' => 'node',
+      'bundle' => $type,
+      'settings' => [
+        'prefix' => $prefix,
+        'suffix' => $suffix,
+      ],
+    ])->save();
+
+    FieldConfig::create([
+      'field_name' => $integer_field,
+      'entity_type' => 'node',
+      'bundle' => $type,
+      'settings' => [
+        'prefix' => $prefix,
+        'suffix' => $suffix,
+      ],
+    ])->save();
+
+    entity_get_form_display('node', $type, 'default')
+      ->setComponent($float_field, [
+        'type' => 'number',
+        'settings' => [
+          'placeholder' => '0.00',
+        ],
+      ])
+      ->setComponent($integer_field, [
+        'type' => 'number',
+        'settings' => [
+          'placeholder' => '0.00',
+        ],
+      ])
+      ->save();
+
+    entity_get_display('node', $type, 'default')
+      ->setComponent($float_field, [
+        'type' => 'number_decimal',
+      ])
+      ->setComponent($integer_field, [
+        'type' => 'number_unformatted',
+      ])
+      ->save();
+
+    // Create a node to test formatters.
+    $node = Node::create([
+      'type' => $type,
+      'title' => $this->randomMachineName(),
+      $float_field => ['value' => $random_float],
+      $integer_field => ['value' => $random_integer],
+    ]);
+    $node->save();
+
+    // Go to manage display page.
+    $this->drupalGet("admin/structure/types/manage/$type/display");
+
+    // Configure number_decimal formatter for the 'float' field type.
+    $thousand_separator = $thousand_separators[array_rand($thousand_separators)];
+    $decimal_separator = $decimal_separators[array_rand($decimal_separators)];
+    $scale = rand(0, 10);
+
+    $page = $this->getSession()->getPage();
+    $page->pressButton("${float_field}_settings_edit");
+    $assert_session->waitForElement('css', '.ajax-new-content');
+    $edit = [
+      "fields[${float_field}][settings_edit_form][settings][prefix_suffix]" => TRUE,
+      "fields[${float_field}][settings_edit_form][settings][scale]" => $scale,
+      "fields[${float_field}][settings_edit_form][settings][decimal_separator]" => $decimal_separator,
+      "fields[${float_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator,
+    ];
+    foreach ($edit as $name => $value) {
+      $page->fillField($name, $value);
+    }
+    $page->pressButton("${float_field}_plugin_settings_update");
+    $assert_session->waitForElement('css', '.field-plugin-summary-cell > .ajax-new-content');
+    $this->drupalPostForm(NULL, [], t('Save'));
+
+    // Check number_decimal and number_unformatted formatters behavior.
+    $this->drupalGet('node/' . $node->id());
+    $float_formatted = number_format($random_float, $scale, $decimal_separator, $thousand_separator);
+    $this->assertRaw("$prefix$float_formatted$suffix", 'Prefix and suffix added');
+    $this->assertRaw((string) $random_integer);
+
+    // Configure the number_decimal formatter.
+    entity_get_display('node', $type, 'default')
+      ->setComponent($integer_field, [
+        'type' => 'number_integer',
+      ])
+      ->save();
+    $this->drupalGet("admin/structure/types/manage/$type/display");
+
+    $thousand_separator = $thousand_separators[array_rand($thousand_separators)];
+
+    $page = $this->getSession()->getPage();
+    $page->pressButton("${integer_field}_settings_edit");
+    $assert_session->waitForElement('css', '.ajax-new-content');
+    $edit = [
+      "fields[${integer_field}][settings_edit_form][settings][prefix_suffix]" => FALSE,
+      "fields[${integer_field}][settings_edit_form][settings][thousand_separator]" => $thousand_separator,
+    ];
+    foreach ($edit as $name => $value) {
+      $page->fillField($name, $value);
+    }
+    $page->pressButton("${integer_field}_plugin_settings_update");
+    $assert_session->waitForElement('css', '.field-plugin-summary-cell > .ajax-new-content');
+    $this->drupalPostForm(NULL, [], t('Save'));
+
+    // Check number_integer formatter behavior.
+    $this->drupalGet('node/' . $node->id());
+
+    $integer_formatted = number_format($random_integer, 0, '', $thousand_separator);
+    $this->assertRaw($integer_formatted, 'Random integer formatted');
+  }
+
+}