Tests paragraphs behavior plugins.
@group paragraphs
Expanded class hierarchy of ParagraphsBehaviorsTest
class ParagraphsBehaviorsTest extends ParagraphsTestBase {
/**
* Modules to enable.
*
* @var array
*/
protected static $modules = [
'image',
'file',
'views',
];
/**
* Tests the behavior plugins for paragraphs.
*/
public function testBehaviorPluginsFields() {
$this
->addParagraphedContentType('paragraphed_test');
$this
->loginAsAdmin([
'create paragraphed_test content',
'edit any paragraphed_test content',
]);
// Add a Paragraph type.
$paragraph_type = 'text_paragraph';
$this
->addParagraphsType($paragraph_type);
// Add a text field to the text_paragraph type.
static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text', 'Text', 'text_long', [], []);
// Check default configuration.
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->assertSession()
->fieldValueEquals('behavior_plugins[test_text_color][settings][default_color]', 'blue');
$this
->assertSession()
->pageTextContains('Behavior plugins are only supported by the stable paragraphs widget');
// Enable the test plugins, with an invalid configuration value.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => TRUE,
'behavior_plugins[test_text_color][settings][default_color]' => 'red',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Red can not be used as the default color.');
// Ensure the form can be saved with an invalid configuration value when
// the plugin is not selected.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => FALSE,
'behavior_plugins[test_text_color][settings][default_color]' => 'red',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Saved the text_paragraph Paragraphs type.');
// Ensure it can be saved with a valid value and that the defaults are
// correct.
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->assertSession()
->checkboxChecked('edit-behavior-plugins-test-bold-text-enabled');
$this
->assertSession()
->checkboxNotChecked('edit-behavior-plugins-test-text-color-enabled');
$this
->assertSession()
->fieldValueEquals('behavior_plugins[test_text_color][settings][default_color]', 'blue');
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => TRUE,
'behavior_plugins[test_text_color][settings][default_color]' => 'green',
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->pageTextContains('Saved the text_paragraph Paragraphs type.');
$this
->drupalGet('node/add/paragraphed_test');
// Behavior plugin settings is not available to users without
// "edit behavior plugin settings" permission.
$this
->assertSession()
->fieldNotExists('field_paragraphs[0][behavior_plugins][test_text_color][text_color]');
$this
->loginAsAdmin([
'create paragraphed_test content',
'edit any paragraphed_test content',
'edit behavior plugin settings',
]);
// Create a node with a Paragraph.
$this
->drupalGet('node/add/paragraphed_test');
$this
->assertSession()
->fieldValueEquals('field_paragraphs[0][behavior_plugins][test_text_color][text_color]', 'green');
// Setting a not allowed value in the text color plugin text field.
$plugin_text = 'green';
$edit = [
'title[0][value]' => 'paragraphs_plugins_test',
'field_paragraphs[0][subform][field_text][0][value]' => 'amazing_plugin_test',
'field_paragraphs[0][behavior_plugins][test_text_color][text_color]' => $plugin_text,
];
// Assert that the behavior form is after the dropbutton.
$behavior_xpath = $this
->xpath("//div[@id = 'edit-field-paragraphs-0-top']/following-sibling::*[1][@id = 'edit-field-paragraphs-0-behavior-plugins-test-bold-text']");
$this
->assertNotEquals($behavior_xpath, FALSE, 'Behavior form position incorrect');
$this
->submitForm($edit, 'Save');
// Asserting that the error message is shown.
$this
->assertSession()
->pageTextContains('The only allowed values are blue and red.');
// Updating the text color to an allowed value.
$plugin_text = 'red';
$edit = [
'field_paragraphs[0][behavior_plugins][test_text_color][text_color]' => $plugin_text,
];
$this
->submitForm($edit, 'Save');
// Assert that the class has been added to the element.
$this
->assertSession()
->responseContains('class="red_plugin_text');
$this
->clickLink('Edit');
// Assert the plugin fields populate the stored values.
$this
->assertSession()
->fieldValueEquals('field_paragraphs[0][behavior_plugins][test_text_color][text_color]', $plugin_text);
// Update the value of both plugins.
$updated_text = 'blue';
$edit = [
'field_paragraphs[0][behavior_plugins][test_text_color][text_color]' => $updated_text,
'field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]' => TRUE,
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->responseNotContains('class="red_plugin_text');
$this
->assertSession()
->responseContains('class="bold_plugin_text blue_plugin_text');
$this
->clickLink('Edit');
// Assert the plugin fields populate the stored values.
$this
->assertSession()
->fieldValueEquals('field_paragraphs[0][behavior_plugins][test_text_color][text_color]', $updated_text);
$this
->assertSession()
->fieldValueEquals('field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]', TRUE);
$this
->loginAsAdmin([
'edit any paragraphed_test content',
]);
$node = $this
->getNodeByTitle('paragraphs_plugins_test');
$this
->drupalGet('node/' . $node
->id() . '/edit');
$this
->assertSession()
->fieldNotExists('field_paragraphs[0][behavior_plugins][test_text_color][text_color]');
$this
->assertSession()
->fieldNotExists('field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]');
$this
->submitForm([], 'Save');
// Make sure that values don't change if a user without the 'edit behavior
// plugin settings' permission saves a node with paragraphs and enabled
// behaviors.
$this
->assertSession()
->responseContains('class="bold_plugin_text blue_plugin_text');
$this
->assertSession()
->responseNotContains('class="red_plugin_text');
// Test plugin applicability. Add a paragraph type.
$paragraph_type = 'text_paragraph_test';
$this
->addParagraphsType($paragraph_type);
// Add a text field to the text_paragraph type.
static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text_test', 'Text', 'text_long', [], []);
static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'image', 'Image', 'image', [], []);
// Assert if the plugin is listed on the edit form of the paragraphs type.
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->assertSession()
->fieldNotExists('behavior_plugins[test_bold_text][enabled]');
$this
->assertSession()
->fieldExists('behavior_plugins[test_text_color][enabled]');
$this
->assertSession()
->fieldExists('behavior_plugins[test_field_selection][enabled]');
$this
->assertSession()
->pageTextContains('Choose paragraph field to be applied.');
// Assert that Field Selection Filter plugin properly filters field types.
$this
->assertSession()
->optionExists('edit-behavior-plugins-test-field-selection-settings-field-selection-filter', 'Image');
// Check that Field Selection Plugin does not filter any field types.
$this
->assertSession()
->optionExists('edit-behavior-plugins-test-field-selection-settings-field-selection', 'Image');
$this
->assertSession()
->optionExists('edit-behavior-plugins-test-field-selection-settings-field-selection', 'Text');
// Test a plugin without behavior fields.
$edit = [
'behavior_plugins[test_dummy_behavior][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => TRUE,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_text_paragraph_test_add_more');
$edit = [
'title[0][value]' => 'paragraph with no fields',
'field_paragraphs[0][subform][field_text_test][0][value]' => 'my behavior plugin does not have any field',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->responseContains('dummy_plugin_text');
// Tests behavior plugin on paragraph type with no fields.
$this
->addParagraphsType('fieldless');
$this
->drupalGet('admin/structure/paragraphs_type/fieldless');
$this
->submitForm([
'behavior_plugins[test_dummy_behavior][enabled]' => TRUE,
], 'Save');
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_fieldless_add_more');
$edit = [
'title[0][value]' => 'Fieldless',
];
$this
->submitForm($edit, 'Save');
$this
->assertSession()
->statusCodeEquals(200);
// Add a paragraphed content.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_text_paragraph_test_add_more');
$edit = [
'title[0][value]' => 'field_override_test',
'field_paragraphs[0][subform][field_text_test][0][value]' => 'This is a test',
];
$this
->submitForm($edit, 'Save');
// Check that the summary does not have the user displayed.
$node = $this
->getNodeByTitle('field_override_test');
$this
->drupalGet('node/' . $node
->id() . '/edit');
$this
->submitForm([], 'field_paragraphs_0_collapse');
$this
->assertSession()
->responseContains('class="paragraphs-description paragraphs-collapsed-description"><div class="paragraphs-content-wrapper"><span class="summary-content">This is a test');
}
/**
* Tests the behavior plugins summary for paragraphs closed mode.
*/
public function testCollapsedSummary() {
$this
->addParagraphedContentType('paragraphed_test');
$this
->loginAsAdmin([
'create paragraphed_test content',
'edit any paragraphed_test content',
'edit behavior plugin settings',
]);
// Add a text paragraph type.
$paragraph_type = 'text_paragraph';
$this
->addParagraphsType($paragraph_type);
static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text', 'Text', 'text_long', [], []);
$this
->setParagraphsWidgetMode('paragraphed_test', 'field_paragraphs', 'closed');
// Enable plugins for the text paragraph type.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => TRUE,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
// Add a nested Paragraph type.
$paragraph_type = 'nested_paragraph';
$this
->addParagraphsType($paragraph_type);
$this
->addParagraphsField('nested_paragraph', 'paragraphs', 'paragraph');
// Enable plugins for the nested paragraph type.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
// Add a node and enabled plugins.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'field_paragraphs_1_subform_paragraphs_text_paragraph_add_more');
$this
->assertSession()
->fieldExists('field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]');
$this
->assertSession()
->fieldExists('field_paragraphs[1][behavior_plugins][test_bold_text][bold_text]');
$edit = [
'title[0][value]' => 'collapsed_test',
'field_paragraphs[0][subform][field_text][0][value]' => 'first_paragraph',
'field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]' => TRUE,
'field_paragraphs[1][subform][paragraphs][0][subform][field_text][0][value]' => 'nested_paragraph',
'field_paragraphs[1][behavior_plugins][test_bold_text][bold_text]' => TRUE,
];
$this
->submitForm($edit, 'Save');
$this
->clickLink('Edit');
// Assert that info section includes the information from behavior plugins.
$this
->assertSession()
->elementExists('xpath', '//*[@id="edit-field-paragraphs-0-top-icons"]/span[@class="paragraphs-icon paragraphs-icon-bold"]');
$this
->assertSession()
->elementExists('xpath', '//*[@id="edit-field-paragraphs-1-top-icons"]/span[@class="paragraphs-badge" and @title="1 child"]');
$this
->assertSession()
->elementExists('xpath', '//*[@id="edit-field-paragraphs-1-top-icons"]/span[@class="paragraphs-icon paragraphs-icon-bold"]');
// Assert that the summary includes the text of the behavior plugins.
$this
->assertSession()
->responseContains('first_paragraph</span></div><div class="paragraphs-plugin-wrapper"><span class="summary-plugin"><span class="summary-plugin-label">Bold</span>Yes</span><span class="summary-plugin"><span class="summary-plugin-label">Text color</span>blue</span>');
$this
->assertSession()
->responseContains('nested_paragraph</span></div><div class="paragraphs-plugin-wrapper"><span class="summary-plugin"><span class="summary-plugin-label">Bold</span>Yes</span></div></div>');
// Add an empty nested paragraph.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_nested_paragraph_add_more');
$edit = [
'title[0][value]' => 'collapsed_test',
];
$this
->submitForm($edit, 'Save');
// Check an empty nested paragraph summary.
$this
->clickLink('Edit');
$this
->assertSession()
->responseContains('class="paragraphs-description paragraphs-collapsed-description">');
}
/**
* Tests the behavior plugins subform state submit.
*/
public function testBehaviorSubform() {
$this
->addParagraphedContentType('paragraphed_test');
$this
->loginAsAdmin([
'create paragraphed_test content',
'edit any paragraphed_test content',
'edit behavior plugin settings',
]);
// Add a text paragraph type.
$paragraph_type = 'text_paragraph';
$this
->addParagraphsType($paragraph_type);
static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text', 'Text', 'text_long', [], []);
// Enable plugins for the text paragraph type.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
'behavior_plugins[test_text_color][enabled]' => TRUE,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
// Add a nested Paragraph type.
$paragraph_type = 'nested_paragraph';
$this
->addParagraphsType($paragraph_type);
static::fieldUIAddNewField('admin/structure/paragraphs_type/nested_paragraph', 'nested', 'Nested', 'field_ui:entity_reference_revisions:paragraph', [
'settings[target_type]' => 'paragraph',
'cardinality' => '-1',
], []);
// Enable plugins for the nested paragraph type.
$edit = [
'behavior_plugins[test_bold_text][enabled]' => TRUE,
];
$this
->drupalGet('admin/structure/paragraphs_type/' . $paragraph_type);
$this
->submitForm($edit, 'Save');
// Add a node and enabled plugins.
$this
->drupalGet('node/add/paragraphed_test');
$this
->submitForm([], 'field_paragraphs_nested_paragraph_add_more');
$this
->submitForm([], 'field_paragraphs_text_paragraph_add_more');
$this
->submitForm([], 'field_paragraphs_0_subform_field_nested_text_paragraph_add_more');
$edit = [
'title[0][value]' => 'collapsed_test',
'field_paragraphs[0][subform][field_nested][0][subform][field_text][0][value]' => 'nested text paragraph',
'field_paragraphs[0][behavior_plugins][test_bold_text][bold_text]' => TRUE,
'field_paragraphs[1][subform][field_text][0][value]' => 'first_paragraph',
'field_paragraphs[1][behavior_plugins][test_bold_text][bold_text]' => TRUE,
];
$this
->submitForm($edit, 'Save');
$this
->clickLink('Edit');
$edit = [
'field_paragraphs[0][_weight]' => 1,
'field_paragraphs[1][behavior_plugins][test_bold_text][bold_text]' => FALSE,
'field_paragraphs[1][behavior_plugins][test_text_color][text_color]' => 'red',
'field_paragraphs[1][_weight]' => 0,
];
$this
->submitForm($edit, 'Save');
$this
->clickLink('Edit');
$this
->assertSession()
->fieldValueEquals('field_paragraphs[0][behavior_plugins][test_text_color][text_color]', 'red');
}
}
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ParagraphsBehaviorsTest:: |
public | function | Tests the behavior plugins for paragraphs. | |
ParagraphsBehaviorsTest:: |
public | function | Tests the behavior plugins summary for paragraphs closed mode. | |
ParagraphsBehaviorsTest:: |
public | function | Tests the behavior plugins subform state submit. | |
ParagraphsBehaviorsTest:: |
protected static | property |
Modules to enable. Overrides ParagraphsTestBase:: |
|
ParagraphsTestBase:: |
protected | function |
Sets the Paragraphs widget add mode. Overrides ParagraphsTestBase:: |
|
ParagraphsTestBase:: |
protected | function |
Removes the default paragraph type. Overrides ParagraphsTestBase:: |
|
ParagraphsTestBaseTrait:: |
protected | function | Adds a content type with a Paragraphs field. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a Paragraphs field to a given entity type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a Paragraphs type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds an icon to a paragraphs type. | |
ParagraphsTestBaseTrait:: |
protected | function | Adds a field to a given paragraph type. | |
ParagraphsTestBaseTrait:: |
protected | function | Sets some of the settings of a paragraphs field widget. | |
ParagraphsTestBaseTrait:: |
protected | function | Creates a workflow entity. | |
ParagraphsTestBaseTrait:: |
protected | function | Checks the core version. | |
ParagraphsTestBase:: |
protected | function | 19 | |
ParagraphsTestBase:: |
protected | function | Sets the allowed Paragraphs types that can be added. | |
ParagraphsTestBase:: |
protected | function | Sets the weight of a given Paragraphs type. | |
ParagraphsTestBase:: |
protected | function | Sets the default paragraph type. | |
ParagraphsTestBase:: |
protected | function | Sets the Paragraphs widget display mode. | |
ParagraphsTestBaseTrait:: |
protected | property | The workflow entity. | |
ParagraphsTestBase:: |
protected | property | Drupal user object created by loginAsAdmin(). | 1 |
ParagraphsTestBase:: |
protected | property | List of permissions used by loginAsAdmin(). | |
ParagraphsTestBase:: |
protected | property | 2 | |
ParagraphsTestBase:: |
function | Creates an user with admin permissions and log in. |