ContentEntityExampleTest.php
      
       
 
  
  
  
  
    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';
  
  protected 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->submitForm($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->submitForm([], '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' => 'Smith',
      '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->submitForm($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->drupalGet($add_url);
    $this->submitForm($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->drupalGet($add_url);
    $this->submitForm($edit, 'Save');
    $assert->statusCodeEquals(200);
    $assert->pageTextContains('Mere Mortal Name');
    
    
    $this->drupalLogin($this->drupalCreateUser([
      'view contact entity',
    ]));
    $this->drupalGet($add_url);
    $assert->statusCodeEquals(403);
  }
}