annotate core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children c2387f117808
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\media\Functional;
Chris@0 4
Chris@14 5 use Behat\Mink\Element\NodeElement;
Chris@0 6 use Drupal\media\Entity\Media;
Chris@14 7 use Drupal\Core\Field\FieldStorageDefinitionInterface;
Chris@14 8 use Drupal\Core\Url;
Chris@14 9 use Drupal\field\Entity\FieldConfig;
Chris@14 10 use Drupal\field\Entity\FieldStorageConfig;
Chris@0 11
Chris@0 12 /**
Chris@0 13 * Ensures that media UI works correctly.
Chris@0 14 *
Chris@0 15 * @group media
Chris@0 16 */
Chris@0 17 class MediaUiFunctionalTest extends MediaFunctionalTestBase {
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Modules to enable.
Chris@0 21 *
Chris@0 22 * @var array
Chris@0 23 */
Chris@0 24 public static $modules = [
Chris@0 25 'block',
Chris@0 26 'media_test_source',
Chris@0 27 ];
Chris@0 28
Chris@0 29 /**
Chris@0 30 * {@inheritdoc}
Chris@0 31 */
Chris@0 32 protected function setUp() {
Chris@0 33 parent::setUp();
Chris@0 34 $this->drupalPlaceBlock('local_actions_block');
Chris@0 35 $this->drupalPlaceBlock('local_tasks_block');
Chris@0 36 }
Chris@0 37
Chris@0 38 /**
Chris@0 39 * Tests the media actions (add/edit/delete).
Chris@0 40 */
Chris@0 41 public function testMediaWithOnlyOneMediaType() {
Chris@0 42 $session = $this->getSession();
Chris@0 43 $page = $session->getPage();
Chris@0 44 $assert_session = $this->assertSession();
Chris@0 45
Chris@0 46 $media_type = $this->createMediaType([
Chris@0 47 'new_revision' => FALSE,
Chris@0 48 'queue_thumbnail_downloads' => FALSE,
Chris@0 49 ]);
Chris@0 50
Chris@0 51 $this->drupalGet('media/add');
Chris@0 52 $assert_session->statusCodeEquals(200);
Chris@0 53 $assert_session->addressEquals('media/add/' . $media_type->id());
Chris@0 54 $assert_session->elementNotExists('css', '#edit-revision');
Chris@0 55
Chris@0 56 // Tests media add form.
Chris@0 57 $media_name = $this->randomMachineName();
Chris@0 58 $page->fillField('name[0][value]', $media_name);
Chris@0 59 $revision_log_message = $this->randomString();
Chris@0 60 $page->fillField('revision_log_message[0][value]', $revision_log_message);
Chris@14 61 $source_field = $this->randomString();
Chris@14 62 $page->fillField('field_media_test[0][value]', $source_field);
Chris@0 63 $page->pressButton('Save');
Chris@0 64 $media_id = $this->container->get('entity.query')->get('media')->execute();
Chris@0 65 $media_id = reset($media_id);
Chris@0 66 /** @var \Drupal\media\MediaInterface $media */
Chris@0 67 $media = $this->container->get('entity_type.manager')
Chris@0 68 ->getStorage('media')
Chris@0 69 ->loadUnchanged($media_id);
Chris@0 70 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
Chris@0 71 $this->assertEquals($media->getName(), $media_name);
Chris@0 72 $assert_session->titleEquals($media_name . ' | Drupal');
Chris@0 73
Chris@0 74 // Tests media edit form.
Chris@0 75 $media_type->setNewRevision(FALSE);
Chris@0 76 $media_type->save();
Chris@0 77 $media_name2 = $this->randomMachineName();
Chris@0 78 $this->drupalGet('media/' . $media_id . '/edit');
Chris@0 79 $assert_session->checkboxNotChecked('edit-revision');
Chris@0 80 $media_name = $this->randomMachineName();
Chris@0 81 $page->fillField('name[0][value]', $media_name2);
Chris@0 82 $page->pressButton('Save');
Chris@0 83 /** @var \Drupal\media\MediaInterface $media */
Chris@0 84 $media = $this->container->get('entity_type.manager')
Chris@0 85 ->getStorage('media')
Chris@0 86 ->loadUnchanged($media_id);
Chris@0 87 $this->assertEquals($media->getName(), $media_name2);
Chris@0 88 $assert_session->titleEquals($media_name2 . ' | Drupal');
Chris@0 89
Chris@0 90 // Test that there is no empty vertical tabs element, if the container is
Chris@0 91 // empty (see #2750697).
Chris@0 92 // Make the "Publisher ID" and "Created" fields hidden.
Chris@0 93 $this->drupalGet('/admin/structure/media/manage/' . $media_type->id() . '/form-display');
Chris@0 94 $page->selectFieldOption('fields[created][parent]', 'hidden');
Chris@0 95 $page->selectFieldOption('fields[uid][parent]', 'hidden');
Chris@0 96 $page->pressButton('Save');
Chris@0 97 // Assure we are testing with a user without permission to manage revisions.
Chris@0 98 $this->drupalLogin($this->nonAdminUser);
Chris@0 99 // Check the container is not present.
Chris@0 100 $this->drupalGet('media/' . $media_id . '/edit');
Chris@0 101 $assert_session->elementNotExists('css', 'input.vertical-tabs__active-tab');
Chris@0 102 // Continue testing as admin.
Chris@0 103 $this->drupalLogin($this->adminUser);
Chris@0 104
Chris@0 105 // Enable revisions by default.
Chris@0 106 $previous_revision_id = $media->getRevisionId();
Chris@0 107 $media_type->setNewRevision(TRUE);
Chris@0 108 $media_type->save();
Chris@0 109 $this->drupalGet('media/' . $media_id . '/edit');
Chris@0 110 $assert_session->checkboxChecked('edit-revision');
Chris@0 111 $page->fillField('name[0][value]', $media_name);
Chris@0 112 $page->fillField('revision_log_message[0][value]', $revision_log_message);
Chris@0 113 $page->pressButton('Save');
Chris@0 114 $assert_session->titleEquals($media_name . ' | Drupal');
Chris@0 115 /** @var \Drupal\media\MediaInterface $media */
Chris@0 116 $media = $this->container->get('entity_type.manager')
Chris@0 117 ->getStorage('media')
Chris@0 118 ->loadUnchanged($media_id);
Chris@0 119 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
Chris@0 120 $this->assertNotEquals($previous_revision_id, $media->getRevisionId());
Chris@0 121
Chris@0 122 // Test the status checkbox.
Chris@0 123 $this->drupalGet('media/' . $media_id . '/edit');
Chris@0 124 $page->uncheckField('status[value]');
Chris@0 125 $page->pressButton('Save');
Chris@0 126 /** @var \Drupal\media\MediaInterface $media */
Chris@0 127 $media = $this->container->get('entity_type.manager')
Chris@0 128 ->getStorage('media')
Chris@0 129 ->loadUnchanged($media_id);
Chris@0 130 $this->assertFalse($media->isPublished());
Chris@0 131
Chris@0 132 // Tests media delete form.
Chris@0 133 $this->drupalGet('media/' . $media_id . '/edit');
Chris@0 134 $page->clickLink('Delete');
Chris@0 135 $assert_session->pageTextContains('This action cannot be undone');
Chris@0 136 $page->pressButton('Delete');
Chris@0 137 $media_id = \Drupal::entityQuery('media')->execute();
Chris@0 138 $this->assertFalse($media_id);
Chris@0 139 }
Chris@0 140
Chris@0 141 /**
Chris@0 142 * Tests the "media/add" and "media/mid" pages.
Chris@0 143 *
Chris@0 144 * Tests if the "media/add" page gives you a selecting option if there are
Chris@0 145 * multiple media types available.
Chris@0 146 */
Chris@0 147 public function testMediaWithMultipleMediaTypes() {
Chris@0 148 $assert_session = $this->assertSession();
Chris@0 149
Chris@0 150 // Tests and creates the first media type.
Chris@0 151 $first_media_type = $this->createMediaType(['description' => $this->randomMachineName(32)]);
Chris@0 152
Chris@0 153 // Test and create a second media type.
Chris@0 154 $second_media_type = $this->createMediaType(['description' => $this->randomMachineName(32)]);
Chris@0 155
Chris@0 156 // Test if media/add displays two media type options.
Chris@0 157 $this->drupalGet('media/add');
Chris@0 158
Chris@0 159 // Checks for the first media type.
Chris@0 160 $assert_session->pageTextContains($first_media_type->label());
Chris@0 161 $assert_session->pageTextContains($first_media_type->getDescription());
Chris@0 162 // Checks for the second media type.
Chris@0 163 $assert_session->pageTextContains($second_media_type->label());
Chris@0 164 $assert_session->pageTextContains($second_media_type->getDescription());
Chris@0 165
Chris@0 166 // Continue testing media type filter.
Chris@0 167 $first_media_item = Media::create(['bundle' => $first_media_type->id()]);
Chris@0 168 $first_media_item->save();
Chris@0 169 $second_media_item = Media::create(['bundle' => $second_media_type->id()]);
Chris@0 170 $second_media_item->save();
Chris@0 171
Chris@0 172 // Go to first media item.
Chris@0 173 $this->drupalGet('media/' . $first_media_item->id());
Chris@0 174 $assert_session->statusCodeEquals(200);
Chris@0 175 $assert_session->pageTextContains($first_media_item->getName());
Chris@0 176
Chris@0 177 // Go to second media item.
Chris@0 178 $this->drupalGet('media/' . $second_media_item->id());
Chris@0 179 $assert_session->statusCodeEquals(200);
Chris@0 180 $assert_session->pageTextContains($second_media_item->getName());
Chris@0 181 }
Chris@0 182
Chris@14 183 /**
Chris@14 184 * Test that media in ER fields use the Rendered Entity formatter by default.
Chris@14 185 */
Chris@14 186 public function testRenderedEntityReferencedMedia() {
Chris@14 187 $page = $this->getSession()->getPage();
Chris@14 188 $assert_session = $this->assertSession();
Chris@14 189
Chris@14 190 $this->drupalCreateContentType(['type' => 'page', 'name' => 'Page']);
Chris@14 191 $this->drupalGet('/admin/structure/types/manage/page/fields/add-field');
Chris@14 192 $page->selectFieldOption('new_storage_type', 'field_ui:entity_reference:media');
Chris@14 193 $page->fillField('label', 'Foo field');
Chris@14 194 $page->fillField('field_name', 'foo_field');
Chris@14 195 $page->pressButton('Save and continue');
Chris@14 196 $this->drupalGet('/admin/structure/types/manage/page/display');
Chris@14 197 $assert_session->fieldValueEquals('fields[field_foo_field][type]', 'entity_reference_entity_view');
Chris@14 198 }
Chris@14 199
Chris@14 200 /**
Chris@14 201 * Data provider for testMediaReferenceWidget().
Chris@14 202 *
Chris@14 203 * @return array[]
Chris@14 204 * Test data. See testMediaReferenceWidget() for the child array structure.
Chris@14 205 */
Chris@14 206 public function providerTestMediaReferenceWidget() {
Chris@14 207 return [
Chris@14 208 // Single-value fields with a single media type and the default widget:
Chris@14 209 // - The user can create and list the media.
Chris@14 210 'single_value:single_type:create_list' => [1, [TRUE], TRUE],
Chris@14 211 // - The user can list but not create the media.
Chris@14 212 'single_value:single_type:list' => [1, [FALSE], TRUE],
Chris@14 213 // - The user can create but not list the media.
Chris@14 214 'single_value:single_type:create' => [1, [TRUE], FALSE],
Chris@14 215 // - The user can neither create nor list the media.
Chris@14 216 'single_value:single_type' => [1, [FALSE], FALSE],
Chris@14 217
Chris@14 218 // Single-value fields with the tags-style widget:
Chris@14 219 // - The user can create and list the media.
Chris@14 220 'single_value:single_type:create_list:tags' => [1, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@14 221 // - The user can list but not create the media.
Chris@14 222 'single_value:single_type:list:tags' => [1, [FALSE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@14 223 // - The user can create but not list the media.
Chris@14 224 'single_value:single_type:create:tags' => [1, [TRUE], FALSE, 'entity_reference_autocomplete_tags'],
Chris@14 225 // - The user can neither create nor list the media.
Chris@14 226 'single_value:single_type:tags' => [1, [FALSE], FALSE, 'entity_reference_autocomplete_tags'],
Chris@14 227
Chris@14 228 // Single-value fields with two media types:
Chris@14 229 // - The user can create both types.
Chris@14 230 'single_value:two_type:create2_list' => [1, [TRUE, TRUE], TRUE],
Chris@14 231 // - The user can create only one type.
Chris@14 232 'single_value:two_type:create1_list' => [1, [TRUE, FALSE], TRUE],
Chris@14 233 // - The user cannot create either type.
Chris@14 234 'single_value:two_type:list' => [1, [FALSE, FALSE], TRUE],
Chris@14 235
Chris@14 236 // Multiple-value field with a cardinality of 3, with media the user can
Chris@14 237 // create and list.
Chris@14 238 'multi_value:single_type:create_list' => [3, [TRUE], TRUE],
Chris@14 239 // The same, with the tags field.
Chris@14 240 'multi-value:single_type:create_list:tags' => [3, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@14 241
Chris@14 242 // Unlimited value field.
Chris@14 243 'unlimited_value:single_type:create_list' => [FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, [TRUE], TRUE],
Chris@14 244 // Unlimited value field with the tags widget.
Chris@14 245 'unlimited_value:single_type:create_list' => [FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@14 246 ];
Chris@14 247 }
Chris@14 248
Chris@14 249 /**
Chris@14 250 * Tests the default autocomplete widgets for media reference fields.
Chris@14 251 *
Chris@14 252 * @param int $cardinality
Chris@14 253 * The field cardinality.
Chris@14 254 * @param bool[] $media_type_create_access
Chris@14 255 * An array of booleans indicating whether to grant the test user create
Chris@14 256 * access for each media type. A media type is created automatically for
Chris@14 257 * each; for example, an array [TRUE, FALSE] would create two media types,
Chris@14 258 * one that allows the user to create media and a second that does not.
Chris@14 259 * @param bool $list_access
Chris@14 260 * Whether to grant the test user access to list media.
Chris@14 261 *
Chris@14 262 * @see media_field_widget_entity_reference_autocomplete_form_alter()
Chris@14 263 * @see media_field_widget_multiple_entity_reference_autocomplete_form_alter()
Chris@14 264 *
Chris@14 265 * @dataProvider providerTestMediaReferenceWidget
Chris@14 266 */
Chris@14 267 public function testMediaReferenceWidget($cardinality, array $media_type_create_access, $list_access, $widget_id = 'entity_reference_autocomplete') {
Chris@14 268 $assert_session = $this->assertSession();
Chris@14 269
Chris@14 270 // Create two content types.
Chris@14 271 $non_media_content_type = $this->createContentType();
Chris@14 272 $content_type = $this->createContentType();
Chris@14 273
Chris@14 274 // Create some media types.
Chris@14 275 $media_types = [];
Chris@14 276 $permissions = [];
Chris@14 277 $create_media_types = [];
Chris@14 278 foreach ($media_type_create_access as $id => $access) {
Chris@14 279 if ($access) {
Chris@14 280 $create_media_types[] = "media_type_$id";
Chris@14 281 $permissions[] = "create media_type_$id media";
Chris@14 282 }
Chris@14 283 $this->createMediaType(['bundle' => "media_type_$id"]);
Chris@14 284 $media_types["media_type_$id"] = "media_type_$id";
Chris@14 285 }
Chris@14 286
Chris@14 287 // Create a user that can create content of the type, with other
Chris@14 288 // permissions as given by the data provider.
Chris@14 289 $permissions[] = "create {$content_type->id()} content";
Chris@14 290 if ($list_access) {
Chris@14 291 $permissions[] = "access media overview";
Chris@14 292 }
Chris@14 293 $test_user = $this->drupalCreateUser($permissions);
Chris@14 294
Chris@14 295 // Create a non-media entity reference.
Chris@14 296 $non_media_storage = FieldStorageConfig::create([
Chris@14 297 'field_name' => 'field_not_a_media_field',
Chris@14 298 'entity_type' => 'node',
Chris@14 299 'type' => 'entity_reference',
Chris@14 300 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
Chris@14 301 'settings' => [
Chris@14 302 'target_type' => 'node',
Chris@14 303 ],
Chris@14 304 ]);
Chris@14 305 $non_media_storage->save();
Chris@14 306 $non_media_field = FieldConfig::create([
Chris@14 307 'label' => 'No media here!',
Chris@14 308 'field_storage' => $non_media_storage,
Chris@14 309 'entity_type' => 'node',
Chris@14 310 'bundle' => $non_media_content_type->id(),
Chris@14 311 'settings' => [
Chris@14 312 'handler' => 'default',
Chris@14 313 'handler_settings' => [
Chris@14 314 'target_bundles' => [
Chris@14 315 $non_media_content_type->id() => $non_media_content_type->id(),
Chris@14 316 ],
Chris@14 317 ],
Chris@14 318 ],
Chris@14 319 ]);
Chris@14 320 $non_media_field->save();
Chris@14 321 \Drupal::entityTypeManager()
Chris@14 322 ->getStorage('entity_form_display')
Chris@14 323 ->load('node.' . $non_media_content_type->id() . '.default')
Chris@14 324 ->setComponent('field_not_a_media_field', [
Chris@14 325 'type' => $widget_id,
Chris@14 326 ])
Chris@14 327 ->save();
Chris@14 328
Chris@14 329 // Create a media field through the user interface to ensure that the
Chris@14 330 // help text handling does not break the default value entry on the field
Chris@14 331 // settings form.
Chris@14 332 // Using drupalPostForm() to avoid dealing with JavaScript on the previous
Chris@14 333 // page in the field creation.
Chris@14 334 $edit = [
Chris@14 335 'new_storage_type' => 'field_ui:entity_reference:media',
Chris@14 336 'label' => "Media (cardinality $cardinality)",
Chris@14 337 'field_name' => 'media_reference',
Chris@14 338 ];
Chris@14 339 $this->drupalPostForm("admin/structure/types/manage/{$content_type->id()}/fields/add-field", $edit, 'Save and continue');
Chris@14 340 $edit = [];
Chris@14 341 foreach ($media_types as $type) {
Chris@14 342 $edit["settings[handler_settings][target_bundles][$type]"] = TRUE;
Chris@14 343 }
Chris@14 344 $this->drupalPostForm("admin/structure/types/manage/{$content_type->id()}/fields/node.{$content_type->id()}.field_media_reference", $edit, "Save settings");
Chris@14 345 \Drupal::entityTypeManager()
Chris@14 346 ->getStorage('entity_form_display')
Chris@14 347 ->load('node.' . $content_type->id() . '.default')
Chris@14 348 ->setComponent('field_media_reference', [
Chris@14 349 'type' => $widget_id,
Chris@14 350 ])
Chris@14 351 ->save();
Chris@14 352
Chris@14 353 // Some of the expected texts.
Chris@14 354 $create_help = 'Create your media on the media add page (opens a new window), then add it by name to the field below.';
Chris@14 355 $list_text = 'See the media list (opens a new window) to help locate media.';
Chris@14 356 $use_help = 'Type part of the media name.';
Chris@14 357 $create_header = "Create new media";
Chris@14 358 $use_header = "Use existing media";
Chris@14 359
Chris@14 360 // First check that none of the help texts are on the non-media content.
Chris@14 361 $this->drupalGet("/node/add/{$non_media_content_type->id()}");
Chris@14 362 $this->assertNoHelpTexts([
Chris@14 363 $create_header,
Chris@14 364 $create_help,
Chris@14 365 $use_header,
Chris@14 366 $use_help,
Chris@14 367 $list_text,
Chris@14 368 'Allowed media types:',
Chris@14 369 ]);
Chris@14 370
Chris@14 371 // Now, check that the widget displays the expected help text under the
Chris@14 372 // given conditions for the test user.
Chris@14 373 $this->drupalLogin($test_user);
Chris@14 374 $this->drupalGet("/node/add/{$content_type->id()}");
Chris@14 375
Chris@14 376 // Specific expected help texts for the media field.
Chris@14 377 $create_header = "Create new media";
Chris@14 378 $use_header = "Use existing media";
Chris@14 379 $type_list = 'Allowed media types: ' . implode(", ", array_keys($media_types));
Chris@14 380
Chris@14 381 $fieldset_selector = '#edit-field-media-reference-wrapper fieldset';
Chris@14 382 $fieldset = $assert_session->elementExists('css', $fieldset_selector);
Chris@14 383
Chris@14 384 $this->assertSame("Media (cardinality $cardinality)", $assert_session->elementExists('css', 'legend', $fieldset)->getText());
Chris@14 385
Chris@14 386 // Assert text that should be displayed regardless of other access.
Chris@14 387 $this->assertHelpTexts([$use_header, $use_help, $type_list], $fieldset_selector);
Chris@14 388
Chris@14 389 // The entire section for creating new media should only be displayed if
Chris@14 390 // the user can create at least one media of the type.
Chris@14 391 if ($create_media_types) {
Chris@14 392 if (count($create_media_types) === 1) {
Chris@14 393 $url = Url::fromRoute('entity.media.add_form')->setRouteParameter('media_type', $create_media_types[0]);
Chris@14 394 }
Chris@14 395 else {
Chris@14 396 $url = Url::fromRoute('entity.media.add_page');
Chris@14 397 }
Chris@14 398 $this->assertHelpTexts([$create_header, $create_help], $fieldset_selector);
Chris@14 399 $this->assertHelpLink(
Chris@14 400 $fieldset,
Chris@14 401 'media add page',
Chris@14 402 [
Chris@14 403 'target' => '_blank',
Chris@14 404 'href' => $url->toString(),
Chris@14 405 ]
Chris@14 406 );
Chris@14 407 }
Chris@14 408 else {
Chris@14 409 $this->assertNoHelpTexts([$create_header, $create_help]);
Chris@14 410 $this->assertNoHelpLink($fieldset, 'media add page');
Chris@14 411 }
Chris@14 412
Chris@14 413 if ($list_access) {
Chris@14 414 $this->assertHelpTexts([$list_text], $fieldset_selector);
Chris@14 415 $this->assertHelpLink(
Chris@14 416 $fieldset,
Chris@14 417 'media list',
Chris@14 418 [
Chris@14 419 'target' => '_blank',
Chris@14 420 'href' => Url::fromRoute('entity.media.collection')->toString(),
Chris@14 421 ]
Chris@14 422 );
Chris@14 423 }
Chris@14 424 else {
Chris@14 425 $this->assertNoHelpTexts([$list_text]);
Chris@14 426 $this->assertNoHelpLink($fieldset, 'media list');
Chris@14 427 }
Chris@14 428 }
Chris@14 429
Chris@14 430 /**
Chris@14 431 * Asserts that the given texts are present exactly once.
Chris@14 432 *
Chris@14 433 * @param string[] $texts
Chris@14 434 * A list of the help texts to check.
Chris@14 435 * @param string $selector
Chris@14 436 * (optional) The selector to search.
Chris@14 437 */
Chris@14 438 public function assertHelpTexts(array $texts, $selector = '') {
Chris@14 439 $assert_session = $this->assertSession();
Chris@14 440 foreach ($texts as $text) {
Chris@14 441 // We only want to escape single quotes, so use str_replace() rather than
Chris@14 442 // addslashes().
Chris@14 443 $text = str_replace("'", "\'", $text);
Chris@14 444 if ($selector) {
Chris@14 445 $assert_session->elementsCount('css', $selector . ":contains('$text')", 1);
Chris@14 446 }
Chris@14 447 else {
Chris@14 448 $assert_session->pageTextContains($text);
Chris@14 449 }
Chris@14 450 }
Chris@14 451 }
Chris@14 452
Chris@14 453 /**
Chris@14 454 * Asserts that none of the given texts are present.
Chris@14 455 *
Chris@14 456 * @param string[] $texts
Chris@14 457 * A list of the help texts to check.
Chris@14 458 */
Chris@14 459 public function assertNoHelpTexts(array $texts) {
Chris@14 460 $assert_session = $this->assertSession();
Chris@14 461 foreach ($texts as $text) {
Chris@14 462 $assert_session->pageTextNotContains($text);
Chris@14 463 }
Chris@14 464 }
Chris@14 465
Chris@14 466 /**
Chris@14 467 * Asserts whether a given link is present.
Chris@14 468 *
Chris@14 469 * @param \Behat\Mink\Element\NodeElement $element
Chris@14 470 * The element to search.
Chris@14 471 * @param string $text
Chris@14 472 * The link text.
Chris@14 473 * @param string[] $attributes
Chris@14 474 * An associative array of any expected attributes, keyed by the
Chris@14 475 * attribute name.
Chris@14 476 */
Chris@14 477 protected function assertHelpLink(NodeElement $element, $text, array $attributes = []) {
Chris@14 478 // Find all the links inside the element.
Chris@14 479 $link = $element->findLink($text);
Chris@14 480
Chris@14 481 $this->assertNotEmpty($link);
Chris@14 482 foreach ($attributes as $attribute => $value) {
Chris@14 483 $this->assertEquals($link->getAttribute($attribute), $value);
Chris@14 484 }
Chris@14 485 }
Chris@14 486
Chris@14 487 /**
Chris@14 488 * Asserts that a given link is not present.
Chris@14 489 *
Chris@14 490 * @param \Behat\Mink\Element\NodeElement $element
Chris@14 491 * The element to search.
Chris@14 492 * @param string $text
Chris@14 493 * The link text.
Chris@14 494 */
Chris@14 495 protected function assertNoHelpLink(NodeElement $element, $text) {
Chris@14 496 $assert_session = $this->assertSession();
Chris@14 497 // Assert that the link and its text are not present anywhere on the page.
Chris@14 498 $assert_session->elementNotExists('named', ['link', $text], $element);
Chris@14 499 $assert_session->pageTextNotContains($text);
Chris@14 500 }
Chris@14 501
Chris@14 502 /**
Chris@14 503 * Test the media collection route.
Chris@14 504 */
Chris@14 505 public function testMediaCollectionRoute() {
Chris@14 506 /** @var \Drupal\Core\Entity\EntityStorageInterface $media_storage */
Chris@14 507 $media_storage = $this->container->get('entity_type.manager')->getStorage('media');
Chris@14 508
Chris@14 509 $this->container->get('module_installer')->uninstall(['views']);
Chris@14 510
Chris@14 511 // Create a media type and media item.
Chris@14 512 $media_type = $this->createMediaType();
Chris@14 513 $media = $media_storage->create([
Chris@14 514 'bundle' => $media_type->id(),
Chris@14 515 'name' => 'Unnamed',
Chris@14 516 ]);
Chris@14 517 $media->save();
Chris@14 518
Chris@14 519 $this->drupalGet($media->toUrl('collection'));
Chris@14 520
Chris@14 521 $assert_session = $this->assertSession();
Chris@14 522
Chris@14 523 // Media list table exists.
Chris@14 524 $assert_session->elementExists('css', 'th:contains("Media Name")');
Chris@14 525 $assert_session->elementExists('css', 'th:contains("Type")');
Chris@14 526 $assert_session->elementExists('css', 'th:contains("Operations")');
Chris@14 527 // Media item is present.
Chris@14 528 $assert_session->elementExists('css', 'td:contains("Unnamed")');
Chris@14 529 }
Chris@14 530
Chris@0 531 }