Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ParagraphsTest.php 19.51 KiB
<?php
declare(strict_types = 1);
namespace Drupal\Tests\oe_whitelabel_paragraphs\Functional;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Tests\BrowserTestBase;
/**
* Tests paragraphs forms.
*/
class ParagraphsTest extends BrowserTestBase {
/**
* {@inheritdoc}
*/
protected static $modules = [
'node',
'composite_reference',
'oe_paragraphs_carousel',
'oe_whitelabel_paragraphs',
];
/**
* {@inheritdoc}
*/
protected $defaultTheme = 'stark';
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->createTestContentType();
$this->drupalLogin($this->drupalCreateUser([], '', TRUE));
}
/**
* Test Links Block paragraphs form.
*/
public function testLinksBlockParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$this->getSession()->getPage()->pressButton('Add Links block');
// Assert the Links Block fields appears.
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_links][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_links][0][title]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_text][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][oe_w_links_block_background]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][oe_w_links_block_orientation]');
$this->submitForm([], 'Add another item');
$values = [
'title[0][value]' => 'Test Links block node title',
'oe_w_paragraphs[0][subform][field_oe_text][0][value]' => 'EU Links',
'oe_w_paragraphs[0][subform][field_oe_links][0][uri]' => 'https://www.example.com',
'oe_w_paragraphs[0][subform][field_oe_links][0][title]' => 'Example link number 1',
'oe_w_paragraphs[0][subform][field_oe_links][1][uri]' => 'https://www.more-example.com',
'oe_w_paragraphs[0][subform][field_oe_links][1][title]' => 'Example link number 2',
'oe_w_paragraphs[0][subform][oe_w_links_block_background]' => 'gray',
'oe_w_paragraphs[0][subform][oe_w_links_block_orientation]' => 'vertical',
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are printed.
$this->assertSession()->pageTextContains('EU Links');
$this->assertSession()->pageTextContains('Example link number 1');
$this->assertSession()->pageTextContains('Example link number 2');
}
/**
* Test Social media follow paragraphs form.
*/
public function testSocialMediaFollowParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$this->getSession()->getPage()->pressButton('Add Social media follow');
// Assert the Social Media Follow fields appears.
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_links][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_links][0][title]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_links][0][link_type]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][oe_w_links_block_background]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_variant]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_see_more][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_social_media_see_more][0][title]');
$this->submitForm([], 'Add another item');
$values = [
'title[0][value]' => 'Test Social Media follow Links node title',
'oe_w_paragraphs[0][subform][field_oe_title][0][value]' => 'EU Social Media Follow Links',
'oe_w_paragraphs[0][subform][field_oe_social_media_links][0][uri]' => 'https://www.facebook.com',
'oe_w_paragraphs[0][subform][field_oe_social_media_links][0][title]' => 'Example Facebook',
'oe_w_paragraphs[0][subform][field_oe_social_media_links][0][link_type]' => 'facebook',
'oe_w_paragraphs[0][subform][oe_w_links_block_background]' => 'transparent',
'oe_w_paragraphs[0][subform][field_oe_social_media_variant]' => 'horizontal',
'oe_w_paragraphs[0][subform][field_oe_social_media_see_more][0][uri]' => 'https://example.com',
'oe_w_paragraphs[0][subform][field_oe_social_media_see_more][0][title]' => 'More channels',
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are printed.
$this->assertSession()->pageTextContains('EU Social Media Follow Links');
$this->assertSession()->pageTextContains('Example Facebook');
$this->assertSession()->pageTextContains('More channels');
}
/**
* Test Accordion paragraphs form.
*/
public function testAccordionParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$page = $this->getSession()->getPage();
$page->pressButton('Add Accordion');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text_long][0][value]');
// Assert the Icon field is not shown.
$this->assertSession()->fieldNotExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_icon][0][value]');
$values = [
'title[0][value]' => 'Test Accordion',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text][0][value]' => 'Title item 1',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text_long][0][value]' => 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are displayed correctly.
$this->assertSession()->pageTextContains('Title item 1');
$this->assertSession()->pageTextContains('Lorem ipsum dolor sit amet, consectetur adipiscing elit.');
}
/**
* Test Facts and figures paragraphs form.
*/
public function testFactsFiguresParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$page = $this->getSession()->getPage();
$page->pressButton('Add Facts and figures');
// Assert the Facts and figures fields are present.
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_link][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_link][0][title]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][oe_w_n_columns][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_subtitle][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_plain_text_long][0][value]');
$values = [
'title[0][value]' => 'Test Fact and figures node title',
'oe_w_paragraphs[0][subform][field_oe_title][0][value]' => 'Fact and figures block',
'oe_w_paragraphs[0][subform][field_oe_link][0][uri]' => 'https://www.google.com',
'oe_w_paragraphs[0][subform][field_oe_link][0][title]' => 'Read more',
'oe_w_paragraphs[0][subform][oe_w_n_columns][0][value]' => 2,
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_title][0][value]' => "1529 JIRA Ticket",
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_subtitle][0][value]' => "Jira Tickets",
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_plain_text_long][0][value]' => "Nunc condimentum sapien ut nibh finibus suscipit vitae at justo. Morbi quis odio faucibus, commodo tortor id, elementum libero.",
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are displayed correctly.
$this->assertSession()->pageTextContains('Fact and figures block');
$this->assertSession()->pageTextContains('Read more');
$this->assertSession()->pageTextContains('1529 JIRA Ticket');
$this->assertSession()->pageTextContains('Jira Tickets');
$this->assertSession()->pageTextContains('Nunc condimentum sapien ut nibh finibus suscipit vitae at justo. Morbi quis odio faucibus, commodo tortor id, elementum libero.');
}
/**
* Test icon options event subscriber.
*/
public function testIconOptionsEventsubscriber(): void {
$this->drupalGet('/node/add/paragraphs_test');
$page = $this->getSession()->getPage();
$page->pressButton('Add Fact');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_icon]');
$allowed_values = [
'_none',
'arrow-down',
'box-arrow-up',
'arrow-up',
'book',
'camera',
'check',
'download',
'currency-euro',
'facebook',
'file',
'image',
'info',
'linkedin',
'files',
'rss',
'search',
'share',
'twitter',
'camera-video',
];
foreach ($allowed_values as $allowed_value) {
$this->assertSession()->elementsCount('css', 'option[value="' . $allowed_value . '"]', 1);
}
$this->assertSession()->elementsCount('css', 'select#edit-oe-w-paragraphs-0-subform-field-oe-icon option', 20);
}
/**
* Test Description list paragraphs form.
*/
public function testDescriptionListParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$this->getSession()->getPage()->pressButton('Add Description list');
$assert_session = $this->assertSession();
$assert_session->fieldExists('oe_w_paragraphs[0][subform][field_oe_title][0][value]');
$this->assertEquals([
'horizontal' => 'Horizontal',
'vertical' => 'Vertical',
], $this->getOptions('oe_w_paragraphs[0][subform][oe_w_orientation]'));
$assert_session->fieldExists('oe_w_paragraphs[0][subform][field_oe_description_list_items][0][term]');
$assert_session->fieldExists('oe_w_paragraphs[0][subform][field_oe_description_list_items][0][description][value]');
$values = [
'title[0][value]' => 'Test Description list node title',
'oe_w_paragraphs[0][subform][field_oe_title][0][value]' => 'Description list paragraph',
'oe_w_paragraphs[0][subform][oe_w_orientation]' => 'horizontal',
'oe_w_paragraphs[0][subform][field_oe_description_list_items][0][term]' => 'Aliquam ultricies',
'oe_w_paragraphs[0][subform][field_oe_description_list_items][0][description][value]' => 'Donec et leo ac velit posuere tempor mattis ac mi. Vivamus nec dictum lectus. Aliquam ultricies placerat eros, vitae ornare sem.',
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are displayed correctly.
$assert_session->pageTextContains('Description list paragraph');
$assert_session->pageTextContains('Aliquam ultricies');
$assert_session->pageTextContains('Donec et leo ac velit posuere tempor mattis ac mi. Vivamus nec dictum lectus. Aliquam ultricies placerat eros, vitae ornare sem.');
}
/**
* Test Links Block paragraphs form.
*/
public function testListingParagraph(): void {
$this->drupalGet('/node/add/paragraphs_test');
$page = $this->getSession()->getPage();
$page->pressButton('Add Listing item block');
// Assert the Listing fields appears.
$this->assertSession()->fieldExists('oe_w_paragraphs[0][variant]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_list_item_block_layout]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_link][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text_long][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_meta][0][value]');
$this->assertSession()->fieldExists('files[oe_w_paragraphs_0_subform_field_oe_paragraphs_0_subform_field_oe_image_0]');
$this->submitForm([], 'Add another item');
$values = [
'title[0][value]' => 'Listing node title',
'oe_w_paragraphs[0][variant]' => 'default',
'oe_w_paragraphs[0][subform][field_oe_title][0][value]' => 'Listing example',
'oe_w_paragraphs[0][subform][field_oe_list_item_block_layout]' => 'two_columns',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_link][0][uri]' => 'https://www.example.com',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_title][0][value]' => 'Card title',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_text_long][0][value]' => 'Lorem Ipsum dolor sit amet.',
'oe_w_paragraphs[0][subform][field_oe_paragraphs][0][subform][field_oe_meta][0][value]' => 'label1',
];
$this->submitForm($values, 'Save');
$this->drupalGet('/node/1');
// Assert paragraph values are displayed correctly.
$this->assertSession()->pageTextContains('Listing example');
$this->assertSession()->pageTextContains('Card title');
$this->assertSession()->pageTextContains('Lorem Ipsum dolor sit amet.');
$this->assertSession()->pageTextContains('label1');
}
/**
* Test Carousel paragraphs form.
*/
public function testCarouselParagraph(): void {
$page = $this->getSession()->getPage();
$assert = $this->assertSession();
$fixtures_path = \Drupal::service('extension.list.module')->getPath('oe_whitelabel_paragraphs') . '/tests/fixtures/';
$file_1 = file_save_data(file_get_contents($fixtures_path . 'example_1.jpeg'), 'public://example_1.jpeg');
$file_1->setPermanent();
$file_1->save();
$file_2 = file_save_data(file_get_contents($fixtures_path . 'example_1.jpeg'), 'public://example_2.jpeg');
$file_2->setPermanent();
$file_2->save();
$media_storage = $this->container->get('entity_type.manager')
->getStorage('media');
$media = $media_storage->create([
'bundle' => 'image',
'name' => 'First image',
'oe_media_image' => [
'target_id' => $file_1->id(),
],
]);
$media->save();
$media = $media_storage->create([
'bundle' => 'image',
'name' => 'Second image',
'oe_media_image' => [
'target_id' => $file_2->id(),
],
]);
$media->save();
$this->drupalGet('/node/add/paragraphs_test');
$page->pressButton('Add Carousel');
// Assert the Listing fields appears.
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_title][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_text][0][value]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_link][0][uri]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_link][0][title]');
$this->assertSession()->fieldExists('oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_media][0][target_id]');
$values = [
'title[0][value]' => 'Title',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_title][0][value]' => 'Carousel item 1',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_text][0][value]' => 'Caption 1',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_link][0][uri]' => 'https://www.example1.com',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_link][0][title]' => 'Link 1',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][0][subform][field_oe_media][0][target_id]' => 'First image',
];
$this->submitForm($values, 'Save');
$this->assertSession()->pageTextContains('The Carousel paragraph should contain at least 2 items.');
$this->submitForm([], 'Add Carousel item');
$values += [
'oe_w_paragraphs[0][subform][field_oe_carousel_items][1][subform][field_oe_title][0][value]' => 'Carousel item 2',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][1][subform][field_oe_text][0][value]' => 'Caption 2',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][1][subform][field_oe_link][0][uri]' => 'https://www.example2.com',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][1][subform][field_oe_link][0][title]' => 'Link 2',
'oe_w_paragraphs[0][subform][field_oe_carousel_items][1][subform][field_oe_media][0][target_id]' => 'Second image',
];
$this->submitForm($values, 'Save');
// Assert paragraph values are displayed correctly.
$assert->pageTextContains('Title');
$wrapper = $assert->elementExists('css', '.paragraph--type--oe-carousel');
$items = $wrapper->findAll('css', '.paragraph--type--oe-carousel-item');
$this->assertCount(2, $items);
$this->assertStringContainsString('Carousel item 1', $items[0]->getHtml());
$this->assertStringContainsString('Caption 1', $items[0]->getHtml());
$link = $items[0]->find('css', 'a');
$this->assertSame('Link 1', $link->getText());
$this->assertSame('https://www.example1.com', $link->getAttribute('href'));
$image = $items[0]->find('css', 'img');
$this->assertStringContainsString('example_1.jpeg', $image->getAttribute('src'));
$this->assertStringContainsString('Carousel item 2', $items[1]->getHtml());
$this->assertStringContainsString('Caption 2', $items[1]->getHtml());
$link = $items[1]->find('css', 'a');
$this->assertSame('Link 2', $link->getText());
$this->assertSame('https://www.example2.com', $link->getAttribute('href'));
$image = $items[1]->find('css', 'img');
$this->assertStringContainsString('example_2.jpeg', $image->getAttribute('src'));
}
/**
* Creates a node type with a paragraphs field.
*/
protected function createTestContentType() {
$this->drupalCreateContentType([
'type' => 'paragraphs_test',
'name' => 'Paragraphs Test',
]);
// Add a paragraphs field.
$field_storage = FieldStorageConfig::create([
'field_name' => 'oe_w_paragraphs',
'entity_type' => 'node',
'type' => 'entity_reference_revisions',
'cardinality' => '-1',
'settings' => [
'target_type' => 'paragraph',
],
]);
$field_storage->save();
FieldConfig::create([
'field_storage' => $field_storage,
'bundle' => 'paragraphs_test',
'settings' => [
'handler' => 'default:paragraph',
'handler_settings' => ['target_bundles' => NULL],
],
])->save();
$form_display = \Drupal::service('entity_display.repository')->getFormDisplay('node', 'paragraphs_test');
$form_display = $form_display->setComponent('oe_w_paragraphs', ['type' => 'oe_paragraphs_variants']);
$form_display->save();
$view_display = \Drupal::service('entity_display.repository')->getViewDisplay('node', 'paragraphs_test');
$view_display->setComponent('oe_w_paragraphs', ['type' => 'entity_reference_revisions_entity_view']);
$view_display->save();
}
}