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 }
|