115a8793d61f3e50148134357f83f2b7cdfc72aa
[yaffs-website] / web / modules / contrib / inline_entity_form / src / Tests / ComplexSimpleWidgetTest.php
1 <?php
2
3 namespace Drupal\inline_entity_form\Tests;
4
5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
6
7 /**
8  * IEF complex field widget containing an IEF simple field widget tests.
9  *
10  * @group inline_entity_form
11  */
12 class ComplexSimpleWidgetTest extends InlineEntityFormTestBase {
13
14   /**
15    * Modules to enable.
16    *
17    * @var array
18    */
19   public static $modules = [
20     'inline_entity_form_test',
21     'field',
22     'field_ui',
23   ];
24
25   protected function setUp() {
26     parent::setUp();
27
28     $this->user = $this->createUser([
29       'create ief_complex_simple content',
30       'create ief_simple_single content',
31       'create ief_test_custom content',
32       'view own unpublished content',
33     ]);
34     $this->drupalLogin($this->user);
35     $this->fieldConfigStorage = $this->container->get('entity_type.manager')->getStorage('field_config');
36   }
37
38   /**
39    * Test a Simple IEF widget inside of Complex IEF widget.
40    */
41   public function testSimpleInComplex() {
42     $outer_required_options = [
43       TRUE,
44       FALSE,
45     ];
46     $cardinality_options = [
47       1 => 1,
48       2 => 2,
49       FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED => 3,
50     ];
51     /** @var \Drupal\field\FieldStorageConfigInterface $field_storage */
52     $field_storage = $this->fieldStorageConfigStorage->load('node.ief_complex_outer');
53     /** @var \Drupal\Core\Field\FieldConfigInterface $field_config */
54     $field_config = $this->fieldConfigStorage->load('node.ief_complex_simple.ief_complex_outer');
55     foreach ($outer_required_options as $outer_required_option) {
56       $edit = [];
57       $field_config->setRequired($outer_required_option);
58       $field_config->save();
59       foreach ($cardinality_options as $cardinality => $limit) {
60         $field_storage->setCardinality($cardinality);
61         $field_storage->save();
62
63         $this->drupalGet('node/add/ief_complex_simple');
64         $outer_title_field = 'ief_complex_outer[form][inline_entity_form][title][0][value]';
65         $inner_title_field = 'ief_complex_outer[form][inline_entity_form][single][0][inline_entity_form][title][0][value]';
66         if (!$outer_required_option) {
67           $this->assertText('Complex Outer', 'Complex Inline entity field widget title found.');
68           // Field should not be available before ajax submit.
69           $this->assertNoFieldByName($outer_title_field, NULL);
70           $this->drupalPostAjaxForm(NULL, [], $this->getButtonName('//input[@type="submit" and @value="Add new node" and @data-drupal-selector="edit-ief-complex-outer-actions-ief-add"]'));
71         }
72         $this->assertFieldByName($outer_title_field, NULL);
73         // Simple widget is required so should always show up. No need for add submit.
74         $this->assertFieldByName($inner_title_field, NULL);
75
76         $edit[$outer_title_field] = $outer_title = $this->randomMachineName(8);
77         $edit[$inner_title_field] = $inner_title = $this->randomMachineName(8);
78         $create_outer_button_selector = '//input[@type="submit" and @value="Create node" and @data-drupal-selector="edit-ief-complex-outer-form-inline-entity-form-actions-ief-add-save"]';
79         $this->drupalPostAjaxForm(NULL, $edit, $this->getButtonName($create_outer_button_selector));
80         // After ajax submit the ief title fields should be gone.
81         $this->assertNoFieldByName($outer_title_field, NULL);
82         $this->assertNoFieldByName($inner_title_field, NULL);
83         $this->assertEqual('', $this->getButtonName($create_outer_button_selector), 'Create node button not found after Ajax submit.');
84
85         // The nodes should not actually be saved at this point
86         $this->assertNoNodeByTitle($outer_title, 'Outer node was not created when widget submitted.');
87         $this->assertNoNodeByTitle($inner_title, 'Inner node was not created when widget submitted.');
88
89         $host_title = $this->randomMachineName(8);
90         $edit = ['title[0][value]' => $host_title];
91         $this->drupalPostForm(NULL, $edit, t('Save'));
92         $this->assertText("$host_title has been created.");
93         $this->assertText($outer_title);
94
95         // Check the nodes were created correctly.
96         $host_node = $this->drupalGetNodeByTitle($host_title);
97         if ($this->assertNotNull($host_node->ief_complex_outer->entity, 'Outer node was created.')) {
98           $outer_node = $host_node->ief_complex_outer->entity;
99           $this->assertEqual($outer_title, $outer_node->label(), "Outer node's title looks correct.");
100           $this->assertEqual('ief_simple_single', $outer_node->bundle(), "Outer node's type looks correct.");
101           if ($this->assertNotNull($outer_node->single->entity, 'Inner node was created')) {
102             $inner_node = $outer_node->single->entity;
103             $this->assertEqual($inner_title, $inner_node->label(), "Inner node's title looks correct.");
104             $this->assertEqual('ief_test_custom', $inner_node->bundle(), "Inner node's type looks correct.");
105           }
106         }
107       }
108     }
109   }
110
111 }