View source
<?php
namespace Drupal\Tests\content_entity_example\Functional;
use Drupal\content_entity_example\Entity\Contact;
use Drupal\Core\StringTranslation\StringTranslationTrait;
use Drupal\Tests\examples\Functional\ExamplesBrowserTestBase;
use Drupal\Core\Url;
class ContentEntityExampleTest extends ExamplesBrowserTestBase {
use StringTranslationTrait;
protected $defaultTheme = 'stark';
public static $modules = [
'content_entity_example',
'block',
'field_ui',
];
public function testContentEntityExample() {
$assert = $this
->assertSession();
$web_user = $this
->drupalCreateUser([
'add contact entity',
'edit contact entity',
'view contact entity',
'delete contact entity',
'administer contact entity',
'administer content_entity_example_contact display',
'administer content_entity_example_contact fields',
'administer content_entity_example_contact form display',
]);
$assert
->pageTextNotContains('Content Entity Example');
$this
->drupalLogin($web_user);
$assert
->linkExists('Content Entity Example');
$this
->clickLink('Content Entity Example');
$assert
->linkExists('Add contact');
$this
->clickLink($this
->t('Add contact'));
$assert
->fieldValueEquals('name[0][value]', '');
$assert
->fieldValueEquals('name[0][value]', '');
$assert
->fieldValueEquals('name[0][value]', '');
$assert
->fieldValueEquals('name[0][value]', '');
$user_ref = $web_user->name->value . ' (' . $web_user
->id() . ')';
$assert
->fieldValueEquals('user_id[0][target_id]', $user_ref);
$edit = [
'name[0][value]' => 'test name',
'first_name[0][value]' => 'test first name',
'role' => 'administrator',
];
$this
->drupalPostForm(NULL, $edit, 'Save');
$assert
->linkExists('Edit');
$assert
->linkExists('Delete');
$this
->clickLink('test name');
$assert
->pageTextContains('test name');
$assert
->pageTextContains('test first name');
$assert
->pageTextContains('administrator');
$assert
->linkExists('Add contact');
$assert
->linkExists('Edit');
$assert
->linkExists('Delete');
$this
->clickLink('Delete');
$assert
->linkExists('Cancel');
$this
->drupalPostForm(NULL, [], 'Delete');
$assert
->pageTextNotContains('test name');
$this
->drupalGet('admin/structure/content_entity_example_contact_settings');
$assert
->pageTextContains('Contact Settings');
$assert
->linkExists('Settings');
$assert
->linkExists('Manage fields');
$assert
->linkExists('Manage form display');
$assert
->linkExists('Manage display');
}
public function testPaths() {
$assert = $this
->assertSession();
$contact = Contact::create([
'name' => 'somename',
'first_name' => 'Joe',
'role' => 'administrator',
]);
$contact
->save();
$data = $this
->providerTestPaths($contact
->id());
foreach ($data as $datum) {
if ($datum[2]) {
$user = $this
->drupalCreateUser([
$datum[2],
]);
$this
->drupalLogin($user);
}
else {
$user = $this
->drupalCreateUser();
$this
->drupalLogin($user);
}
$this
->drupalGet($datum[1]);
$assert
->statusCodeEquals($datum[0]);
}
}
protected function providerTestPaths($contact_id) {
return [
[
200,
'/content_entity_example_contact/' . $contact_id,
'view contact entity',
],
[
403,
'/content_entity_example_contact/' . $contact_id,
'',
],
[
200,
'/content_entity_example_contact/list',
'view contact entity',
],
[
403,
'/content_entity_example_contact/list',
'',
],
[
200,
'/content_entity_example_contact/add',
'add contact entity',
],
[
403,
'/content_entity_example_contact/add',
'',
],
[
200,
'/content_entity_example_contact/' . $contact_id . '/edit',
'edit contact entity',
],
[
403,
'/content_entity_example_contact/' . $contact_id . '/edit',
'',
],
[
200,
'/contact/' . $contact_id . '/delete',
'delete contact entity',
],
[
403,
'/contact/' . $contact_id . '/delete',
'',
],
[
200,
'admin/structure/content_entity_example_contact_settings',
'administer contact entity',
],
[
403,
'admin/structure/content_entity_example_contact_settings',
'',
],
];
}
public function testAddFields() {
$web_user = $this
->drupalCreateUser([
'administer contact entity',
'administer content_entity_example_contact display',
'administer content_entity_example_contact fields',
'administer content_entity_example_contact form display',
]);
$this
->drupalLogin($web_user);
$entity_name = 'content_entity_example_contact';
$add_field_url = 'admin/structure/' . $entity_name . '_settings/fields/add-field';
$this
->drupalGet($add_field_url);
$field_name = 'test_name';
$edit = [
'new_storage_type' => 'list_string',
'label' => 'test name',
'field_name' => $field_name,
];
$this
->drupalPostForm(NULL, $edit, 'Save and continue');
$expected_path = $this
->buildUrl('admin/structure/' . $entity_name . '_settings/fields/' . $entity_name . '.' . $entity_name . '.field_' . $field_name . '/storage');
$current_path = strtok($this
->getUrl(), '?');
$this
->assertEquals($expected_path, $current_path);
}
public function testCreateAdminPermission() {
$assert = $this
->assertSession();
$add_url = Url::fromRoute('content_entity_example.contact_add');
$contact = Contact::create();
$this
->drupalLogin($this
->drupalCreateUser([
$contact
->getEntityType()
->getAdminPermission(),
'view contact entity',
]));
$edit = [
'name[0][value]' => 'Test Admin Name',
'first_name[0][value]' => 'Admin First Name',
'role' => 'administrator',
];
$this
->drupalPostForm($add_url, $edit, 'Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('Test Admin Name');
$this
->drupalLogin($this
->drupalCreateUser([
'add contact entity',
'view contact entity',
]));
$edit = [
'name[0][value]' => 'Mere Mortal Name',
'first_name[0][value]' => 'Mortal First Name',
'role' => 'user',
];
$this
->drupalPostForm($add_url, $edit, 'Save');
$assert
->statusCodeEquals(200);
$assert
->pageTextContains('Mere Mortal Name');
$this
->drupalLogin($this
->drupalCreateUser([
'view contact entity',
]));
$this
->drupalGet($add_url);
$assert
->statusCodeEquals(403);
}
}