Completed
Push — 8.x-1.x ( 657e32...c248cd )
by Janez
02:38
created

testEntityEmbedFunctionality()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 1
eloc 6
c 1
b 1
f 0
nc 1
nop 0
dl 0
loc 10
rs 9.4285
1
<?php
2
3
namespace Drupal\entity_embed\Tests;
4
5
use Drupal\editor\Entity\Editor;
6
7
/**
8
 * Tests the entity_embed dialog controller and route.
9
 *
10
 * @group entity_embed
11
 */
12
class EntityEmbedDialogTest extends EntityEmbedTestBase {
13
14
  /**
15
   * Modules to enable.
16
   *
17
   * @var array
18
   */
19
  public static $modules = ['image'];
20
21
  /**
22
   * Tests the entity embed dialog.
23
   */
24
  public function testEntityEmbedDialog() {
25
    // Ensure that the route is not accessible without specifying all the
26
    // parameters.
27
    $this->getEmbedDialog();
28
    $this->assertResponse(404, 'Embed dialog is not accessible without specifying filter format and embed button.');
29
    $this->getEmbedDialog('custom_format');
30
    $this->assertResponse(404, 'Embed dialog is not accessible without specifying embed button.');
31
32
    // Ensure that the route is not accessible with an invalid embed button.
33
    $this->getEmbedDialog('custom_format', 'invalid_button');
34
    $this->assertResponse(404, 'Embed dialog is not accessible without specifying filter format and embed button.');
35
36
    // Ensure that the route is not accessible with text format without the
37
    // button configured.
38
    $this->getEmbedDialog('plain_text', 'node');
39
    $this->assertResponse(404, 'Embed dialog is not accessible with a filter that does not have an editor configuration.');
40
41
    // Add an empty configuration for the plain_text editor configuration.
42
    $editor = Editor::create([
43
      'format' => 'plain_text',
44
      'editor' => 'ckeditor',
45
    ]);
46
    $editor->save();
47
    $this->getEmbedDialog('plain_text', 'node');
48
    $this->assertResponse(403, 'Embed dialog is not accessible with a filter that does not have the embed button assigned to it.');
49
50
    // Ensure that the route is accessible with a valid embed button.
51
    // 'Node' embed button is provided by default by the module and hence the
52
    // request must be successful.
53
    $this->getEmbedDialog('custom_format', 'node');
54
    $this->assertResponse(200, 'Embed dialog is accessible with correct filter format and embed button.');
55
56
    // Ensure form structure of the 'select' step and submit form.
57
    $this->assertFieldByName('entity_id', '', 'Entity ID/UUID field is present.');
58
59
    // $edit = ['attributes[data-entity-id]' => $this->node->id()];
60
    // $this->drupalPostAjaxForm(NULL, $edit, 'op');
61
    // Ensure form structure of the 'embed' step and submit form.
62
    // $this->assertFieldByName('attributes[data-entity-embed-display]', 'Entity Embed Display plugin field is present.');
63
  }
64
65
  /**
66
   * Tests the entity embed button markup.
67
   */
68
  public function testEntityEmbedButtonMarkup() {
69
    // Ensure that the route is not accessible with text format without the
70
    // button configured.
71
    $this->getEmbedDialog('plain_text', 'node');
72
    $this->assertResponse(404, 'Embed dialog is not accessible with a filter that does not have an editor configuration.');
73
74
    // Add an empty configuration for the plain_text editor configuration.
75
    $editor = Editor::create([
76
      'format' => 'plain_text',
77
      'editor' => 'ckeditor',
78
    ]);
79
    $editor->save();
80
    $this->getEmbedDialog('plain_text', 'node');
81
    $this->assertResponse(403, 'Embed dialog is not accessible with a filter that does not have the embed button assigned to it.');
82
83
    // Ensure that the route is accessible with a valid embed button.
84
    // 'Node' embed button is provided by default by the module and hence the
85
    // request must be successful.
86
    $this->getEmbedDialog('custom_format', 'node');
87
    $this->assertResponse(200, 'Embed dialog is accessible with correct filter format and embed button.');
88
89
    // Ensure form structure of the 'select' step and submit form.
90
    $this->assertFieldByName('entity_id', '', 'Entity ID/UUID field is present.');
91
92
    // Check that 'Next' is a primary button.
93
    $this->assertFieldByXPath('//input[contains(@class, "button--primary")]', 'Next', 'Next is a primary button');
94
95
    $title =  $this->node->getTitle() . ' (' . $this->node->id() . ')';
96
    $edit = ['entity_id' => $title];
97
    $this->drupalPostAjaxForm(NULL, $edit, 'op');
98
    /*$this->drupalPostForm(NULL, $edit, 'Next');
99
    // Ensure form structure of the 'embed' step and submit form.
100
    $this->assertFieldByName('attributes[data-entity-embed-display]', 'Entity Embed Display plugin field is present.');
101
102
    // Check that 'Embed' is a primary button.
103
    $this->assertFieldByXPath('//input[contains(@class, "button--primary")]', 'Embed', 'Embed is a primary button');*/
104
  }
105
106
  /**
107
   * Tests entity embed functionality.
108
   */
109
  public function testEntityEmbedFunctionality() {
110
    $edit = [
111
      'entity_id' => $this->node->getTitle() . ' (' . $this->node->id() . ')',
112
    ];
113
    $this->getEmbedDialog('custom_format', 'node');
114
    $this->drupalPostForm(NULL, $edit, t('Next'));
115
    // Tests that the embed dialog doesn't trow a fatal in
116
    // ImageFieldFormatter::isValidImage()
117
    $this->assertResponse(200);
118
  }
119
120
  /**
121
   * Retrieves an embed dialog based on given parameters.
122
   *
123
   * @param string $filter_format_id
124
   *   ID of the filter format.
125
   * @param string $embed_button_id
126
   *   ID of the embed button.
127
   *
128
   * @return string
129
   *   The retrieved HTML string.
130
   */
131
  public function getEmbedDialog($filter_format_id = NULL, $embed_button_id = NULL) {
132
    $url = 'entity-embed/dialog';
133
    if (!empty($filter_format_id)) {
134
      $url .= '/' . $filter_format_id;
135
      if (!empty($embed_button_id)) {
136
        $url .= '/' . $embed_button_id;
137
      }
138
    }
139
    return $this->drupalGet($url);
140
  }
141
142
}
143