Issue #3048434 by claudiu.cristea, Lendude: Convert FileManagedAccessTest into a Kernel test
							parent
							
								
									9a11de65fa
								
							
						
					
					
						commit
						2adeb979e2
					
				| 
						 | 
					@ -1,83 +0,0 @@
 | 
				
			||||||
<?php
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
namespace Drupal\Tests\file\Functional;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
use Drupal\file\Entity\File;
 | 
					 | 
				
			||||||
use Drupal\user\Entity\Role;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/**
 | 
					 | 
				
			||||||
 * Tests access to managed files.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * @group file
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
class FileManagedAccessTest extends FileManagedTestBase {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * {@inheritdoc}
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  protected function setUp() {
 | 
					 | 
				
			||||||
    parent::setUp();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Give anonymous users permission to access content, so they can view and
 | 
					 | 
				
			||||||
    // download public files.
 | 
					 | 
				
			||||||
    $anonymous_role = Role::load(Role::ANONYMOUS_ID);
 | 
					 | 
				
			||||||
    $anonymous_role->grantPermission('access content');
 | 
					 | 
				
			||||||
    $anonymous_role->save();
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /**
 | 
					 | 
				
			||||||
   * Tests if public file is always accessible.
 | 
					 | 
				
			||||||
   */
 | 
					 | 
				
			||||||
  public function testFileAccess() {
 | 
					 | 
				
			||||||
    // Create a new file entity.
 | 
					 | 
				
			||||||
    $file = File::create([
 | 
					 | 
				
			||||||
      'uid' => 1,
 | 
					 | 
				
			||||||
      'filename' => 'drupal.txt',
 | 
					 | 
				
			||||||
      'uri' => 'public://drupal.txt',
 | 
					 | 
				
			||||||
      'filemime' => 'text/plain',
 | 
					 | 
				
			||||||
      'status' => FILE_STATUS_PERMANENT,
 | 
					 | 
				
			||||||
    ]);
 | 
					 | 
				
			||||||
    file_put_contents($file->getFileUri(), 'hello world');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Save it, inserting a new record.
 | 
					 | 
				
			||||||
    $file->save();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Create authenticated user to check file access.
 | 
					 | 
				
			||||||
    $account = $this->createUser(['access site reports', 'access content']);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $this->assertTrue($file->access('view', $account), 'Public file is viewable to authenticated user');
 | 
					 | 
				
			||||||
    $this->assertTrue($file->access('download', $account), 'Public file is downloadable to authenticated user');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Create anonymous user to check file access.
 | 
					 | 
				
			||||||
    $account = $this->createUser()->getAnonymousUser();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $this->assertTrue($file->access('view', $account), 'Public file is viewable to anonymous user');
 | 
					 | 
				
			||||||
    $this->assertTrue($file->access('download', $account), 'Public file is downloadable to anonymous user');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Create a new file entity.
 | 
					 | 
				
			||||||
    $file = File::create([
 | 
					 | 
				
			||||||
      'uid' => 1,
 | 
					 | 
				
			||||||
      'filename' => 'drupal.txt',
 | 
					 | 
				
			||||||
      'uri' => 'private://drupal.txt',
 | 
					 | 
				
			||||||
      'filemime' => 'text/plain',
 | 
					 | 
				
			||||||
      'status' => FILE_STATUS_PERMANENT,
 | 
					 | 
				
			||||||
    ]);
 | 
					 | 
				
			||||||
    file_put_contents($file->getFileUri(), 'hello world');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Save it, inserting a new record.
 | 
					 | 
				
			||||||
    $file->save();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Create authenticated user to check file access.
 | 
					 | 
				
			||||||
    $account = $this->createUser(['access site reports', 'access content']);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $this->assertFalse($file->access('view', $account), 'Private file is not viewable to authenticated user');
 | 
					 | 
				
			||||||
    $this->assertFalse($file->access('download', $account), 'Private file is not downloadable to authenticated user');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // Create anonymous user to check file access.
 | 
					 | 
				
			||||||
    $account = $this->createUser()->getAnonymousUser();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    $this->assertFalse($file->access('view', $account), 'Private file is not viewable to anonymous user');
 | 
					 | 
				
			||||||
    $this->assertFalse($file->access('download', $account), 'Private file is not downloadable to anonymous user');
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,77 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Drupal\Tests\file\Kernel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Drupal\Core\Session\AccountInterface;
 | 
				
			||||||
 | 
					use Drupal\file\Entity\File;
 | 
				
			||||||
 | 
					use Drupal\KernelTests\KernelTestBase;
 | 
				
			||||||
 | 
					use Drupal\Tests\user\Traits\UserCreationTrait;
 | 
				
			||||||
 | 
					use Drupal\user\Entity\User;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Tests access to managed files.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @group file
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class FileManagedAccessTest extends KernelTestBase {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  use UserCreationTrait;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * {@inheritdoc}
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  protected static $modules = [
 | 
				
			||||||
 | 
					    'file',
 | 
				
			||||||
 | 
					    'system',
 | 
				
			||||||
 | 
					    'user',
 | 
				
			||||||
 | 
					  ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /**
 | 
				
			||||||
 | 
					   * Tests if public file is always accessible.
 | 
				
			||||||
 | 
					   */
 | 
				
			||||||
 | 
					  public function testFileAccess() {
 | 
				
			||||||
 | 
					    $this->installSchema('system', ['sequences']);
 | 
				
			||||||
 | 
					    $this->installEntitySchema('user');
 | 
				
			||||||
 | 
					    $this->installEntitySchema('file');
 | 
				
			||||||
 | 
					    $this->installSchema('file', ['file_usage']);
 | 
				
			||||||
 | 
					    $this->installConfig('user');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $anonymous = User::create(['uid' => 0, 'name' => '']);
 | 
				
			||||||
 | 
					    $anonymous->save();
 | 
				
			||||||
 | 
					    user_role_grant_permissions(AccountInterface::ANONYMOUS_ROLE, ['access content']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create an authenticated user to check file access.
 | 
				
			||||||
 | 
					    $account = $this->createUser(['access site reports', 'access content'], NULL, FALSE, ['uid' => 2]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create a new file entity in the public:// stream wrapper.
 | 
				
			||||||
 | 
					    $file_public = File::create([
 | 
				
			||||||
 | 
					      'uid' => 1,
 | 
				
			||||||
 | 
					      'filename' => 'drupal.txt',
 | 
				
			||||||
 | 
					      'uri' => 'public://drupal.txt',
 | 
				
			||||||
 | 
					      'status' => FILE_STATUS_PERMANENT,
 | 
				
			||||||
 | 
					    ]);
 | 
				
			||||||
 | 
					    $file_public->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $this->assertTrue($file_public->access('view', $account));
 | 
				
			||||||
 | 
					    $this->assertTrue($file_public->access('download', $account));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $this->assertTrue($file_public->access('view', $anonymous));
 | 
				
			||||||
 | 
					    $this->assertTrue($file_public->access('download', $anonymous));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Create a new file entity in the private:// stream wrapper.
 | 
				
			||||||
 | 
					    $file_private = File::create([
 | 
				
			||||||
 | 
					      'uid' => 1,
 | 
				
			||||||
 | 
					      'filename' => 'drupal.txt',
 | 
				
			||||||
 | 
					      'uri' => 'private://drupal.txt',
 | 
				
			||||||
 | 
					      'status' => FILE_STATUS_PERMANENT,
 | 
				
			||||||
 | 
					    ]);
 | 
				
			||||||
 | 
					    $file_private->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $this->assertFalse($file_private->access('view', $account));
 | 
				
			||||||
 | 
					    $this->assertFalse($file_private->access('download', $account));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    $this->assertFalse($file_private->access('view', $anonymous));
 | 
				
			||||||
 | 
					    $this->assertFalse($file_private->access('download', $anonymous));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue