X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fmodules%2Fcontrib%2Fparagraphs%2Fsrc%2FTests%2FClassic%2FParagraphsAddModesTest.php;fp=web%2Fmodules%2Fcontrib%2Fparagraphs%2Fsrc%2FTests%2FClassic%2FParagraphsAddModesTest.php;h=c8daedf7a924d2ff531b7189a8aef2533eeb35e6;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/modules/contrib/paragraphs/src/Tests/Classic/ParagraphsAddModesTest.php b/web/modules/contrib/paragraphs/src/Tests/Classic/ParagraphsAddModesTest.php new file mode 100644 index 000000000..c8daedf7a --- /dev/null +++ b/web/modules/contrib/paragraphs/src/Tests/Classic/ParagraphsAddModesTest.php @@ -0,0 +1,226 @@ +loginAsAdmin(); + $this->addParagraphedContentType('paragraphed_test', 'paragraphs_field'); + + // Edit the field. + $this->drupalGet('admin/structure/types/manage/paragraphed_test/fields'); + $this->clickLink(t('Edit')); + + // Check that the current field does not allow to add default values. + $this->assertText('No widget available for: paragraphs_field.'); + $this->drupalPostForm(NULL, [], t('Save settings')); + $this->assertText('Saved paragraphs_field configuration.'); + $this->assertResponse(200); + } + + /** + * Tests the field creation when no paragraphs types are available. + */ + public function testEmptyAllowedTypes() { + $this->loginAsAdmin(); + $this->addParagraphedContentType('paragraphed_test', 'paragraphs'); + + // Edit the field and save when there are no paragraphs types available. + $this->drupalGet('admin/structure/types/manage/paragraphed_test/fields'); + $this->clickLink(t('Edit')); + $this->drupalPostForm(NULL, [], t('Save settings')); + $this->assertText('Saved paragraphs configuration.'); + } + + /** + * Tests the add drop down button. + */ + public function testDropDownMode() { + $this->loginAsAdmin(); + // Add two paragraph types. + $this->addParagraphsType('btext'); + $this->addParagraphsType('dtext'); + + $this->addParagraphedContentType('paragraphed_test', 'paragraphs'); + // Enter to the field config since the weight is set through the form. + $this->drupalGet('admin/structure/types/manage/paragraphed_test/fields/node.paragraphed_test.paragraphs'); + $this->drupalPostForm(NULL, [], 'Save settings'); + + $this->setAddMode('paragraphed_test', 'paragraphs', 'dropdown'); + + $this->assertAddButtons(['Add btext', 'Add dtext']); + + $this->addParagraphsType('atext'); + $this->assertAddButtons(['Add btext', 'Add dtext', 'Add atext']); + + $this->setParagraphsTypeWeight('paragraphed_test', 'dtext', 2, 'paragraphs'); + $this->assertAddButtons(['Add dtext', 'Add btext', 'Add atext']); + + $this->setAllowedParagraphsTypes('paragraphed_test', ['dtext', 'atext'], TRUE, 'paragraphs'); + $this->assertAddButtons(['Add dtext', 'Add atext']); + + $this->setParagraphsTypeWeight('paragraphed_test', 'atext', 1, 'paragraphs'); + $this->assertAddButtons(['Add atext', 'Add dtext']); + + $this->setAllowedParagraphsTypes('paragraphed_test', ['atext', 'dtext', 'btext'], TRUE, 'paragraphs'); + $this->assertAddButtons(['Add atext', 'Add dtext', 'Add btext']); + } + + /** + * Tests the add select mode. + */ + public function testSelectMode() { + $this->loginAsAdmin(); + // Add two paragraph types. + $this->addParagraphsType('btext'); + $this->addParagraphsType('dtext'); + + $this->addParagraphedContentType('paragraphed_test', 'paragraphs'); + // Enter to the field config since the weight is set through the form. + $this->drupalGet('admin/structure/types/manage/paragraphed_test/fields/node.paragraphed_test.paragraphs'); + $this->drupalPostForm(NULL, [], 'Save settings'); + + $this->setAddMode('paragraphed_test', 'paragraphs', 'select'); + + $this->assertSelectOptions(['btext', 'dtext'], 'paragraphs'); + + $this->addParagraphsType('atext'); + $this->assertSelectOptions(['btext', 'dtext', 'atext'], 'paragraphs'); + + $this->setParagraphsTypeWeight('paragraphed_test', 'dtext', 2, 'paragraphs'); + $this->assertSelectOptions(['dtext', 'btext', 'atext'], 'paragraphs'); + + $this->setAllowedParagraphsTypes('paragraphed_test', ['dtext', 'atext'], TRUE, 'paragraphs'); + $this->assertSelectOptions(['dtext', 'atext'], 'paragraphs'); + + $this->setParagraphsTypeWeight('paragraphed_test', 'atext', 1, 'paragraphs'); + $this->assertSelectOptions(['atext', 'dtext'], 'paragraphs'); + + $this->setAllowedParagraphsTypes('paragraphed_test', ['atext', 'dtext', 'btext'], TRUE, 'paragraphs'); + $this->assertSelectOptions(['atext', 'dtext', 'btext'], 'paragraphs'); + } + + /** + * Asserts order and quantity of add buttons. + * + * @param array $options + * Array of expected add buttons in its correct order. + */ + protected function assertAddButtons($options) { + $this->drupalGet('node/add/paragraphed_test'); + $buttons = $this->xpath('//input[@class="field-add-more-submit button js-form-submit form-submit"]'); + // Check if the buttons are in the same order as the given array. + foreach ($buttons as $key => $button) { + $this->assertEqual($button['value'], $options[$key]); + } + $this->assertTrue(count($buttons) == count($options), 'The amount of drop down options matches with the given array'); + } + + /** + * Asserts order and quantity of select add options. + * + * @param array $options + * Array of expected select options in its correct order. + * @param string $paragraphs_field + * Name of the paragraphs field to check. + */ + protected function assertSelectOptions($options, $paragraphs_field) { + $this->drupalGet('node/add/paragraphed_test'); + $buttons = $this->xpath('//*[@name="' . $paragraphs_field . '[add_more][add_more_select]"]/option'); + // Check if the options are in the same order as the given array. + foreach ($buttons as $key => $button) { + $this->assertEqual($button['value'], $options[$key]); + } + $this->assertTrue(count($buttons) == count($options), 'The amount of select options matches with the given array'); + $this->assertNotEqual($this->xpath('//*[@name="' . $paragraphs_field .'_add_more"]'), [], 'The add button is displayed'); + } + + /** + * Tests if setting for default paragraph type is working properly. + */ + public function testSettingDefaultParagraphType() { + $this->addParagraphedContentType('paragraphed_test', 'paragraphs'); + $this->loginAsAdmin([ + 'administer content types', + 'administer node form display', + 'edit any paragraphed_test content' + ]); + + // Add a Paragraphed test content. + $paragraphs_type_text_image = ParagraphsType::create([ + 'id' => 'text_image', + 'label' => 'Text + Image', + ]); + $paragraphs_type_text = ParagraphsType::create([ + 'id' => 'text', + 'label' => 'Text', + ]); + $paragraphs_type_text_image->save(); + $paragraphs_type_text->save(); + + $this->setDefaultParagraphType('paragraphed_test', 'paragraphs', 'paragraphs_settings_edit', 'text_image'); + + // Check if default paragraph type is showing. + $this->drupalGet('node/add/paragraphed_test'); + $this->assertText('Text + Image'); + $this->removeDefaultParagraphType('paragraphed_test'); + + // Disable text_image as default paragraph type. + $this->setDefaultParagraphType('paragraphed_test', 'paragraphs', 'paragraphs_settings_edit', '_none'); + + // Check if is Text + Image is added as default paragraph type. + $this->drupalGet('node/add/paragraphed_test'); + $this->assertText('No Paragraph added yet.'); + + // Check if default type is created only for new host + $this->setDefaultParagraphType('paragraphed_test', 'paragraphs', 'paragraphs_settings_edit', 'text_image'); + $this->removeDefaultParagraphType('paragraphed_test'); + $this->drupalPostForm(NULL, ['title[0][value]' => 'New Host'], 'Save and publish'); + $this->drupalGet('node/1/edit'); + $this->assertText('No Paragraph added yet.'); + } + + /** + * Tests the default paragraph type behavior for a field with a single type. + */ + public function testDefaultParagraphTypeWithSingleType() { + $this->addParagraphedContentType('paragraphed_test', 'paragraphs'); + $this->loginAsAdmin([ + 'administer content types', + 'administer node form display', + 'edit any paragraphed_test content' + ]); + + // Add a Paragraphed test content. + $paragraphs_type_text = ParagraphsType::create([ + 'id' => 'text', + 'label' => 'Text', + ]); + $paragraphs_type_text->save(); + + // Check that when only one paragraph type is allowed in a content type, + // one instance is automatically added in the 'Add content' dialogue. + $this->drupalGet('node/add/paragraphed_test'); + $this->assertNoText('No Paragraph added yet.'); + + // Check that no paragraph type is automatically added, if the defaut + // setting was set to '- None -'. + $this->setDefaultParagraphType('paragraphed_test', 'paragraphs', 'paragraphs_settings_edit', '_none'); + $this->drupalGet('node/add/paragraphed_test'); + $this->assertText('No Paragraph added yet.'); + } +}