ComponentValidationTest.php
4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
<?php
declare(strict_types=1);
namespace Drupal\Tests\drupal_cms_page\Functional;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\FunctionalTests\Core\Recipe\RecipeTestTrait;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\drupal_cms_content_type_base\ContentModelTestTrait;
/**
* @group drupal_cms_page
*/
class ComponentValidationTest extends BrowserTestBase {
use ContentModelTestTrait;
use RecipeTestTrait;
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
public function test(): void {
$dir = realpath(__DIR__ . '/../../..');
// The recipe should apply cleanly.
$this->applyRecipe($dir);
// Apply it again to prove that it is idempotent.
$this->applyRecipe($dir);
/** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */
$display_repository = $this->container->get(EntityDisplayRepositoryInterface::class);
$form_display = $display_repository->getFormDisplay('node', 'page');
$this->assertFalse($form_display->isNew());
$this->assertNull($form_display->getComponent('url_redirects'));
$this->assertFieldsInOrder($form_display, [
'title',
'field_featured_image',
'field_description',
'field_content',
'field_tags',
]);
$default_display = $display_repository->getViewDisplay('node', 'page');
$this->assertNull($default_display->getComponent('links'));
$this->assertFieldsInOrder($default_display, [
'field_featured_image',
'content_moderation_control',
'field_content',
'field_tags',
]);
$this->assertSharedFieldsInSameOrder($form_display, $default_display);
$card_display = $display_repository->getViewDisplay('node', 'page', 'card');
$this->assertNull($card_display->getComponent('links'));
$this->assertFieldsInOrder($card_display, [
'field_featured_image',
'field_description',
]);
$featured_image = $card_display->getComponent('field_featured_image');
$this->assertSame('entity_reference_entity_view', $featured_image['type']);
$teaser_display = $display_repository->getViewDisplay('node', 'page', 'teaser');
$this->assertNull($teaser_display->getComponent('links'));
$this->assertFieldsInOrder($teaser_display, [
'field_featured_image',
'field_description',
]);
$this->assertContentModel([
'page' => [
'title' => [
'type' => 'string',
'cardinality' => 1,
'required' => TRUE,
'translatable' => TRUE,
'label' => 'Title',
'input type' => 'text',
'help text' => '',
],
'field_description' => [
'type' => 'string_long',
'cardinality' => 1,
'required' => TRUE,
'translatable' => TRUE,
'label' => 'Description',
'input type' => 'textarea',
'help text' => 'Describe the page content. This appears as the description in search engine results.',
],
'field_featured_image' => [
'type' => 'entity_reference',
'cardinality' => 1,
'required' => FALSE,
'translatable' => FALSE,
'label' => 'Featured image',
'input type' => 'media library',
'help text' => 'Include an image. This appears as the image in search engine results.',
],
'field_content' => [
'type' => 'text_long',
'cardinality' => 1,
'required' => FALSE,
'translatable' => TRUE,
'label' => 'Content',
'input type' => 'wysiwyg',
'help text' => 'The content of this page.',
],
'field_tags' => [
'type' => 'entity_reference',
'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
'required' => FALSE,
'translatable' => FALSE,
'label' => 'Tags',
'input type' => 'tagify',
'help text' => 'Include tags for relevant topics.',
],
],
]);
}
}