Mercurial > hg > isophonics-drupal-site
diff core/modules/taxonomy/tests/src/Functional/RssTest.php @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | |
children | af1871eacc83 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/taxonomy/tests/src/Functional/RssTest.php Thu Feb 28 13:21:36 2019 +0000 @@ -0,0 +1,135 @@ +<?php + +namespace Drupal\Tests\taxonomy\Functional; + +use Drupal\Core\Field\FieldStorageDefinitionInterface; +use Drupal\views\Views; + +/** + * Ensure that data added as terms appears in RSS feeds if "RSS Category" format + * is selected. + * + * @group taxonomy + */ +class RssTest extends TaxonomyTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['node', 'field_ui', 'views']; + + /** + * Vocabulary for testing. + * + * @var \Drupal\taxonomy\VocabularyInterface + */ + protected $vocabulary; + + /** + * Name of the taxonomy term reference field. + * + * @var string + */ + protected $fieldName; + + protected function setUp() { + parent::setUp(); + + $this->drupalLogin($this->drupalCreateUser(['administer taxonomy', 'bypass node access', 'administer content types', 'administer node display'])); + $this->vocabulary = $this->createVocabulary(); + $this->fieldName = 'taxonomy_' . $this->vocabulary->id(); + + $handler_settings = [ + 'target_bundles' => [ + $this->vocabulary->id() => $this->vocabulary->id(), + ], + 'auto_create' => TRUE, + ]; + $this->createEntityReferenceField('node', 'article', $this->fieldName, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED); + + entity_get_form_display('node', 'article', 'default') + ->setComponent($this->fieldName, [ + 'type' => 'options_select', + ]) + ->save(); + entity_get_display('node', 'article', 'default') + ->setComponent($this->fieldName, [ + 'type' => 'entity_reference_label', + ]) + ->save(); + } + + /** + * Tests that terms added to nodes are displayed in core RSS feed. + * + * Create a node and assert that taxonomy terms appear in rss.xml. + */ + public function testTaxonomyRss() { + // Create two taxonomy terms. + $term1 = $this->createTerm($this->vocabulary); + + // RSS display must be added manually. + $this->drupalGet("admin/structure/types/manage/article/display"); + $edit = [ + "display_modes_custom[rss]" => '1', + ]; + $this->drupalPostForm(NULL, $edit, t('Save')); + + // Change the format to 'RSS category'. + $this->drupalGet("admin/structure/types/manage/article/display/rss"); + $edit = [ + "fields[taxonomy_" . $this->vocabulary->id() . "][type]" => 'entity_reference_rss_category', + "fields[taxonomy_" . $this->vocabulary->id() . "][region]" => 'content', + ]; + $this->drupalPostForm(NULL, $edit, t('Save')); + + // Post an article. + $edit = []; + $edit['title[0][value]'] = $this->randomMachineName(); + $edit[$this->fieldName . '[]'] = $term1->id(); + $this->drupalPostForm('node/add/article', $edit, t('Save')); + + // Check that the term is displayed when the RSS feed is viewed. + $this->drupalGet('rss.xml'); + $test_element = sprintf( + '<category %s>%s</category>', + 'domain="' . $term1->url('canonical', ['absolute' => TRUE]) . '"', + $term1->getName() + ); + $this->assertRaw($test_element, 'Term is displayed when viewing the rss feed.'); + + // Test that the feed icon exists for the term. + $this->drupalGet("taxonomy/term/{$term1->id()}"); + $this->assertLinkByHref("taxonomy/term/{$term1->id()}/feed"); + + // Test that the feed page exists for the term. + $this->drupalGet("taxonomy/term/{$term1->id()}/feed"); + $assert = $this->assertSession(); + $assert->responseHeaderContains('Content-Type', 'application/rss+xml'); + // Ensure the RSS version is 2.0. + $rss_array = $this->getSession()->getDriver()->find('rss'); + $this->assertEquals('2.0', reset($rss_array)->getAttribute('version')); + + // Check that the "Exception value" is disabled by default. + $this->drupalGet('taxonomy/term/all/feed'); + $this->assertResponse(404); + // Set the exception value to 'all'. + $view = Views::getView('taxonomy_term'); + $arguments = $view->getDisplay()->getOption('arguments'); + $arguments['tid']['exception']['value'] = 'all'; + $view->getDisplay()->overrideOption('arguments', $arguments); + $view->storage->save(); + // Check the article is shown in the feed. + $node = $this->drupalGetNodeByTitle($edit['title[0][value]']); + $raw_xml = '<title>' . $node->label() . '</title>'; + $this->drupalGet('taxonomy/term/all/feed'); + $this->assertRaw($raw_xml, "Raw text '$raw_xml' is found."); + // Unpublish the article and check that it is not shown in the feed. + $node->setUnpublished()->save(); + $this->drupalGet('taxonomy/term/all/feed'); + $this->assertNoRaw($raw_xml); + } + +}