Skip to content
Snippets Groups Projects
Commit b6c9c890 authored by Mikael Meulle's avatar Mikael Meulle
Browse files

Merge branch '3467652-2.0.0-beta2-views-tests' into '2.0.x'

Views tests

See merge request !196
parents 0e3d171c 20167a05
No related branches found
No related tags found
No related merge requests found
Pipeline #279645 passed with warnings
Showing
with 1203 additions and 12 deletions
...@@ -28,6 +28,18 @@ class LayoutBuilderFieldFormatterRenderTest extends UiPatternsFunctionalTestBase ...@@ -28,6 +28,18 @@ class LayoutBuilderFieldFormatterRenderTest extends UiPatternsFunctionalTestBase
'block', 'block',
]; ];
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
if ($this->user) {
$this->drupalCreateRole(['configure any layout'], 'custom_role');
$this->user->addRole('custom_role');
$this->user->save();
}
}
/** /**
* Test the form and the existence of the. * Test the form and the existence of the.
*/ */
......
<?php
namespace Drupal\Tests\ui_patterns_views\Functional;
use Drupal\Tests\ui_patterns\Functional\UiPatternsFunctionalTestBase;
use Drupal\Tests\ui_patterns\Traits\TestDataTrait;
/**
* Test pattern preview rendering.
*
* @group ui_patterns_layouts
*/
class ViewsRenderTest extends UiPatternsFunctionalTestBase {
use TestDataTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'ui_patterns',
'ui_patterns_test',
'ui_patterns_field_formatters',
'ui_patterns_views',
'views',
'views_ui',
'block',
];
/**
* Test to see if UIP plugins appear.
*/
public function testPlugins(): void {
$this->createTestContentContentType();
$assert_session = $this->assertSession();
$view_test_data = self::loadTestDataFixture(__DIR__ . "/../fixtures/TestDataSet.yml");
// ---
// View Style
// ---
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.yml');
$this->importConfigFixture(
'views.view.test',
$config_import
);
// Check that the Views style plugin appears.
$this->drupalGet('admin/structure/views/nojs/display/test/default/style');
$assert_session->elementTextEquals("css", ".form-item label", "Component (UI Patterns)");
// Configure the style plugin.
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.style.yml');
$ui_patterns_config = &$config_import['display']['page_1']['display_options']["style"]["options"]["ui_patterns"]['ui_patterns'];
$tests = $view_test_data->getTestSets();
foreach ($tests as $test_set_name => $test_set) {
if (!str_starts_with($test_set_name, 'style') || !isset($test_set["assertSession"])) {
continue;
}
$node = $this->createTestContentNode('page', $test_set['entity'] ?? []);
$ui_patterns_config = $this->buildUiPatternsConfig($test_set);
$this->importConfigFixture(
'views.view.test',
$config_import
);
\Drupal::service('router.builder')->rebuild();
$this->drupalGet('test');
$this->assertSessionObject($test_set["assertSession"]);
$node->delete();
}
// ---
// View Rows
// ---
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.yml');
$this->importConfigFixture(
'views.view.test',
$config_import
);
// Check that the View rows style plugin appears.
$this->drupalGet('admin/structure/views/nojs/display/test/default/row');
$assert_session->elementTextEquals("css", ".form-item label", "Component (UI Patterns)");
// Configure the row style plugin.
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.row_style.yml');
$ui_patterns_config = &$config_import['display']['page_1']['display_options']["row"]["options"]["ui_patterns"];
$tests = $view_test_data->getTestSets();
foreach ($tests as $test_set_name => $test_set) {
if (!str_starts_with($test_set_name, 'row_style') || !isset($test_set["assertSession"])) {
continue;
}
$node = $this->createTestContentNode('page', $test_set['entity'] ?? []);
$ui_patterns_config = $this->buildUiPatternsConfig($test_set);
$this->importConfigFixture(
'views.view.test',
$config_import
);
\Drupal::service('router.builder')->rebuild();
$this->drupalGet('test');
$this->assertSessionObject($test_set["assertSession"]);
$node->delete();
}
// ---
// View field
// ---
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.yml');
$this->importConfigFixture(
'views.view.test',
$config_import
);
// Check that field formatter plugin appears.
$this->drupalGet('admin/structure/views/nojs/handler/test/default/field/title');
$text_field_formatter_plugin = "Component per item (UI Patterns)";
$key_field_formatter_plugin = "ui_patterns_component_per_item";
$page = $this->getSession()->getPage();
$nodes = $page->findAll("css", "select[name='options[type]'] option");
$textFound = FALSE;
$valueFound = FALSE;
foreach ($nodes as $node) {
$text = $node->getText();
if ($text === $text_field_formatter_plugin) {
$textFound = TRUE;
}
if ($node->getAttribute("value") === $key_field_formatter_plugin) {
$valueFound = TRUE;
}
}
if (!$textFound || !$valueFound) {
$this->fail(sprintf("Option not found for field formatter: %s / %s", $key_field_formatter_plugin, $text_field_formatter_plugin));
}
// Configure a field, with field formatter plugin.
$config_import = $this->loadConfigFixture(__DIR__ . '/../fixtures/views.view.test.field.yml');
$ui_patterns_config = &$config_import['display']['page_1']['display_options']["fields"]["title"]["settings"]["ui_patterns"];
$tests = $view_test_data->getTestSets();
foreach ($tests as $test_set_name => $test_set) {
if (!str_starts_with($test_set_name, 'field') || !isset($test_set["assertSession"])) {
continue;
}
$node = $this->createTestContentNode('page', $test_set['entity'] ?? []);
$ui_patterns_config = $this->buildUiPatternsConfig($test_set);
$this->importConfigFixture(
'views.view.test',
$config_import
);
\Drupal::service('router.builder')->rebuild();
$this->drupalGet('test');
$this->assertSessionObject($test_set["assertSession"]);
$node->delete();
}
}
}
---
style_1:
component:
component_id: ui_patterns_test:test-wrapper-component
variant_id: null
slots:
wrapper:
sources:
- source:
ui_patterns_views_field: ''
source_id: view_rows
entity:
title:
value: 'title_entity_1'
assertSession:
elementExists:
- ['css', '#ui-patterns-wrapper']
- ['css', '#ui-patterns-wrapper-wrapper']
pageTextContains:
- ['title_entity_1']
style_2:
component:
component_id: ui_patterns_test:test-wrapper-component
variant_id: null
slots:
wrapper:
sources:
- source:
ui_patterns_views_field: 'title'
source_id: view_rows
entity:
title:
value: 'title_entity_2'
assertSession:
elementExists:
- ['css', '#ui-patterns-wrapper']
- ['css', '#ui-patterns-wrapper-wrapper']
pageTextContains:
- ['title_entity_2']
style_3:
component:
component_id: ui_patterns_test:test-component
props:
string:
source_id: view_title
assertSession:
elementTextEquals:
- ['css', '#ui-patterns-props-string', 'custom view title']
row_style_1:
component:
component_id: ui_patterns_test:test-wrapper-component
variant_id: null
slots:
wrapper:
sources:
- source:
ui_patterns_views_field: 'title'
source_id: view_field
entity:
title:
value: 'title_entity_3'
assertSession:
elementExists:
- ['css', '#ui-patterns-wrapper']
- ['css', '#ui-patterns-wrapper-wrapper']
pageTextContains:
- ['title_entity_3']
row_style_2:
component:
component_id: ui_patterns_test:test-component
props:
string:
source_id: view_title
assertSession:
elementTextEquals:
- ['css', '#ui-patterns-props-string', 'custom view title']
field_1:
component:
component_id: ui_patterns_test:test-wrapper-component
variant_id: null
slots:
wrapper:
sources:
- source_id: 'field_property:node:title:value'
entity:
title:
value: 'title_entity_4'
assertSession:
elementExists:
- ['css', '#ui-patterns-wrapper']
- ['css', '#ui-patterns-wrapper-wrapper']
elementTextEquals:
- [ 'css', '#ui-patterns-wrapper-wrapper', 'title_entity_4' ]
uuid: afbf5442-7d05-4ee8-a3cd-a84a1f8370fa
langcode: en
status: true
dependencies:
config:
- node.type.page
module:
- node
- ui_patterns
- ui_patterns_field_formatters
id: test
label: test
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
title: ''
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: false
ellipsis: false
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: false
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next: ››
previous: ‹‹
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: none
options: { }
cache:
type: tag
options: { }
empty: { }
sorts: { }
arguments: { }
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
entity_type: node
entity_field: type
plugin_id: bundle
value:
page: page
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
row:
type: fields
options:
default_field_elements: true
inline: { }
separator: ''
hide_empty: false
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 1
display_options:
title: 'custom view title'
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: false
ellipsis: false
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: ui_patterns_component_per_item
settings:
ui_patterns: {}
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
defaults:
title: false
style: true
row: true
fields: false
display_extenders: { }
path: test
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
uuid: afbf5442-7d05-4ee8-a3cd-a84a1f8370fa
langcode: en
status: true
dependencies:
config:
- node.type.page
module:
- node
- ui_patterns
- ui_patterns_views
id: test
label: test
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: false
ellipsis: false
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: false
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next: ››
previous: ‹‹
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: none
options: { }
cache:
type: tag
options: { }
empty: { }
sorts: { }
arguments: { }
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
entity_type: node
entity_field: type
plugin_id: bundle
value:
page: page
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
row:
type: fields
options:
default_field_elements: true
inline: { }
separator: ''
hide_empty: false
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 1
display_options:
title: "custom view title"
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
row:
type: ui_patterns
options:
hide_empty: 0
ui_patterns: {}
defaults:
title: false
style: false
row: false
display_extenders: { }
path: test
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
uuid: afbf5442-7d05-4ee8-a3cd-a84a1f8370fa
langcode: en
status: true
dependencies:
config:
- node.type.page
module:
- node
- ui_patterns
- ui_patterns_views
id: test
label: test
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: false
ellipsis: false
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: false
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next: ››
previous: ‹‹
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: none
options: { }
cache:
type: tag
options: { }
empty: { }
sorts: { }
arguments: { }
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
entity_type: node
entity_field: type
plugin_id: bundle
value:
page: page
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
row:
type: fields
options:
default_field_elements: true
inline: { }
separator: ''
hide_empty: false
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 1
display_options:
title: "custom view title"
style:
type: ui_patterns
options:
ui_patterns:
ui_patterns: {}
row:
type: fields
options:
default_field_elements: true
inline: { }
separator: ''
hide_empty: false
defaults:
title: false
style: false
row: false
display_extenders: { }
path: test
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
uuid: afbf5442-7d05-4ee8-a3cd-a84a1f8370fa
langcode: en
status: true
dependencies:
config:
- node.type.page
module:
- node
id: test
label: test
module: views
description: ''
tag: ''
base_table: node_field_data
base_field: nid
display:
default:
id: default
display_title: Default
display_plugin: default
position: 0
display_options:
fields:
title:
id: title
table: node_field_data
field: title
relationship: none
group_type: group
admin_label: ''
entity_type: node
entity_field: title
plugin_id: field
label: ''
exclude: false
alter:
alter_text: false
text: ''
make_link: false
path: ''
absolute: false
external: false
replace_spaces: false
path_case: none
trim_whitespace: false
alt: ''
rel: ''
link_class: ''
prefix: ''
suffix: ''
target: ''
nl2br: false
max_length: 0
word_boundary: false
ellipsis: false
more_link: false
more_link_text: ''
more_link_path: ''
strip_tags: false
trim: false
preserve_tags: ''
html: false
element_type: ''
element_class: ''
element_label_type: ''
element_label_class: ''
element_label_colon: false
element_wrapper_type: ''
element_wrapper_class: ''
element_default_classes: true
empty: ''
hide_empty: false
empty_zero: false
hide_alter_empty: true
click_sort_column: value
type: string
settings:
link_to_entity: false
group_column: value
group_columns: { }
group_rows: true
delta_limit: 0
delta_offset: 0
delta_reversed: false
delta_first_last: false
multi_type: separator
separator: ', '
field_api_classes: false
pager:
type: mini
options:
offset: 0
pagination_heading_level: h4
items_per_page: 10
total_pages: null
id: 0
tags:
next: ››
previous: ‹‹
expose:
items_per_page: false
items_per_page_label: 'Items per page'
items_per_page_options: '5, 10, 25, 50'
items_per_page_options_all: false
items_per_page_options_all_label: '- All -'
offset: false
offset_label: Offset
exposed_form:
type: basic
options:
submit_button: Apply
reset_button: false
reset_button_label: Reset
exposed_sorts_label: 'Sort by'
expose_sort_order: true
sort_asc_label: Asc
sort_desc_label: Desc
access:
type: none
options: { }
cache:
type: tag
options: { }
empty: { }
sorts: { }
arguments: { }
filters:
status:
id: status
table: node_field_data
field: status
entity_type: node
entity_field: status
plugin_id: boolean
value: '1'
group: 1
expose:
operator: ''
type:
id: type
table: node_field_data
field: type
entity_type: node
entity_field: type
plugin_id: bundle
value:
page: page
style:
type: default
options:
grouping: { }
row_class: ''
default_row_class: true
row:
type: fields
options:
default_field_elements: true
inline: { }
separator: ''
hide_empty: false
query:
type: views_query
options:
query_comment: ''
disable_sql_rewrite: false
distinct: false
replica: false
query_tags: { }
relationships: { }
header: { }
footer: { }
display_extenders: { }
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
page_1:
id: page_1
display_title: Page
display_plugin: page
position: 1
display_options:
defaults:
style: true
row: true
display_extenders: { }
path: test
cache_metadata:
max-age: -1
contexts:
- 'languages:language_content'
- 'languages:language_interface'
- url.query_args
- 'user.node_grants:view'
tags: { }
...@@ -34,6 +34,13 @@ abstract class UiPatternsFunctionalTestBase extends BrowserTestBase { ...@@ -34,6 +34,13 @@ abstract class UiPatternsFunctionalTestBase extends BrowserTestBase {
'field_ui', 'field_ui',
]; ];
/**
* The user.
*
* @var \Drupal\user\Entity\User|false
*/
protected mixed $user = FALSE;
/** /**
* Config is initialized. * Config is initialized.
*/ */
...@@ -44,13 +51,11 @@ abstract class UiPatternsFunctionalTestBase extends BrowserTestBase { ...@@ -44,13 +51,11 @@ abstract class UiPatternsFunctionalTestBase extends BrowserTestBase {
*/ */
protected function setUp(): void { protected function setUp(): void {
parent::setUp(); parent::setUp();
$this->user = $this->drupalCreateUser([
$user = $this->drupalCreateUser([
'configure any layout',
'administer node display', 'administer node display',
], NULL, TRUE); ], NULL, TRUE);
if ($user) { if ($this->user) {
$this->drupalLogin($user); $this->drupalLogin($this->user);
} }
} }
......
...@@ -138,7 +138,7 @@ trait RunSourcePluginTestTrait { ...@@ -138,7 +138,7 @@ trait RunSourcePluginTestTrait {
foreach ($component_configuration[$prop_or_slot] as $prop_or_slot_id => $prop_or_slot_configuration) { foreach ($component_configuration[$prop_or_slot] as $prop_or_slot_id => $prop_or_slot_configuration) {
if (isset($expected_outputs[$prop_or_slot][$prop_or_slot_id])) { if (isset($expected_outputs[$prop_or_slot][$prop_or_slot_id])) {
// For slots, there is a table of sources for each slot. // For slots, there is a table of sources for each slot.
$source_to_tests = ($prop_or_slot === "props") ? [$prop_or_slot_configuration] : $prop_or_slot_configuration; $source_to_tests = ($prop_or_slot === "props") ? [$prop_or_slot_configuration] : $prop_or_slot_configuration["sources"];
$expected_outputs_here = ($prop_or_slot === "props") ? [$expected_outputs[$prop_or_slot][$prop_or_slot_id]] : $expected_outputs[$prop_or_slot][$prop_or_slot_id]; $expected_outputs_here = ($prop_or_slot === "props") ? [$expected_outputs[$prop_or_slot][$prop_or_slot_id]] : $expected_outputs[$prop_or_slot][$prop_or_slot_id];
foreach ($source_to_tests as $index => $source_to_test) { foreach ($source_to_tests as $index => $source_to_test) {
if (!isset($source_to_test["source_id"])) { if (!isset($source_to_test["source_id"])) {
......
...@@ -11,6 +11,33 @@ use Drupal\Component\Serialization\Yaml; ...@@ -11,6 +11,33 @@ use Drupal\Component\Serialization\Yaml;
*/ */
trait TestDataTrait { trait TestDataTrait {
/**
* Assert session object with the configuration from the test set.
*
* @param array $assert_session_expectations
* The expected actions to run on the session object.
*/
protected function assertSessionObject(array $assert_session_expectations): void {
if (method_exists($this, 'assertSession')) {
$assert_session = $this->assertSession();
foreach ($assert_session_expectations as $method => $list_of_method_arguments) {
if (!method_exists($assert_session, $method)) {
throw new \RuntimeException(sprintf('Method "%s" not found in assert session object.', $method));
}
foreach ($list_of_method_arguments as $method_arguments) {
if (is_array($method_arguments)) {
// @phpstan-ignore-next-line
call_user_func_array([$assert_session, $method], $method_arguments);
}
else {
// @phpstan-ignore-next-line
call_user_func_array([$assert_session, $method], [$method_arguments]);
}
}
}
}
}
/** /**
* Assert an expected output with the configuration from the test set. * Assert an expected output with the configuration from the test set.
* *
......
...@@ -17,10 +17,11 @@ textfield_slot: ...@@ -17,10 +17,11 @@ textfield_slot:
component_id: ui_patterns_test:test-component component_id: ui_patterns_test:test-component
slots: slots:
slot: slot:
- sources:
source_id: textfield -
source: source_id: textfield
value: 'test input' source:
value: 'test input'
entity: {} entity: {}
output: output:
slots: slots:
...@@ -46,8 +47,9 @@ field_property_default: ...@@ -46,8 +47,9 @@ field_property_default:
component_id: ui_patterns_test:test-component component_id: ui_patterns_test:test-component
slots: slots:
slot: slot:
- sources:
source_id: field_property:node:field_text_1:value -
source_id: field_property:node:field_text_1:value
entity: entity:
field_text_1: field_text_1:
value: 'value_text_1' value: 'value_text_1'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment