databaseDumpFiles = [ __DIR__ . '/../../../../../system/tests/fixtures/update/drupal-8.filled.standard.php.gz', __DIR__ . '/../../../fixtures/update/drupal-8.views-taxonomy-term-publishing-status-2981887.php', ]; } /** * Tests the conversion of taxonomy terms to be publishable. * * @see taxonomy_update_8601() */ public function testPublishable() { $this->runUpdates(); // Log in as user 1. $account = User::load(1); $account->passRaw = 'drupal'; $this->drupalLogin($account); // Make sure our vocabulary exists. $this->drupalGet('admin/structure/taxonomy/manage/test_vocabulary/overview'); // Make sure our terms exist. $assert_session = $this->assertSession(); $assert_session->pageTextContains('Test root term'); $assert_session->pageTextContains('Test child term'); $this->drupalGet('taxonomy/term/3'); $assert_session->statusCodeEquals('200'); // Make sure the terms are still translated. $this->drupalGet('taxonomy/term/2/translations'); $assert_session->linkExists('Test root term - Spanish'); $storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term'); // Check that the 'content_translation_status' field has been updated // correctly. /** @var \Drupal\taxonomy\TermInterface $term */ $term = $storage->load(2); $translation = $term->getTranslation('es'); $this->assertTrue($translation->isPublished()); // Check that taxonomy terms can be created, saved and then loaded. $term = $storage->create([ 'name' => 'Test term', 'vid' => 'tags', ]); $term->save(); $term = $storage->loadUnchanged($term->id()); $this->assertEquals('Test term', $term->label()); $this->assertEquals('tags', $term->bundle()); $this->assertTrue($term->isPublished()); // Check that the term can be unpublished. $term->setUnpublished(); $term->save(); $term = $storage->loadUnchanged($term->id()); $this->assertFalse($term->isPublished()); // Test the update does not run when a status field already exists. module_load_install('taxonomy'); $this->assertEquals('The publishing status field has not been added to taxonomy terms. See this page for more information on how to install it.', (string) taxonomy_update_8601()); // Test the message can be overridden. \Drupal::state()->set('taxonomy_update_8601_skip_message', 'Another message'); $this->assertEquals('Another message', (string) taxonomy_update_8601()); } /** * Tests handling of the publishing status in taxonomy term views updates. * * @see taxonomy_post_update_handle_publishing_status_addition_in_views() */ public function testPublishingStatusUpdateForTaxonomyTermViews() { // Check that the test view was previously using the // 'content_translation_status' field. $config = \Drupal::config('views.view.test_taxonomy_term_view_with_content_translation_status'); $display_options = $config->get('display.default.display_options'); $this->assertEquals('content_translation_status', $display_options['fields']['content_translation_status']['field']); $this->assertEquals('content_translation_status', $display_options['filters']['content_translation_status']['field']); $this->assertEquals('content_translation_status', $display_options['sorts']['content_translation_status']['field']); // Check a test view without any filter. $config = \Drupal::config('views.view.test_taxonomy_term_view_without_content_translation_status'); $display_options = $config->get('display.default.display_options'); $this->assertEmpty($display_options['filters']); $this->runUpdates(); // Check that a view which had a field, filter and a sort on the // 'content_translation_status' field has been updated to use the new // 'status' field. $view = View::load('test_taxonomy_term_view_with_content_translation_status'); foreach ($view->get('display') as $display) { $this->assertEquals('status', $display['display_options']['fields']['content_translation_status']['field']); $this->assertEquals('status', $display['display_options']['sorts']['content_translation_status']['field']); $this->assertEquals('status', $display['display_options']['filters']['content_translation_status']['field']); } // Check that a view without any filters has been updated to include a // filter for the 'status' field. $view = View::load('test_taxonomy_term_view_without_content_translation_status'); foreach ($view->get('display') as $display) { $this->assertNotEmpty($display['display_options']['filters']); $this->assertEquals('status', $display['display_options']['filters']['status']['field']); } } /** * {@inheritdoc} */ protected function replaceUser1() { // Do not replace the user from our dump. } }