annotate core/modules/field/src/Tests/EntityReference/EntityReferenceFileUploadTest.php @ 13:5fb285c0d0e3

Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've been lucky to get away with this so far, as we don't support self-registration which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5 was vulnerable to.
author Chris Cannam
date Mon, 23 Apr 2018 09:33:26 +0100
parents 7a779792577d
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\field\Tests\EntityReference;
Chris@0 4
Chris@0 5 use Drupal\Core\Field\FieldStorageDefinitionInterface;
Chris@0 6 use Drupal\field\Entity\FieldConfig;
Chris@0 7 use Drupal\simpletest\WebTestBase;
Chris@0 8 use Drupal\field\Entity\FieldStorageConfig;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Tests an autocomplete widget with file upload.
Chris@0 12 *
Chris@0 13 * @group entity_reference
Chris@0 14 */
Chris@0 15 class EntityReferenceFileUploadTest extends WebTestBase {
Chris@0 16
Chris@0 17 public static $modules = ['entity_reference', 'node', 'file'];
Chris@0 18
Chris@0 19 /**
Chris@0 20 * The name of a content type that will reference $referencedType.
Chris@0 21 *
Chris@0 22 * @var string
Chris@0 23 */
Chris@0 24 protected $referencingType;
Chris@0 25
Chris@0 26 /**
Chris@0 27 * The name of a content type that will be referenced by $referencingType.
Chris@0 28 *
Chris@0 29 * @var string
Chris@0 30 */
Chris@0 31 protected $referencedType;
Chris@0 32
Chris@0 33 /**
Chris@0 34 * Node id.
Chris@0 35 *
Chris@0 36 * @var int
Chris@0 37 */
Chris@0 38 protected $nodeId;
Chris@0 39
Chris@0 40 protected function setUp() {
Chris@0 41 parent::setUp();
Chris@0 42
Chris@0 43 // Create "referencing" and "referenced" node types.
Chris@0 44 $referencing = $this->drupalCreateContentType();
Chris@0 45 $this->referencingType = $referencing->id();
Chris@0 46
Chris@0 47 $referenced = $this->drupalCreateContentType();
Chris@0 48 $this->referencedType = $referenced->id();
Chris@0 49 $this->nodeId = $this->drupalCreateNode(['type' => $referenced->id()])->id();
Chris@0 50
Chris@0 51 FieldStorageConfig::create([
Chris@0 52 'field_name' => 'test_field',
Chris@0 53 'entity_type' => 'node',
Chris@0 54 'translatable' => FALSE,
Chris@0 55 'entity_types' => [],
Chris@0 56 'settings' => [
Chris@0 57 'target_type' => 'node',
Chris@0 58 ],
Chris@0 59 'type' => 'entity_reference',
Chris@0 60 'cardinality' => FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED,
Chris@0 61 ])->save();
Chris@0 62
Chris@0 63 FieldConfig::create([
Chris@0 64 'label' => 'Entity reference field',
Chris@0 65 'field_name' => 'test_field',
Chris@0 66 'entity_type' => 'node',
Chris@0 67 'required' => TRUE,
Chris@0 68 'bundle' => $referencing->id(),
Chris@0 69 'settings' => [
Chris@0 70 'handler' => 'default',
Chris@0 71 'handler_settings' => [
Chris@0 72 // Reference a single vocabulary.
Chris@0 73 'target_bundles' => [
Chris@0 74 $referenced->id(),
Chris@0 75 ],
Chris@0 76 ],
Chris@0 77 ],
Chris@0 78 ])->save();
Chris@0 79
Chris@0 80 // Create a file field.
Chris@0 81 $file_field_name = 'file_field';
Chris@0 82 $field_storage = FieldStorageConfig::create([
Chris@0 83 'field_name' => $file_field_name,
Chris@0 84 'entity_type' => 'node',
Chris@0 85 'type' => 'file'
Chris@0 86 ]);
Chris@0 87 $field_storage->save();
Chris@0 88 FieldConfig::create([
Chris@0 89 'entity_type' => 'node',
Chris@0 90 'field_storage' => $field_storage,
Chris@0 91 'bundle' => $referencing->id(),
Chris@0 92 'label' => $this->randomMachineName() . '_label',
Chris@0 93 ])->save();
Chris@0 94
Chris@0 95 entity_get_display('node', $referencing->id(), 'default')
Chris@0 96 ->setComponent('test_field')
Chris@0 97 ->setComponent($file_field_name)
Chris@0 98 ->save();
Chris@0 99 entity_get_form_display('node', $referencing->id(), 'default')
Chris@0 100 ->setComponent('test_field', [
Chris@0 101 'type' => 'entity_reference_autocomplete',
Chris@0 102 ])
Chris@0 103 ->setComponent($file_field_name, [
Chris@0 104 'type' => 'file_generic',
Chris@0 105 ])
Chris@0 106 ->save();
Chris@0 107 }
Chris@0 108
Chris@0 109 /**
Chris@0 110 * Tests that the autocomplete input element does not cause ajax fatal.
Chris@0 111 */
Chris@0 112 public function testFileUpload() {
Chris@0 113 $user1 = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
Chris@0 114 $this->drupalLogin($user1);
Chris@0 115
Chris@0 116 $test_file = current($this->drupalGetTestFiles('text'));
Chris@0 117 $edit['files[file_field_0]'] = drupal_realpath($test_file->uri);
Chris@0 118 $this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Upload');
Chris@0 119 $this->assertResponse(200);
Chris@0 120 $edit = [
Chris@0 121 'title[0][value]' => $this->randomMachineName(),
Chris@0 122 'test_field[0][target_id]' => $this->nodeId,
Chris@0 123 ];
Chris@0 124 $this->drupalPostForm(NULL, $edit, 'Save');
Chris@0 125 $this->assertResponse(200);
Chris@0 126 }
Chris@0 127
Chris@0 128 }