annotate core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php @ 0:c75dbcec494b

Initial commit from drush-created site
author Chris Cannam
date Thu, 05 Jul 2018 14:24:15 +0000
parents
children a9cd425dd02b
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\media\Functional;
Chris@0 4
Chris@0 5 use Behat\Mink\Element\NodeElement;
Chris@0 6 use Drupal\media\Entity\Media;
Chris@0 7 use Drupal\Core\Field\FieldStorageDefinitionInterface;
Chris@0 8 use Drupal\Core\Url;
Chris@0 9 use Drupal\field\Entity\FieldConfig;
Chris@0 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@0 61 $source_field = $this->randomString();
Chris@0 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 $assert_session->elementsCount('css', '.media--view-mode-full', 1);
Chris@0 177
Chris@0 178 // Go to second media item.
Chris@0 179 $this->drupalGet('media/' . $second_media_item->id());
Chris@0 180 $assert_session->statusCodeEquals(200);
Chris@0 181 $assert_session->pageTextContains($second_media_item->getName());
Chris@0 182 }
Chris@0 183
Chris@0 184 /**
Chris@0 185 * Test that media in ER fields use the Rendered Entity formatter by default.
Chris@0 186 */
Chris@0 187 public function testRenderedEntityReferencedMedia() {
Chris@0 188 $page = $this->getSession()->getPage();
Chris@0 189 $assert_session = $this->assertSession();
Chris@0 190
Chris@0 191 $this->drupalCreateContentType(['type' => 'page', 'name' => 'Page']);
Chris@0 192 $this->drupalGet('/admin/structure/types/manage/page/fields/add-field');
Chris@0 193 $page->selectFieldOption('new_storage_type', 'field_ui:entity_reference:media');
Chris@0 194 $page->fillField('label', 'Foo field');
Chris@0 195 $page->fillField('field_name', 'foo_field');
Chris@0 196 $page->pressButton('Save and continue');
Chris@0 197 $this->drupalGet('/admin/structure/types/manage/page/display');
Chris@0 198 $assert_session->fieldValueEquals('fields[field_foo_field][type]', 'entity_reference_entity_view');
Chris@0 199 }
Chris@0 200
Chris@0 201 /**
Chris@0 202 * Data provider for testMediaReferenceWidget().
Chris@0 203 *
Chris@0 204 * @return array[]
Chris@0 205 * Test data. See testMediaReferenceWidget() for the child array structure.
Chris@0 206 */
Chris@0 207 public function providerTestMediaReferenceWidget() {
Chris@0 208 return [
Chris@0 209 // Single-value fields with a single media type and the default widget:
Chris@0 210 // - The user can create and list the media.
Chris@0 211 'single_value:single_type:create_list' => [1, [TRUE], TRUE],
Chris@0 212 // - The user can list but not create the media.
Chris@0 213 'single_value:single_type:list' => [1, [FALSE], TRUE],
Chris@0 214 // - The user can create but not list the media.
Chris@0 215 'single_value:single_type:create' => [1, [TRUE], FALSE],
Chris@0 216 // - The user can neither create nor list the media.
Chris@0 217 'single_value:single_type' => [1, [FALSE], FALSE],
Chris@0 218
Chris@0 219 // Single-value fields with the tags-style widget:
Chris@0 220 // - The user can create and list the media.
Chris@0 221 'single_value:single_type:create_list:tags' => [1, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@0 222 // - The user can list but not create the media.
Chris@0 223 'single_value:single_type:list:tags' => [1, [FALSE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@0 224 // - The user can create but not list the media.
Chris@0 225 'single_value:single_type:create:tags' => [1, [TRUE], FALSE, 'entity_reference_autocomplete_tags'],
Chris@0 226 // - The user can neither create nor list the media.
Chris@0 227 'single_value:single_type:tags' => [1, [FALSE], FALSE, 'entity_reference_autocomplete_tags'],
Chris@0 228
Chris@0 229 // Single-value fields with two media types:
Chris@0 230 // - The user can create both types.
Chris@0 231 'single_value:two_type:create2_list' => [1, [TRUE, TRUE], TRUE],
Chris@0 232 // - The user can create only one type.
Chris@0 233 'single_value:two_type:create1_list' => [1, [TRUE, FALSE], TRUE],
Chris@0 234 // - The user cannot create either type.
Chris@0 235 'single_value:two_type:list' => [1, [FALSE, FALSE], TRUE],
Chris@0 236
Chris@0 237 // Multiple-value field with a cardinality of 3, with media the user can
Chris@0 238 // create and list.
Chris@0 239 'multi_value:single_type:create_list' => [3, [TRUE], TRUE],
Chris@0 240 // The same, with the tags field.
Chris@0 241 'multi-value:single_type:create_list:tags' => [3, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@0 242
Chris@0 243 // Unlimited value field.
Chris@0 244 'unlimited_value:single_type:create_list' => [FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, [TRUE], TRUE],
Chris@0 245 // Unlimited value field with the tags widget.
Chris@0 246 'unlimited_value:single_type:create_list' => [FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED, [TRUE], TRUE, 'entity_reference_autocomplete_tags'],
Chris@0 247 ];
Chris@0 248 }
Chris@0 249
Chris@0 250 /**
Chris@0 251 * Tests the default autocomplete widgets for media reference fields.
Chris@0 252 *
Chris@0 253 * @param int $cardinality
Chris@0 254 * The field cardinality.
Chris@0 255 * @param bool[] $media_type_create_access
Chris@0 256 * An array of booleans indicating whether to grant the test user create
Chris@0 257 * access for each media type. A media type is created automatically for
Chris@0 258 * each; for example, an array [TRUE, FALSE] would create two media types,
Chris@0 259 * one that allows the user to create media and a second that does not.
Chris@0 260 * @param bool $list_access
Chris@0 261 * Whether to grant the test user access to list media.
Chris@0 262 *
Chris@0 263 * @see media_field_widget_entity_reference_autocomplete_form_alter()
Chris@0 264 * @see media_field_widget_multiple_entity_reference_autocomplete_form_alter()
Chris@0 265 *
Chris@0 266 * @dataProvider providerTestMediaReferenceWidget
Chris@0 267 */
Chris@0 268 public function testMediaReferenceWidget($cardinality, array $media_type_create_access, $list_access, $widget_id = 'entity_reference_autocomplete') {
Chris@0 269 $assert_session = $this->assertSession();
Chris@0 270
Chris@0 271 // Create two content types.
Chris@0 272 $non_media_content_type = $this->createContentType();
Chris@0 273 $content_type = $this->createContentType();
Chris@0 274
Chris@0 275 // Create some media types.
Chris@0 276 $media_types = [];
Chris@0 277 $permissions = [];
Chris@0 278 $create_media_types = [];
Chris@0 279 foreach ($media_type_create_access as $id => $access) {
Chris@0 280 if ($access) {
Chris@0 281 $create_media_types[] = "media_type_$id";
Chris@0 282 $permissions[] = "create media_type_$id media";
Chris@0 283 }
Chris@0 284 $this->createMediaType(['bundle' => "media_type_$id"]);
Chris@0 285 $media_types["media_type_$id"] = "media_type_$id";
Chris@0 286 }
Chris@0 287
Chris@0 288 // Create a user that can create content of the type, with other
Chris@0 289 // permissions as given by the data provider.
Chris@0 290 $permissions[] = "create {$content_type->id()} content";
Chris@0 291 if ($list_access) {
Chris@0 292 $permissions[] = "access media overview";
Chris@0 293 }
Chris@0 294 $test_user = $this->drupalCreateUser($permissions);
Chris@0 295
Chris@0 296 // Create a non-media entity reference.
Chris@0 297 $non_media_storage = FieldStorageConfig::create([
Chris@0 298 'field_name' => 'field_not_a_media_field',
Chris@0 299 'entity_type' => 'node',
Chris@0 300 'type' => 'entity_reference',
Chris@0 301 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
Chris@0 302 'settings' => [
Chris@0 303 'target_type' => 'node',
Chris@0 304 ],
Chris@0 305 ]);
Chris@0 306 $non_media_storage->save();
Chris@0 307 $non_media_field = FieldConfig::create([
Chris@0 308 'label' => 'No media here!',
Chris@0 309 'field_storage' => $non_media_storage,
Chris@0 310 'entity_type' => 'node',
Chris@0 311 'bundle' => $non_media_content_type->id(),
Chris@0 312 'settings' => [
Chris@0 313 'handler' => 'default',
Chris@0 314 'handler_settings' => [
Chris@0 315 'target_bundles' => [
Chris@0 316 $non_media_content_type->id() => $non_media_content_type->id(),
Chris@0 317 ],
Chris@0 318 ],
Chris@0 319 ],
Chris@0 320 ]);
Chris@0 321 $non_media_field->save();
Chris@0 322 \Drupal::entityTypeManager()
Chris@0 323 ->getStorage('entity_form_display')
Chris@0 324 ->load('node.' . $non_media_content_type->id() . '.default')
Chris@0 325 ->setComponent('field_not_a_media_field', [
Chris@0 326 'type' => $widget_id,
Chris@0 327 ])
Chris@0 328 ->save();
Chris@0 329
Chris@0 330 // Create a media field through the user interface to ensure that the
Chris@0 331 // help text handling does not break the default value entry on the field
Chris@0 332 // settings form.
Chris@0 333 // Using drupalPostForm() to avoid dealing with JavaScript on the previous
Chris@0 334 // page in the field creation.
Chris@0 335 $edit = [
Chris@0 336 'new_storage_type' => 'field_ui:entity_reference:media',
Chris@0 337 'label' => "Media (cardinality $cardinality)",
Chris@0 338 'field_name' => 'media_reference',
Chris@0 339 ];
Chris@0 340 $this->drupalPostForm("admin/structure/types/manage/{$content_type->id()}/fields/add-field", $edit, 'Save and continue');
Chris@0 341 $edit = [];
Chris@0 342 foreach ($media_types as $type) {
Chris@0 343 $edit["settings[handler_settings][target_bundles][$type]"] = TRUE;
Chris@0 344 }
Chris@0 345 $this->drupalPostForm("admin/structure/types/manage/{$content_type->id()}/fields/node.{$content_type->id()}.field_media_reference", $edit, "Save settings");
Chris@0 346 \Drupal::entityTypeManager()
Chris@0 347 ->getStorage('entity_form_display')
Chris@0 348 ->load('node.' . $content_type->id() . '.default')
Chris@0 349 ->setComponent('field_media_reference', [
Chris@0 350 'type' => $widget_id,
Chris@0 351 ])
Chris@0 352 ->save();
Chris@0 353
Chris@0 354 // Some of the expected texts.
Chris@0 355 $create_help = 'Create your media on the media add page (opens a new window), then add it by name to the field below.';
Chris@0 356 $list_text = 'See the media list (opens a new window) to help locate media.';
Chris@0 357 $use_help = 'Type part of the media name.';
Chris@0 358 $create_header = "Create new media";
Chris@0 359 $use_header = "Use existing media";
Chris@0 360
Chris@0 361 // First check that none of the help texts are on the non-media content.
Chris@0 362 $this->drupalGet("/node/add/{$non_media_content_type->id()}");
Chris@0 363 $this->assertNoHelpTexts([
Chris@0 364 $create_header,
Chris@0 365 $create_help,
Chris@0 366 $use_header,
Chris@0 367 $use_help,
Chris@0 368 $list_text,
Chris@0 369 'Allowed media types:',
Chris@0 370 ]);
Chris@0 371
Chris@0 372 // Now, check that the widget displays the expected help text under the
Chris@0 373 // given conditions for the test user.
Chris@0 374 $this->drupalLogin($test_user);
Chris@0 375 $this->drupalGet("/node/add/{$content_type->id()}");
Chris@0 376
Chris@0 377 // Specific expected help texts for the media field.
Chris@0 378 $create_header = "Create new media";
Chris@0 379 $use_header = "Use existing media";
Chris@0 380 $type_list = 'Allowed media types: ' . implode(", ", array_keys($media_types));
Chris@0 381
Chris@0 382 $fieldset_selector = '#edit-field-media-reference-wrapper fieldset';
Chris@0 383 $fieldset = $assert_session->elementExists('css', $fieldset_selector);
Chris@0 384
Chris@0 385 $this->assertSame("Media (cardinality $cardinality)", $assert_session->elementExists('css', 'legend', $fieldset)->getText());
Chris@0 386
Chris@0 387 // Assert text that should be displayed regardless of other access.
Chris@0 388 $this->assertHelpTexts([$use_header, $use_help, $type_list], $fieldset_selector);
Chris@0 389
Chris@0 390 // The entire section for creating new media should only be displayed if
Chris@0 391 // the user can create at least one media of the type.
Chris@0 392 if ($create_media_types) {
Chris@0 393 if (count($create_media_types) === 1) {
Chris@0 394 $url = Url::fromRoute('entity.media.add_form')->setRouteParameter('media_type', $create_media_types[0]);
Chris@0 395 }
Chris@0 396 else {
Chris@0 397 $url = Url::fromRoute('entity.media.add_page');
Chris@0 398 }
Chris@0 399 $this->assertHelpTexts([$create_header, $create_help], $fieldset_selector);
Chris@0 400 $this->assertHelpLink(
Chris@0 401 $fieldset,
Chris@0 402 'media add page',
Chris@0 403 [
Chris@0 404 'target' => '_blank',
Chris@0 405 'href' => $url->toString(),
Chris@0 406 ]
Chris@0 407 );
Chris@0 408 }
Chris@0 409 else {
Chris@0 410 $this->assertNoHelpTexts([$create_header, $create_help]);
Chris@0 411 $this->assertNoHelpLink($fieldset, 'media add page');
Chris@0 412 }
Chris@0 413
Chris@0 414 if ($list_access) {
Chris@0 415 $this->assertHelpTexts([$list_text], $fieldset_selector);
Chris@0 416 $this->assertHelpLink(
Chris@0 417 $fieldset,
Chris@0 418 'media list',
Chris@0 419 [
Chris@0 420 'target' => '_blank',
Chris@0 421 'href' => Url::fromRoute('entity.media.collection')->toString(),
Chris@0 422 ]
Chris@0 423 );
Chris@0 424 }
Chris@0 425 else {
Chris@0 426 $this->assertNoHelpTexts([$list_text]);
Chris@0 427 $this->assertNoHelpLink($fieldset, 'media list');
Chris@0 428 }
Chris@0 429 }
Chris@0 430
Chris@0 431 /**
Chris@0 432 * Asserts that the given texts are present exactly once.
Chris@0 433 *
Chris@0 434 * @param string[] $texts
Chris@0 435 * A list of the help texts to check.
Chris@0 436 * @param string $selector
Chris@0 437 * (optional) The selector to search.
Chris@0 438 */
Chris@0 439 public function assertHelpTexts(array $texts, $selector = '') {
Chris@0 440 $assert_session = $this->assertSession();
Chris@0 441 foreach ($texts as $text) {
Chris@0 442 // We only want to escape single quotes, so use str_replace() rather than
Chris@0 443 // addslashes().
Chris@0 444 $text = str_replace("'", "\'", $text);
Chris@0 445 if ($selector) {
Chris@0 446 $assert_session->elementsCount('css', $selector . ":contains('$text')", 1);
Chris@0 447 }
Chris@0 448 else {
Chris@0 449 $assert_session->pageTextContains($text);
Chris@0 450 }
Chris@0 451 }
Chris@0 452 }
Chris@0 453
Chris@0 454 /**
Chris@0 455 * Asserts that none of the given texts are present.
Chris@0 456 *
Chris@0 457 * @param string[] $texts
Chris@0 458 * A list of the help texts to check.
Chris@0 459 */
Chris@0 460 public function assertNoHelpTexts(array $texts) {
Chris@0 461 $assert_session = $this->assertSession();
Chris@0 462 foreach ($texts as $text) {
Chris@0 463 $assert_session->pageTextNotContains($text);
Chris@0 464 }
Chris@0 465 }
Chris@0 466
Chris@0 467 /**
Chris@0 468 * Asserts whether a given link is present.
Chris@0 469 *
Chris@0 470 * @param \Behat\Mink\Element\NodeElement $element
Chris@0 471 * The element to search.
Chris@0 472 * @param string $text
Chris@0 473 * The link text.
Chris@0 474 * @param string[] $attributes
Chris@0 475 * An associative array of any expected attributes, keyed by the
Chris@0 476 * attribute name.
Chris@0 477 */
Chris@0 478 protected function assertHelpLink(NodeElement $element, $text, array $attributes = []) {
Chris@0 479 // Find all the links inside the element.
Chris@0 480 $link = $element->findLink($text);
Chris@0 481
Chris@0 482 $this->assertNotEmpty($link);
Chris@0 483 foreach ($attributes as $attribute => $value) {
Chris@0 484 $this->assertEquals($link->getAttribute($attribute), $value);
Chris@0 485 }
Chris@0 486 }
Chris@0 487
Chris@0 488 /**
Chris@0 489 * Asserts that a given link is not present.
Chris@0 490 *
Chris@0 491 * @param \Behat\Mink\Element\NodeElement $element
Chris@0 492 * The element to search.
Chris@0 493 * @param string $text
Chris@0 494 * The link text.
Chris@0 495 */
Chris@0 496 protected function assertNoHelpLink(NodeElement $element, $text) {
Chris@0 497 $assert_session = $this->assertSession();
Chris@0 498 // Assert that the link and its text are not present anywhere on the page.
Chris@0 499 $assert_session->elementNotExists('named', ['link', $text], $element);
Chris@0 500 $assert_session->pageTextNotContains($text);
Chris@0 501 }
Chris@0 502
Chris@0 503 /**
Chris@0 504 * Test the media collection route.
Chris@0 505 */
Chris@0 506 public function testMediaCollectionRoute() {
Chris@0 507 /** @var \Drupal\Core\Entity\EntityStorageInterface $media_storage */
Chris@0 508 $media_storage = $this->container->get('entity_type.manager')->getStorage('media');
Chris@0 509
Chris@0 510 $this->container->get('module_installer')->uninstall(['views']);
Chris@0 511
Chris@0 512 // Create a media type and media item.
Chris@0 513 $media_type = $this->createMediaType();
Chris@0 514 $media = $media_storage->create([
Chris@0 515 'bundle' => $media_type->id(),
Chris@0 516 'name' => 'Unnamed',
Chris@0 517 ]);
Chris@0 518 $media->save();
Chris@0 519
Chris@0 520 $this->drupalGet($media->toUrl('collection'));
Chris@0 521
Chris@0 522 $assert_session = $this->assertSession();
Chris@0 523
Chris@0 524 // Media list table exists.
Chris@0 525 $assert_session->elementExists('css', 'th:contains("Media Name")');
Chris@0 526 $assert_session->elementExists('css', 'th:contains("Type")');
Chris@0 527 $assert_session->elementExists('css', 'th:contains("Operations")');
Chris@0 528 // Media item is present.
Chris@0 529 $assert_session->elementExists('css', 'td:contains("Unnamed")');
Chris@0 530 }
Chris@0 531
Chris@0 532 }