View source
<?php
namespace Drupal\Tests\file\Functional;
use Drupal\node\Entity\Node;
use Drupal\user\RoleInterface;
use Drupal\file\Entity\File;
class FileFieldAnonymousSubmissionTest extends FileFieldTestBase {
protected $defaultTheme = 'stark';
protected function setUp() {
parent::setUp();
user_role_change_permissions(RoleInterface::ANONYMOUS_ID, [
'create article content' => TRUE,
'access content' => TRUE,
]);
}
public function testAnonymousNode() {
$bundle_label = 'Article';
$node_title = 'test page';
$this
->drupalLogout();
$this
->drupalGet('node/add/article');
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertText(strip_tags(t('Create @name', [
'@name' => $bundle_label,
])));
$edit = [
'title[0][value]' => $node_title,
'body[0][value]' => 'Test article',
];
$this
->drupalPostForm(NULL, $edit, 'Save');
$this
->assertSession()
->statusCodeEquals(200);
$t_args = [
'@type' => $bundle_label,
'%title' => $node_title,
];
$this
->assertText(strip_tags(t('@type %title has been created.', $t_args)), 'The node was created.');
$matches = [];
if (preg_match('@node/(\\d+)$@', $this
->getUrl(), $matches)) {
$nid = end($matches);
$this
->assertNotEqual($nid, 0, 'The node ID was extracted from the URL.');
$node = Node::load($nid);
$this
->assertNotEqual($node, NULL, 'The node was loaded successfully.');
}
}
public function testAnonymousNodeWithFile() {
$bundle_label = 'Article';
$node_title = 'Test page';
$this
->createFileField('field_image', 'node', 'article', [], [
'file_extensions' => 'txt png',
]);
$this
->drupalLogout();
$this
->drupalGet('node/add/article');
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertText(strip_tags(t('Create @name', [
'@name' => $bundle_label,
])));
$image = $this
->getTestFile('image');
$edit = [
'title[0][value]' => $node_title,
'body[0][value]' => 'Test article',
'files[field_image_0]' => $this->container
->get('file_system')
->realpath($image
->getFileUri()),
];
$this
->drupalPostForm(NULL, $edit, 'Save');
$this
->assertSession()
->statusCodeEquals(200);
$t_args = [
'@type' => $bundle_label,
'%title' => $node_title,
];
$this
->assertText(strip_tags(t('@type %title has been created.', $t_args)), 'The node was created.');
$matches = [];
if (preg_match('@node/(\\d+)$@', $this
->getUrl(), $matches)) {
$nid = end($matches);
$this
->assertNotEqual($nid, 0, 'The node ID was extracted from the URL.');
$node = Node::load($nid);
$this
->assertNotEqual($node, NULL, 'The node was loaded successfully.');
$this
->assertFileExists(File::load($node->field_image->target_id)
->getFileUri());
}
}
public function testAnonymousNodeWithFileWithoutTitle() {
$this
->drupalLogout();
$this
->doTestNodeWithFileWithoutTitle();
}
public function testAuthenticatedNodeWithFileWithoutTitle() {
$admin_user = $this
->drupalCreateUser([
'bypass node access',
'access content overview',
'administer nodes',
]);
$this
->drupalLogin($admin_user);
$this
->doTestNodeWithFileWithoutTitle();
}
protected function doTestNodeWithFileWithoutTitle() {
$bundle_label = 'Article';
$node_title = 'Test page';
$this
->createFileField('field_image', 'node', 'article', [], [
'file_extensions' => 'txt png',
]);
$this
->drupalGet('node/add/article');
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertText(strip_tags(t('Create @name', [
'@name' => $bundle_label,
])));
$image = $this
->getTestFile('image');
$edit = [
'body[0][value]' => 'Test article',
'files[field_image_0]' => $this->container
->get('file_system')
->realpath($image
->getFileUri()),
];
if (!$this->loggedInUser) {
$label = 'Save';
}
else {
$label = 'Save';
}
$this
->drupalPostForm(NULL, $edit, $label);
$this
->assertSession()
->statusCodeEquals(200);
$t_args = [
'@type' => $bundle_label,
'%title' => $node_title,
];
$this
->assertNoText(strip_tags(t('@type %title has been created.', $t_args)), 'The node was created.');
$this
->assertText('Title field is required.');
$edit = [
'title[0][value]' => $node_title,
];
$this
->drupalPostForm(NULL, $edit, $label);
$t_args = [
'@type' => $bundle_label,
'%title' => $node_title,
];
$this
->assertText(strip_tags(t('@type %title has been created.', $t_args)), 'The node was created.');
$matches = [];
if (preg_match('@node/(\\d+)$@', $this
->getUrl(), $matches)) {
$nid = end($matches);
$this
->assertNotEqual($nid, 0, 'The node ID was extracted from the URL.');
$node = Node::load($nid);
$this
->assertNotEqual($node, NULL, 'The node was loaded successfully.');
$this
->assertFileExists(File::load($node->field_image->target_id)
->getFileUri());
}
}
}