--- /dev/null
+<?php
+
+namespace Drupal\media_entity\Tests;
+
+use Drupal\media_entity\Entity\Media;
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Ensures that basic functions work correctly.
+ *
+ * @group media_entity
+ */
+class BasicTest extends WebTestBase {
+
+ use MediaTestTrait;
+
+ /**
+ * The test media bundle.
+ *
+ * @var \Drupal\media_entity\MediaBundleInterface
+ */
+ protected $testBundle;
+
+ /**
+ * Modules to enable.
+ *
+ * @var array
+ */
+ public static $modules = ['system', 'node', 'media_entity'];
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function setUp() {
+ parent::setUp();
+ $this->testBundle = $this->drupalCreateMediaBundle();
+ }
+
+ /**
+ * Tests creating a media bundle programmatically.
+ */
+ public function testMediaBundleCreation() {
+ $bundle = $this->drupalCreateMediaBundle();
+ /** @var \Drupal\media_entity\MediaBundleInterface $bundle_storage */
+ $bundle_storage = $this->container->get('entity.manager')->getStorage('media_bundle');
+
+ $bundle_exists = (bool) $bundle_storage->load($bundle->id());
+ $this->assertTrue($bundle_exists, 'The new media bundle has been created in the database.');
+
+ // Test default bundle created from default configuration.
+ $this->container->get('module_installer')->install(['media_entity_test_bundle']);
+ $test_bundle = $bundle_storage->load('test');
+ $this->assertTrue((bool) $test_bundle, 'The media bundle from default configuration has been created in the database.');
+ $this->assertEqual($test_bundle->get('label'), 'Test bundle', 'Correct label detected.');
+ $this->assertEqual($test_bundle->get('description'), 'Test bundle.', 'Correct description detected.');
+ $this->assertEqual($test_bundle->get('type'), 'generic', 'Correct plugin ID detected.');
+ $this->assertEqual($test_bundle->get('type_configuration'), [], 'Correct plugin configuration detected.');
+ $this->assertEqual($test_bundle->get('field_map'), [], 'Correct field map detected.');
+ }
+
+ /**
+ * Tests creating a media entity programmatically.
+ */
+ public function testMediaEntityCreation() {
+ $media = Media::create([
+ 'bundle' => $this->testBundle->id(),
+ 'name' => 'Unnamed',
+ ]);
+ $media->save();
+
+ $media_not_exist = (bool) Media::load(rand(1000, 9999));
+ $this->assertFalse($media_not_exist, 'The media entity does not exist.');
+
+ $media_exists = (bool) Media::load($media->id());
+ $this->assertTrue($media_exists, 'The new media entity has been created in the database.');
+ $this->assertEqual($media->bundle(), $this->testBundle->id(), 'The media was created with correct bundle.');
+ $this->assertEqual($media->label(), 'Unnamed', 'The media was corrected with correct name.');
+
+ // Test the creation of a media without user-defined label and check if a
+ // default name is provided.
+ $media = Media::create([
+ 'bundle' => $this->testBundle->id(),
+ ]);
+ $media->save();
+ $expected_name = 'media' . ':' . $this->testBundle->id() . ':' . $media->uuid();
+ $this->assertEqual($media->bundle(), $this->testBundle->id(), 'The media was created with correct bundle.');
+ $this->assertEqual($media->label(), $expected_name, 'The media was correctly created with a default name.');
+
+ }
+
+ /**
+ * Runs basic tests for media_access function.
+ */
+ public function testMediaAccess() {
+ // Create users and roles.
+ $admin = $this->drupalCreateUser(['administer media'], 'editor');
+ $user = $this->drupalCreateUser([], 'user');
+
+ $permissions = [
+ 'view media',
+ 'create media',
+ 'update media',
+ 'update any media',
+ 'delete media',
+ 'delete any media',
+ ];
+
+ $roles = [];
+ foreach ($permissions as $permission) {
+ $roles[$permission] = $this->createRole([$permission]);
+ }
+
+ // Create media.
+ $media = Media::create([
+ 'bundle' => $this->testBundle->id(),
+ 'name' => 'Unnamed',
+ ]);
+ $media->save();
+
+ $user_media = Media::create([
+ 'bundle' => $this->testBundle->id(),
+ 'name' => 'Unnamed',
+ 'uid' => $user->id(),
+ ]);
+ $user_media->save();
+
+ // Test 'administer media' permission.
+ $this->drupalLogin($admin);
+ $this->drupalGet('media/' . $user_media->id());
+ $this->assertResponse(200);
+ $this->drupalGet('media/' . $user_media->id() . '/edit');
+ $this->assertResponse(200);
+ $this->drupalGet('media/' . $user_media->id() . '/delete');
+ $this->assertResponse(200);
+
+ // Test 'view media' permission.
+ $this->drupalLogin($user);
+ $this->drupalGet('media/' . $media->id());
+ $this->assertResponse(403);
+
+ $user->addRole($roles['view media']);
+ $user->save();
+
+ $this->drupalGet('media/' . $media->id());
+ $this->assertResponse(200);
+
+ // Test 'create media' permissions.
+ $this->drupalLogin($user);
+ $this->drupalGet('media/add/' . $this->testBundle->id());
+ $this->assertResponse(403);
+
+ $user->addRole($roles['create media']);
+ $user->save();
+
+ $this->drupalGet('media/add/' . $this->testBundle->id());
+ $this->assertResponse(200);
+
+ // Test 'update media' and 'delete media' permissions.
+ $this->drupalGet('media/' . $user_media->id() . '/edit');
+ $this->assertResponse(403);
+
+ $this->drupalGet('media/' . $user_media->id() . '/delete');
+ $this->assertResponse(403);
+
+ $user->addRole($roles['update media']);
+ $user->addRole($roles['delete media']);
+ $user->save();
+
+ $this->drupalGet('media/' . $user_media->id() . '/edit');
+ $this->assertResponse(200);
+
+ $this->drupalGet('media/' . $user_media->id() . '/delete');
+ $this->assertResponse(200);
+
+ // Test 'update any media' and 'delete any media' permissions.
+ $this->drupalGet('media/' . $media->id() . '/edit');
+ $this->assertResponse(403);
+
+ $this->drupalGet('media/' . $media->id() . '/delete');
+ $this->assertResponse(403);
+
+ $user->addRole($roles['update any media']);
+ $user->addRole($roles['delete any media']);
+ $user->save();
+
+ $this->drupalGet('media/' . $media->id() . '/edit');
+ $this->assertResponse(200);
+
+ $this->drupalGet('media/' . $media->id() . '/delete');
+ $this->assertResponse(200);
+ }
+
+}