1 installer.test public InstallerBrowserAdministrationTestCase::testProjectBrowserInstallPage()

File

core/modules/installer/tests/installer.test, line 87

Class

InstallerBrowserAdministrationTestCase
Administration tests for Project Browser.

Code

public function testProjectBrowserInstallPage() {
  // Refresh the page
  $this->backdropGet('admin/modules/install');
  $module_one = 'ddd_installer_test';
  $module_two = 'eee_installer_test';

  // Attempt to install a project
  $this->backdropGet('admin/installer/queue/nojs/add/' . $module_one, array('query' => array('destination' => 'admin/modules/install')));
  $this->backdropGet('admin/installer/queue/nojs/add/' . $module_two, array('query' => array('destination' => 'admin/modules/install')));
  $this->backdropPost('admin/modules/install', array(), t('Install'));

  // Check that this is the install page
  $this->assertText("You're about to install");

  // Check that two projects are listed for install and the recommended
  // version is shown.
  $module_one_data = $this->getProjectData($module_one);
  $this->assertText($module_one_data['title'] . ' ' . $module_one_data['recommended']);
  $module_two_data = $this->getProjectData($module_two);
  $this->assertText($module_two_data['title'] . ' ' . $module_two_data['recommended']);

  // Check that two versions of EEE Installer test are listed
  $releases = $this->xpath('//div[contains(@class, "installer-browser-releases-radios")]//div[contains(@class, "form-item-releases-eee-installer-test-release-name")]');
  $this->assertEqual(count($releases), 2, 'Two releases available for EEE Installer test.');

  // Cancel and go back to project list
  $this->backdropGet('admin/installer/reset/module/all');

  // Check project installs
  $this->backdropGet('admin/installer/queue/nojs/add/' . $module_one, array('query' => array('destination' => 'admin/modules/install')));
  $this->backdropPost('admin/modules/install', array(), t('Install'));

  // Check that this is the install page
  $this->assertText("You're about to install");

  // Set maintenance mode off
  $edit = array(
    // Cannot test in maintenance mode, as the HTTP request to fetch projects
    // always will fail since we are fetching from the (now offline) site
    // itself.
    'maintenance_mode' => FALSE,
  );
  $this->backdropPost(NULL, $edit, t('Install'));

  // Check that dependencies install page loaded with the recommended
  // dependency selected.
  $dependencies_page = $this->xpath('//h1[contains(@class, "page-title") and normalize-space(text()) = "Install Dependencies"]');
  $this->assertTrue($dependencies_page, 'The Install Dependencies page was loaded');
  $this->assertText($module_two . ' ' . $module_two_data['recommended']);

  // Test that the test module was really downloaded.
  $this->assertTrue(file_exists('modules/' . $module_one), $module_one_data['title'] . ' exists in the modules directory');

  // Test that project two installs.
  $this->backdropPost(NULL, $edit, t('Install'));

  // Check that enable page loaded.
  $dependencies_page = $this->xpath('//h1[contains(@class, "page-title") and normalize-space(text()) = "Enable modules"]');
  $this->assertTrue($dependencies_page, 'The Enable modules page was loaded');

  // Test that the test module was really downloaded.
  $this->assertTrue(file_exists('modules/' . $module_two), $module_two_data['title'] . ' exists in the modules directory');

  // Enable both modules.
  $edit = array(
    'modules[ddd_installer_test]' => TRUE,
    'modules[eee_installer_test]' => TRUE,
  );
  $this->backdropPost(NULL, $edit, t('Enable modules'));
  $this->resetAll();
  $this->assertTrue(module_exists($module_one), $module_one_data['title'] . ' was enabled.');
  $this->assertTrue(module_exists($module_two), $module_two_data['title'] . ' was enabled.');

  // Delete the test module files.
  foreach (array('ddd_installer_test', 'eee_installer_test') as $test_module) {
    $directory = backdrop_get_path('module', $test_module);
    $this->assertTrue(file_unmanaged_delete_recursive($directory), 'Deleted test module.');
  }
}