Chris@0: getEditable('media.settings') Chris@18: ->set('standalone_url', TRUE) Chris@18: ->save(TRUE); Chris@18: Chris@18: $this->container->get('router.builder')->rebuild(); Chris@18: } Chris@18: Chris@18: /** Chris@0: * Creates storage and field instance, attached to a given media type. Chris@0: * Chris@0: * @param string $field_name Chris@0: * The field name. Chris@0: * @param string $field_type Chris@0: * The field type. Chris@0: * @param string $media_type_id Chris@0: * The media type config entity ID. Chris@0: */ Chris@0: protected function createMediaTypeField($field_name, $field_type, $media_type_id) { Chris@0: $storage = FieldStorageConfig::create([ Chris@0: 'field_name' => $field_name, Chris@0: 'entity_type' => 'media', Chris@0: 'type' => $field_type, Chris@0: ]); Chris@0: $storage->save(); Chris@0: Chris@0: FieldConfig::create([ Chris@0: 'field_storage' => $storage, Chris@0: 'bundle' => $media_type_id, Chris@0: ])->save(); Chris@0: Chris@0: // Make the field widget visible in the form display. Chris@0: $component = \Drupal::service('plugin.manager.field.widget') Chris@0: ->prepareConfiguration($field_type, []); Chris@0: Chris@0: // @todo Replace entity_get_form_display() when #2367933 is done. Chris@0: // https://www.drupal.org/node/2872159. Chris@0: $entity_form_display = entity_get_form_display('media', $media_type_id, 'default'); Chris@0: $entity_form_display->setComponent($field_name, $component) Chris@0: ->save(); Chris@0: Chris@0: // Use the default formatter and settings. Chris@0: $component = \Drupal::service('plugin.manager.field.formatter') Chris@0: ->prepareConfiguration($field_type, []); Chris@0: Chris@0: // @todo Replace entity_get_display() when #2367933 is done. Chris@0: // https://www.drupal.org/node/2872159. Chris@0: $entity_display = entity_get_display('media', $media_type_id, 'default'); Chris@0: $entity_display->setComponent($field_name, $component) Chris@0: ->save(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Create a set of fields in a media type. Chris@0: * Chris@0: * @param array $fields Chris@0: * An associative array where keys are field names and values field types. Chris@0: * @param string $media_type_id Chris@0: * The media type config entity ID. Chris@0: */ Chris@0: protected function createMediaTypeFields(array $fields, $media_type_id) { Chris@0: foreach ($fields as $field_name => $field_type) { Chris@0: $this->createMediaTypeField($field_name, $field_type, $media_type_id); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Hides a widget in the default form display config. Chris@0: * Chris@0: * @param string $field_name Chris@0: * The field name. Chris@0: * @param string $media_type_id Chris@0: * The media type config entity ID. Chris@0: */ Chris@0: protected function hideMediaTypeFieldWidget($field_name, $media_type_id) { Chris@0: /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $entity_form_display */ Chris@0: $entity_form_display = entity_get_form_display('media', $media_type_id, 'default'); Chris@0: if ($entity_form_display->getComponent($field_name)) { Chris@0: $entity_form_display->removeComponent($field_name)->save(); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Test generic media type creation. Chris@0: * Chris@0: * @param string $media_type_id Chris@0: * The media type config entity ID. Chris@0: * @param string $source_id Chris@0: * The media source ID. Chris@0: * @param array $provided_fields Chris@0: * (optional) An array of field machine names this type provides. Chris@0: * Chris@0: * @return \Drupal\media\MediaTypeInterface Chris@0: * The created media type. Chris@0: */ Chris@0: public function doTestCreateMediaType($media_type_id, $source_id, array $provided_fields = []) { Chris@0: $session = $this->getSession(); Chris@0: $page = $session->getPage(); Chris@0: $assert_session = $this->assertSession(); Chris@0: Chris@0: $this->drupalGet('admin/structure/media/add'); Chris@0: $page->fillField('label', $media_type_id); Chris@0: $this->getSession() Chris@0: ->wait(5000, "jQuery('.machine-name-value').text() === '{$media_type_id}'"); Chris@0: Chris@0: // Make sure the source is available. Chris@0: $assert_session->fieldExists('Media source'); Chris@0: $assert_session->optionExists('Media source', $source_id); Chris@0: $page->selectFieldOption('Media source', $source_id); Chris@0: $result = $assert_session->waitForElementVisible('css', 'fieldset[data-drupal-selector="edit-source-configuration"]'); Chris@0: $this->assertNotEmpty($result); Chris@0: Chris@0: // Make sure the provided fields are visible on the form. Chris@0: foreach ($provided_fields as $provided_field) { Chris@0: $result = $assert_session->waitForElementVisible('css', 'select[name="field_map[' . $provided_field . ']"]'); Chris@0: $this->assertNotEmpty($result); Chris@0: } Chris@0: Chris@0: // Save the form to create the type. Chris@0: $page->pressButton('Save'); Chris@0: $assert_session->pageTextContains('The media type ' . $media_type_id . ' has been added.'); Chris@0: $this->drupalGet('admin/structure/media'); Chris@0: $assert_session->pageTextContains($media_type_id); Chris@0: Chris@0: // Bundle definitions are statically cached in the context of the test, we Chris@0: // need to make sure we have updated information before proceeding with the Chris@0: // actions on the UI. Chris@0: \Drupal::service('entity_type.bundle.info')->clearCachedBundles(); Chris@0: Chris@0: return MediaType::load($media_type_id); Chris@0: } Chris@0: Chris@0: }