diff --git a/tests/file_entity.test b/tests/file_entity.test
index 2799ef4..5f48863 100644
--- a/tests/file_entity.test
+++ b/tests/file_entity.test
@@ -143,7 +143,7 @@ class FileEntityReplaceTestCase extends FileEntityTestHelper {
     $file = reset($this->files['text']);

     // Create a user with file edit permissions.
-    $user = $this->drupalCreateUser(array('edit file'));
+    $user = $this->drupalCreateUser(array('edit any files'));
     $this->drupalLogin($user);

     // Test that the Upload widget appears for a local file.
@@ -293,3 +293,130 @@ class FileEntityTypeTestCase extends FileEntityTestHelper {


 }
+
+class FileEntityAccessTestCase extends FileEntityTestHelper {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'File entity access',
+      'description' => 'Test the access aspects of file entity.',
+      'group' => 'File entity',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+  }
+
+  /**
+   * Asserts file_entity_access correctly grants or denies access.
+   */
+  function assertFileEntityAccess($ops, $file, $account) {
+    foreach ($ops as $op => $result) {
+      $msg = t("file_entity_access returns @result with operation '@op'.", array('@result' => $result ? 'true' : 'false', '@op' => $op));
+      $this->assertEqual($result, file_entity_access($op, $file, $account), $msg);
+    }
+  }
+
+  /**
+   * Runs basic tests for file_entity_access function.
+   */
+  function testFileEntityAccess() {
+    $file = reset($this->files['image']);
+
+    // Ensures user with 'bypass file access' permission can do everything.
+    $web_user = $this->drupalCreateUser(array('bypass file access'));
+    $this->assertFileEntityAccess(array('create' => TRUE), NULL, $web_user);
+    $this->assertFileEntityAccess(array('view' => TRUE, 'update' => TRUE, 'delete' => TRUE), $file, $web_user);
+
+    // User cannot 'view files'.
+    $web_user = $this->drupalCreateUser(array('create files'));
+    $this->assertFileEntityAccess(array('view' => FALSE), $file, $web_user);
+    // But can upload new ones.
+    $this->assertFileEntityAccess(array('create' => TRUE), NULL, $web_user);
+
+    // User can view own files but no other files.
+    $web_user = $this->drupalCreateUser(array('create files', 'view own files'));
+    $this->assertFileEntityAccess(array('view' => FALSE), $file, $web_user);
+    $file->uid = $web_user->uid;
+    $file->status = FILE_STATUS_PERMANENT;
+    file_save($file);
+    $this->assertFileEntityAccess(array('view' => TRUE), $file, $web_user);
+
+    // User can update own files but no other files.
+    $web_user = $this->drupalCreateUser(array('create files', 'view own files', 'edit own files'));
+    $this->assertFileEntityAccess(array('update' => FALSE), $file, $web_user);
+    $file->uid = $web_user->uid;
+    $file->status = FILE_STATUS_PERMANENT;
+    file_save($file);
+    $this->assertFileEntityAccess(array('update' => TRUE), $file, $web_user);
+
+    // User can delete own files but no other files.
+    $web_user = $this->drupalCreateUser(array('create files', 'view own files', 'edit own files', 'delete own files'));
+    $this->assertFileEntityAccess(array('delete' => FALSE), $file, $web_user);
+    $file->uid = $web_user->uid;
+    $file->status = FILE_STATUS_PERMANENT;
+    file_save($file);
+    $this->assertFileEntityAccess(array('delete' => TRUE), $file, $web_user);
+
+    // User can view any file.
+    $web_user = $this->drupalCreateUser(array('create files', 'view files'));
+    $this->assertFileEntityAccess(array('view' => TRUE), $file, $web_user);
+
+    // User can edit any file.
+    $web_user = $this->drupalCreateUser(array('create files', 'view files', 'edit any files'));
+    $this->assertFileEntityAccess(array('update' => TRUE), $file, $web_user);
+
+    // User can delete any file.
+    $web_user = $this->drupalCreateUser(array('create files', 'view files', 'edit any files', 'delete any files'));
+    $this->assertFileEntityAccess(array('delete' => TRUE), $file, $web_user);
+  }
+
+  /**
+   * Test to see if we have access to view files when granted the permissions.
+   * In this test we aim to prove the permissions work in the following pages:
+   *  file/add
+   *  file/%/view
+   *  file/%/edit
+   *  file/%/delete
+   */
+  function testFileEntityPageAccess() {
+    $web_user = $this->drupalCreateUser(array());
+    $this->drupalLogin($web_user);
+    $this->drupalGet('file/add');
+    $this->assertResponse(403, 'Users without access can not access the file add page');
+    $web_user = $this->drupalCreateUser(array('create files'));
+    $this->drupalLogin($web_user);
+    $this->drupalGet('file/add');
+    $this->assertResponse(200, 'Users with access can access the file add page');
+
+    $file = reset($this->files['text']);
+    $file->status = FILE_STATUS_PERMANENT;
+    file_save($file);
+
+    $web_user = $this->drupalCreateUser(array());
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/view");
+    $this->assertResponse(403, 'Users without access can not access the file view page');
+    $web_user = $this->drupalCreateUser(array('view files'));
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/view");
+    $this->assertResponse(200, 'Users with access can access the file add page');
+
+    $web_user = $this->drupalCreateUser(array());
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/edit");
+    $this->assertResponse(403, 'Users without access can not access the file edit page');
+    $web_user = $this->drupalCreateUser(array('edit any files'));
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/edit");
+    $this->assertResponse(200, 'Users with access can access the file add page');
+
+    $web_user = $this->drupalCreateUser(array());
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/delete");
+    $this->assertResponse(403, 'Users without access can not access the file view page');
+    $web_user = $this->drupalCreateUser(array('delete any files'));
+    $this->drupalLogin($web_user);
+    $this->drupalGet("file/{$file->fid}/delete");
+    $this->assertResponse(200, 'Users with access can access the file add page');
+  }
+}
