public function XmlSitemapMultilingualTest::testLanguageSelection in XML sitemap 8
Same name and namespace in other branches
- 2.x tests/src/Functional/XmlSitemapMultilingualTest.php \Drupal\Tests\xmlsitemap\Functional\XmlSitemapMultilingualTest::testLanguageSelection()
Test Language Selection.
Test how links are included in a sitemap depending on the i18n_selection_mode config variable.
File
- tests/src/ Functional/ XmlSitemapMultilingualTest.php, line 54 
Class
- XmlSitemapMultilingualTest
- Tests the generation of multilingual sitemaps.
Namespace
Drupal\Tests\xmlsitemap\FunctionalCode
public function testLanguageSelection() {
  $this
    ->drupalLogin($this->admin_user);
  // Create our three different language nodes.
  $node = $this
    ->addSitemapLink([
    'type' => 'node',
    'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
  ]);
  $node_en = $this
    ->addSitemapLink([
    'type' => 'node',
    'language' => 'en',
  ]);
  $node_fr = $this
    ->addSitemapLink([
    'type' => 'node',
    'language' => 'fr',
  ]);
  // Create three non-node language nodes.
  $link = $this
    ->addSitemapLink([
    'language' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
  ]);
  $link_en = $this
    ->addSitemapLink([
    'language' => 'en',
  ]);
  $link_fr = $this
    ->addSitemapLink([
    'language' => 'fr',
  ]);
  $this->config
    ->set('i18n_selection_mode', 'off')
    ->save();
  $this
    ->regenerateSitemap();
  $this
    ->drupalGetSitemap([
    'language' => 'en',
  ]);
  $this
    ->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
  $this
    ->drupalGet('fr/sitemap.xml');
  $this
    ->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
  $this->config
    ->set('i18n_selection_mode', 'simple')
    ->save();
  $this
    ->regenerateSitemap();
  $this
    ->drupalGetSitemap([
    'language' => 'en',
  ]);
  $this
    ->assertRawSitemapLinks($node, $node_en, $link, $link_en);
  $this
    ->assertNoRawSitemapLinks($node_fr, $link_fr);
  $this
    ->drupalGet('fr/sitemap.xml');
  $this
    ->assertRawSitemapLinks($node, $node_fr, $link, $link_fr);
  $this
    ->assertNoRawSitemapLinks($node_en, $link_en);
  $this->config
    ->set('i18n_selection_mode', 'mixed')
    ->save();
  $this
    ->regenerateSitemap();
  $this
    ->drupalGetSitemap([
    'language' => 'en',
  ]);
  $this
    ->assertRawSitemapLinks($node, $node_en, $link, $link_en);
  $this
    ->assertNoRawSitemapLinks($node_fr, $link_fr);
  $this
    ->drupalGet('fr/sitemap.xml');
  $this
    ->assertRawSitemapLinks($node, $node_en, $node_fr, $link, $link_en, $link_fr);
  $this->config
    ->set('i18n_selection_mode', 'default')
    ->save();
  $this
    ->regenerateSitemap();
  $this
    ->drupalGetSitemap([
    'language' => 'en',
  ]);
  $this
    ->assertRawSitemapLinks($node, $node_en, $link, $link_en);
  $this
    ->assertNoRawSitemapLinks($node_fr, $link_fr);
  $this
    ->drupalGet('fr/sitemap.xml');
  $this
    ->assertRawSitemapLinks($node, $node_en, $link, $link_en);
  $this
    ->assertNoRawSitemapLinks($node_fr, $link_fr);
  // With strict mode, the language neutral node should not be found, but the
  // language neutral non-node should be.
  $this->config
    ->set('i18n_selection_mode', 'strict')
    ->save();
  $this
    ->regenerateSitemap();
  $this
    ->drupalGetSitemap([
    'language' => 'en',
  ]);
  $this
    ->assertRawSitemapLinks($node_en, $link, $link_en);
  $this
    ->assertNoRawSitemapLinks($node, $node_fr, $link_fr);
  $this
    ->drupalGet('fr/sitemap.xml');
  $this
    ->assertRawSitemapLinks($node_fr, $link, $link_fr);
  $this
    ->assertNoRawSitemapLinks($node, $node_en, $link_en);
}