Mercurial > hg > isophonics-drupal-site
diff core/profiles/standard/tests/src/Functional/StandardTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/profiles/standard/tests/src/Functional/StandardTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,202 @@ +<?php + +namespace Drupal\Tests\standard\Functional; + +use Drupal\Tests\SchemaCheckTestTrait; +use Drupal\contact\Entity\ContactForm; +use Drupal\Core\Url; +use Drupal\dynamic_page_cache\EventSubscriber\DynamicPageCacheSubscriber; +use Drupal\filter\Entity\FilterFormat; +use Drupal\Tests\BrowserTestBase; +use Drupal\user\Entity\Role; + +/** + * Tests Standard installation profile expectations. + * + * @group standard + */ +class StandardTest extends BrowserTestBase { + + use SchemaCheckTestTrait; + + protected $profile = 'standard'; + + /** + * The admin user. + * + * @var \Drupal\user\UserInterface + */ + protected $adminUser; + + /** + * Tests Standard installation profile. + */ + public function testStandard() { + $this->drupalGet(''); + $this->assertLink(t('Contact')); + $this->clickLink(t('Contact')); + $this->assertResponse(200); + + // Test anonymous user can access 'Main navigation' block. + $this->adminUser = $this->drupalCreateUser([ + 'administer blocks', + 'post comments', + 'skip comment approval', + 'create article content', + 'create page content', + ]); + $this->drupalLogin($this->adminUser); + // Configure the block. + $this->drupalGet('admin/structure/block/add/system_menu_block:main/bartik'); + $this->drupalPostForm(NULL, [ + 'region' => 'sidebar_first', + 'id' => 'main_navigation', + ], t('Save block')); + // Verify admin user can see the block. + $this->drupalGet(''); + $this->assertText('Main navigation'); + + // Verify we have role = aria on system_powered_by and help_block + // blocks. + $this->drupalGet('admin/structure/block'); + $elements = $this->xpath('//div[@role=:role and @id=:id]', [ + ':role' => 'complementary', + ':id' => 'block-bartik-help', + ]); + + $this->assertEqual(count($elements), 1, 'Found complementary role on help block.'); + + $this->drupalGet(''); + $elements = $this->xpath('//div[@role=:role and @id=:id]', [ + ':role' => 'complementary', + ':id' => 'block-bartik-powered', + ]); + $this->assertEqual(count($elements), 1, 'Found complementary role on powered by block.'); + + // Verify anonymous user can see the block. + $this->drupalLogout(); + $this->assertText('Main navigation'); + + // Ensure comments don't show in the front page RSS feed. + // Create an article. + $this->drupalCreateNode([ + 'type' => 'article', + 'title' => 'Foobar', + 'promote' => 1, + 'status' => 1, + 'body' => [['value' => 'Then she picked out two somebodies,<br />Sally and me', 'format' => 'basic_html']], + ]); + + // Add a comment. + $this->drupalLogin($this->adminUser); + $this->drupalGet('node/1'); + $this->assertRaw('Then she picked out two somebodies,<br />Sally and me', 'Found a line break.'); + $this->drupalPostForm(NULL, [ + 'subject[0][value]' => 'Barfoo', + 'comment_body[0][value]' => 'Then she picked out two somebodies, Sally and me', + ], t('Save')); + // Fetch the feed. + $this->drupalGet('rss.xml'); + $this->assertText('Foobar'); + $this->assertNoText('Then she picked out two somebodies, Sally and me'); + + // Ensure block body exists. + $this->drupalGet('block/add'); + $this->assertFieldByName('body[0][value]'); + + // Now we have all configuration imported, test all of them for schema + // conformance. Ensures all imported default configuration is valid when + // standard profile modules are enabled. + $names = $this->container->get('config.storage')->listAll(); + /** @var \Drupal\Core\Config\TypedConfigManagerInterface $typed_config */ + $typed_config = $this->container->get('config.typed'); + foreach ($names as $name) { + $config = $this->config($name); + $this->assertConfigSchema($typed_config, $name, $config->get()); + } + + // Ensure that configuration from the Standard profile is not reused when + // enabling a module again since it contains configuration that can not be + // installed. For example, editor.editor.basic_html is editor configuration + // that depends on the ckeditor module. The ckeditor module can not be + // installed before the editor module since it depends on the editor module. + // The installer does not have this limitation since it ensures that all of + // the install profiles dependencies are installed before creating the + // editor configuration. + foreach (FilterFormat::loadMultiple() as $filter) { + // Ensure that editor can be uninstalled by removing use in filter + // formats. It is necessary to prime the filter collection before removing + // the filter. + $filter->filters(); + $filter->removeFilter('editor_file_reference'); + $filter->save(); + } + \Drupal::service('module_installer')->uninstall(['editor', 'ckeditor']); + $this->rebuildContainer(); + \Drupal::service('module_installer')->install(['editor']); + /** @var \Drupal\contact\ContactFormInterface $contact_form */ + $contact_form = ContactForm::load('feedback'); + $recipients = $contact_form->getRecipients(); + $this->assertEqual(['simpletest@example.com'], $recipients); + + $role = Role::create([ + 'id' => 'admin_theme', + 'label' => 'Admin theme', + ]); + $role->grantPermission('view the administration theme'); + $role->save(); + $this->adminUser->addRole($role->id()); + $this->adminUser->save(); + $this->drupalGet('node/add'); + $this->assertResponse(200); + + // Ensure that there are no pending updates after installation. + $this->drupalLogin($this->rootUser); + $this->drupalGet('update.php/selection'); + $this->assertText('No pending updates.'); + + // Ensure that there are no pending entity updates after installation. + $this->assertFalse($this->container->get('entity.definition_update_manager')->needsUpdates(), 'After installation, entity schema is up to date.'); + + // Make sure the optional image styles are not installed. + $this->drupalGet('admin/config/media/image-styles'); + $this->assertNoText('Max 325x325'); + $this->assertNoText('Max 650x650'); + $this->assertNoText('Max 1300x1300'); + $this->assertNoText('Max 2600x2600'); + + // Make sure the optional image styles are installed after enabling + // the responsive_image module. + \Drupal::service('module_installer')->install(['responsive_image']); + $this->rebuildContainer(); + $this->drupalGet('admin/config/media/image-styles'); + $this->assertText('Max 325x325'); + $this->assertText('Max 650x650'); + $this->assertText('Max 1300x1300'); + $this->assertText('Max 2600x2600'); + + // Verify certain routes' responses are cacheable by Dynamic Page Cache, to + // ensure these responses are very fast for authenticated users. + $this->dumpHeaders = TRUE; + $this->drupalLogin($this->adminUser); + $url = Url::fromRoute('contact.site_page'); + $this->drupalGet($url); + $this->assertEqual('UNCACHEABLE', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Site-wide contact page cannot be cached by Dynamic Page Cache.'); + + $url = Url::fromRoute('<front>'); + $this->drupalGet($url); + $this->drupalGet($url); + $this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Frontpage is cached by Dynamic Page Cache.'); + + $url = Url::fromRoute('entity.node.canonical', ['node' => 1]); + $this->drupalGet($url); + $this->drupalGet($url); + $this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'Full node page is cached by Dynamic Page Cache.'); + + $url = Url::fromRoute('entity.user.canonical', ['user' => 1]); + $this->drupalGet($url); + $this->drupalGet($url); + $this->assertEqual('HIT', $this->drupalGetHeader(DynamicPageCacheSubscriber::HEADER), 'User profile page is cached by Dynamic Page Cache.'); + } + +}