Verified Commit 06b7f5c5 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #3117553 by dww, quietone, ameymudras, diqidoq, xjm, smustgrave,...

Issue #3117553 by dww, quietone, ameymudras, diqidoq, xjm, smustgrave, benjifisher, yoroy, webchick: Change UI for /admin/reports/updates/update to not mention "Enabled/Disabled" modules and themes
parent 12d7bd84
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
        'data' => $this->t('Name'),
        'class' => ['update-project-name'],
      ],
      'installed_version' => $this->t('Installed version'),
      'installed_version' => $this->t('Site version'),
      'recommended_version' => $this->t('Recommended version'),
    ];

@@ -277,7 +277,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
        '#options' => $projects['enabled'],
      ];
      if (!empty($projects['disabled'])) {
        $form['projects']['#prefix'] = '<h2>' . $this->t('Enabled') . '</h2>';
        $form['projects']['#prefix'] = '<h2>' . $this->t('Installed') . '</h2>';
      }
    }

@@ -287,7 +287,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
        '#header' => $headers,
        '#options' => $projects['disabled'],
        '#weight' => 1,
        '#prefix' => '<h2>' . $this->t('Disabled') . '</h2>',
        '#prefix' => '<h2>' . $this->t('Uninstalled') . '</h2>',
      ];
    }

+37 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<project xmlns:dc="http://purl.org/dc/elements/1.1/">
<title>CCC Update test</title>
<short_name>ccc_update_test</short_name>
<dc:creator>Drupal</dc:creator>
<supported_branches>8.x-1.</supported_branches>
<project_status>published</project_status>
<link>http://example.com/project/ccc_update_test</link>
  <terms>
   <term><name>Projects</name><value>Modules</value></term>
  </terms>
<releases>
 <release>
  <name>ccc_update_test 8.x-1.1</name>
  <version>8.x-1.1</version>
  <status>published</status>
  <release_link>http://example.com/ccc_update_test-8-x-1-1-release</release_link>
  <download_link>http://example.com/ccc_update_test-8.x-1.1.tar.gz</download_link>
  <date>1250534521</date>
  <terms>
   <term><name>Release type</name><value>Bug fixes</value></term>
  </terms>
 </release>
 <release>
  <name>ccc_update_test 8.x-1.0</name>
  <version>8.x-1.0</version>
  <status>published</status>
  <release_link>http://example.com/ccc_update_test-8-x-1-0-release</release_link>
  <download_link>http://example.com/ccc_update_test-8.x-1.0.tar.gz</download_link>
  <date>1250404521</date>
  <terms>
   <term><name>Release type</name><value>New features</value></term>
   <term><name>Release type</name><value>Bug fixes</value></term>
  </terms>
 </release>
</releases>
</project>
+95 −0
Original line number Diff line number Diff line
@@ -54,6 +54,11 @@ protected function setUp(): void {
        'version' => '8.x-1.0',
        'hidden' => FALSE,
      ],
      'ccc_update_test' => [
        'project' => 'ccc_update_test',
        'version' => '8.x-1.0',
        'hidden' => FALSE,
      ],
    ]);
    $this->mockDefaultExtensionsInfo(['version' => '8.0.0']);
  }
@@ -231,4 +236,94 @@ public function testIncompatibleUpdatesTable($core_fixture, $a_fixture, $b_fixtu
    }
  }

  /**
   * Tests the Update form with an uninstalled module in the system.
   */
  public function testUninstalledUpdatesTable() {
    $assert_session = $this->assertSession();
    $compatible_table_locator = '[data-drupal-selector="edit-projects"]';
    // @todo In https://www.drupal.org/project/drupal/issues/3121870 change this
    //   selector when the implementation details catch up with the UI strings.
    $uninstalled_table_locator = '[data-drupal-selector="edit-disabled-projects"]';

    $fixtures = [
      'drupal' => '1.1-core_compatibility',
      'aaa_update_test' => '8.x-1.2',
      // Use a fixture with only a 8.x-1.0 release so BBB is up to date.
      'bbb_update_test' => '1_0',
      // CCC is not installed and is missing an update, 8.x-1.1.
      'ccc_update_test' => '1_1',
    ];
    $this->refreshUpdateStatus($fixtures);
    $this->drupalGet('admin/reports/updates/update');

    // Confirm there is no table for uninstalled extensions.
    $assert_session->pageTextNotContains('CCC Update test');
    $assert_session->responseNotContains('<h2>Uninstalled</h2>');

    // Confirm the table for installed modules exists without a header.
    $assert_session->responseNotContains('<h2>Installed</h2>');
    $assert_session->elementNotExists('css', $uninstalled_table_locator);
    $assert_session->elementsCount('css', "$compatible_table_locator tbody tr", 1);
    $compatible_headers = [
      // First column has no header, it's the select-all checkbox.
      'th:nth-of-type(2)' => 'Name',
      'th:nth-of-type(3)' => 'Site version',
      'th:nth-of-type(4)' => 'Recommended version',
    ];
    $this->checkTableHeaders($compatible_table_locator, $compatible_headers);

    $installed_row = "$compatible_table_locator tbody tr";
    $assert_session->elementsCount('css', $installed_row, 1);
    $assert_session->elementTextContains('css', "$compatible_table_locator td:nth-of-type(2)", "AAA Update test");
    $assert_session->elementTextContains('css', "$compatible_table_locator td:nth-of-type(3)", '8.x-1.0');
    $assert_session->elementTextContains('css', "$compatible_table_locator td:nth-of-type(4)", '8.x-1.2');

    // Change the setting so we check for uninstalled modules, too.
    $this->config('update.settings')
      ->set('check.disabled_extensions', TRUE)
      ->save();

    // Reload the page so the new setting goes into effect.
    $this->drupalGet('admin/reports/updates/update');

    // Confirm the table for installed modules exists with a header.
    $assert_session->responseContains('<h2>Installed</h2>');
    $assert_session->elementsCount('css', "$compatible_table_locator tbody tr", 1);
    $this->checkTableHeaders($compatible_table_locator, $compatible_headers);

    // Confirm the table for uninstalled extensions exists.
    $assert_session->responseContains('<h2>Uninstalled</h2>');
    $uninstalled_headers = [
      // First column has no header, it's the select-all checkbox.
      'th:nth-of-type(2)' => 'Name',
      'th:nth-of-type(3)' => 'Site version',
      'th:nth-of-type(4)' => 'Recommended version',
    ];
    $this->checkTableHeaders($uninstalled_table_locator, $uninstalled_headers);

    $uninstalled_row = "$uninstalled_table_locator tbody tr";
    $assert_session->elementsCount('css', $uninstalled_row, 1);
    $assert_session->elementTextContains('css', "$uninstalled_row td:nth-of-type(2)", "CCC Update test");
    $assert_session->elementTextContains('css', "$uninstalled_row td:nth-of-type(3)", '8.x-1.0');
    $assert_session->elementTextContains('css', "$uninstalled_row td:nth-of-type(4)", '8.x-1.1');
  }

  /**
   * Checks headers for a given table on the Update form.
   *
   * @param string $table_locator
   *   CSS locator to find the table to check the headers on.
   * @param string[] $expected_headers
   *   Array of expected header texts, keyed by CSS selectors relative to the
   *   thead tr (for example, "th:nth-of-type(3)").
   */
  private function checkTableHeaders($table_locator, array $expected_headers) {
    $assert_session = $this->assertSession();
    $assert_session->elementExists('css', $table_locator);
    foreach ($expected_headers as $locator => $header) {
      $assert_session->elementTextContains('css', "$table_locator thead tr $locator", $header);
    }
  }

}