View source  
  <?php
namespace Drupal\book_access;
use Drupal\KernelTests\KernelTestBase;
use Drupal\Tests\RandomGeneratorTrait;
use Drupal\user\Entity\Role;
class BookAccessDefaultsTest extends KernelTestBase {
  use RandomGeneratorTrait;
  
  protected static $modules = [
    'system',
    'node',
    'user',
    'book',
    'book_access',
  ];
  
  protected $defaultStorage;
  
  public function createRole() {
    $role1 = Role::create([
      'id' => 'test_role1',
      'name' => $this
        ->randomString(),
    ]);
    $role1
      ->save();
    return $role1;
  }
  
  protected function setup() : void {
    parent::setUp();
    $this
      ->installSchema('system', 'sequences');
    $this
      ->installConfig('system');
    $this
      ->installEntitySchema('user');
    $this
      ->installEntitySchema('node');
    $this
      ->installConfig('user');
    $this
      ->installConfig('book');
    $this
      ->installConfig('book_access');
    $this->defaultStorage = \Drupal::entityTypeManager()
      ->getStorage('book_access_defaults');
  }
  
  public function testInstallCreatesDefaultConfig() {
    $query = $this->defaultStorage
      ->getQuery();
    $results = $query
      ->condition('grant_type', 'author')
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 1, "One result expected.");
    $query = \Drupal::entityTypeManager()
      ->getStorage('book_access_defaults')
      ->getQuery();
    $results = $query
      ->condition('grant_type', 'role')
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 3, "Three results expected.");
  }
  
  public function testUpdatingConfig() {
    
    $query = $this->defaultStorage
      ->getQuery();
    
    $results = $query
      ->condition('role_id', 'authenticated')
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 1, "One result expected.");
    
    $config = $this->defaultStorage
      ->load(current($results));
    $grants = $config
      ->getGrants();
    $this
      ->assertEqual($grants['grant_add_child'], FALSE, "Grant add child expected FALSE.");
    
    $grants['grant_add_child'] = TRUE;
    $config
      ->set('grants', $grants)
      ->save();
    
    $query2 = $this->defaultStorage
      ->getQuery();
    $results = $query2
      ->condition('role_id', 'authenticated')
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 1, "One result expected.");
    
    $config = $this->defaultStorage
      ->load(current($results));
    $grants = $config
      ->getGrants();
    $this
      ->assertEqual($grants['grant_add_child'], TRUE, "Grant add child expected TRUE.");
  }
  
  public function testAddingRoleAddsConfig() {
    $role1 = $this
      ->createRole();
    $query = $this->defaultStorage
      ->getQuery();
    
    $results = $query
      ->condition('role_id', $role1
      ->id())
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 1, "One result expected.");
  }
  
  public function testDeletingRoleDeletesConfig() {
    $role1 = $this
      ->createRole();
    $query = $this->defaultStorage
      ->getQuery();
    
    $results = $query
      ->condition('role_id', $role1
      ->id())
      ->execute();
    $this
      ->assertIsArray($results, "Results are not available. Not an array");
    $this
      ->assertEqual(count($results), 1, "One result expected.");
    $config = $this->defaultStorage
      ->load(current($results));
    $config_id = $config
      ->id();
    $role1
      ->delete();
    
    $config = NULL;
    $query = $this->defaultStorage
      ->getQuery();
    $results = $query
      ->condition('id', $config_id)
      ->execute();
    $this
      ->assertEqual(count($results), 0, "Zero results expected.");
  }
}