3 namespace Drupal\Tests\media_entity\Functional;
5 use Drupal\Core\Config\Entity\Query\QueryFactory;
6 use Drupal\FunctionalTests\Update\UpdatePathTestBase;
11 class CoreMediaUpdatePathTest extends UpdatePathTestBase {
16 protected function setDatabaseDumpFiles() {
17 $this->databaseDumpFiles = [
18 __DIR__ . '/../../fixtures/drupal-8.4.0-media-entity.php.gz',
25 protected function setUp() {
28 // All this can be removed when #2877383 lands.
29 $this->config('system.action.media_delete_action')->delete();
30 $this->config('system.action.media_publish_action')->delete();
31 $this->config('system.action.media_save_action')->delete();
32 $this->config('system.action.media_unpublish_action')->delete();
34 $this->config('views.view.media')
35 ->clear('display.default.display_options.fields.media_bulk_form')
39 public function testUpdatePath() {
40 $icon_base_uri = $this->config('media_entity.settings')->get('icon_base');
43 $assert = $this->assertSession();
45 // As with all translatable, versionable content entity types, media
46 // entities should have the revision_translation_affected base field.
47 // This may have been created during the update path by system_update_8402,
48 // so we should check for it here.
49 /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */
50 $field_manager = $this->container->get('entity_field.manager');
51 $this->assertArrayHasKey('revision_translation_affected', $field_manager->getBaseFieldDefinitions('media'));
52 $field_manager->clearCachedFieldDefinitions();
54 $this->drupalLogin($this->rootUser);
55 $this->drupalGet('/admin/modules');
56 $assert->checkboxNotChecked('modules[media_entity_document][enable]');
57 $assert->checkboxNotChecked('modules[media_entity_image][enable]');
58 $assert->checkboxNotChecked('modules[media_entity][enable]');
59 $assert->checkboxChecked('modules[media_entity_generic][enable]');
60 // Media is not currently displayed on the Modules page.
61 $this->assertArrayHasKey('media', $this->config('core.extension')->get('module'));
63 $this->drupalGet('/admin/structure/media/manage/file');
64 $assert->statusCodeEquals(200);
65 $assert->fieldValueEquals('source', 'file');
66 $assert->pageTextContains('File field is used to store the essential information');
68 $this->drupalGet('/admin/structure/media/manage/image');
69 $assert->statusCodeEquals(200);
70 $assert->fieldValueEquals('source', 'image');
71 $assert->pageTextContains('Image field is used to store the essential information');
73 $this->drupalGet('/admin/structure/media/manage/generic');
74 $assert->statusCodeEquals(200);
75 $assert->fieldValueEquals('source', 'generic');
76 $assert->pageTextContains('Generic media field is used to store the essential information');
78 $this->assertFrontPageMedia('Image 3', 'main img');
79 $this->assertFrontPageMedia('Generic 1', 'main img[src *= "/media-icons/generic/generic.png"]');
80 $this->assertFrontPageMedia('File 2', 'main img[src *= "/media-icons/generic/document.png"]');
81 $this->assertFrontPageMedia('File 3', 'main img[src *= "/media-icons/generic/document.png"]');
82 $this->assertFrontPageMedia('Image 1', 'main img');
83 $this->assertFrontPageMedia('Generic 3', 'main img[src *= "/media-icons/generic/generic.png"]');
85 // Assert that Media Entity's config is migrated.
86 $this->assertTrue($this->config('media_entity.settings')->isNew());
87 $this->assertEquals($icon_base_uri, $this->config('media.settings')->get('icon_base_uri'));
89 $this->container->get('config.factory')->listAll('media_entity.bundle')
92 $this->activateModule();
93 /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */
94 $storage = $this->container
95 ->get('entity_type.manager')
96 ->getStorage('media_type');
98 foreach (['file', 'image', 'generic'] as $type) {
99 $config = $this->config("media.type.$type");
100 $this->assertFalse($config->isNew());
101 $this->assertNull($config->get('type'));
102 $this->assertNull($config->get('type_configuration'));
103 $this->assertInternalType('string', $config->get('source'));
104 $this->assertInternalType('array', $config->get('source_configuration'));
105 $this->assertInternalType('string', $config->get('source_configuration.source_field'));
107 // Ensure that the media type can be queried by UUID.
108 $uuid = $config->get('uuid');
109 $this->assertNotEmpty($uuid);
110 $result = $storage->getQuery()->condition('uuid', $uuid)->execute();
111 $this->assertEquals($result[$type], $type);
114 // The UUID map for legacy media bundles should be cleared out.
115 $old_uuid_map = $this->container
117 ->get(QueryFactory::CONFIG_LOOKUP_PREFIX . 'media_bundle')
119 $this->assertEmpty($old_uuid_map);
122 protected function assertFrontPageMedia($link, $assert_selectors) {
123 $this->drupalGet('<front>');
124 $this->clickLink($link);
126 $assert = $this->assertSession();
127 foreach ((array) $assert_selectors as $selector) {
128 $assert->elementExists('css', $selector);
133 * Activates the Media module in PHPUnit's memory space.
135 protected function activateModule() {
137 ->get('module_handler')
138 ->addModule('media', 'core/modules/media');
140 /** @var \ArrayObject $namespaces */
141 $namespaces = $this->container->get('container.namespaces');
142 $namespaces['Drupal\\media'] = 'core/modules/media/src';
145 ->get('entity_type.manager')
146 ->clearCachedDefinitions();