Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
1 | <?php |
||
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() { |
||
135 | |||
136 | /** |
||
137 | * Tests entity embed functionality. |
||
138 | */ |
||
139 | public function testEntityEmbedFunctionality() { |
||
149 | |||
150 | /** |
||
151 | * Retrieves an embed dialog based on given parameters. |
||
152 | * |
||
153 | * @param string $filter_format_id |
||
154 | * ID of the filter format. |
||
155 | * @param string $embed_button_id |
||
156 | * ID of the embed button. |
||
157 | * |
||
158 | * @return string |
||
159 | * The retrieved HTML string. |
||
160 | */ |
||
161 | public function getEmbedDialog($filter_format_id = NULL, $embed_button_id = NULL) { |
||
171 | |||
172 | } |
||
173 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.