summaryrefslogtreecommitdiff
path: root/sites/all/modules/media/modules/media_internet/tests/media_internet.test
diff options
context:
space:
mode:
Diffstat (limited to 'sites/all/modules/media/modules/media_internet/tests/media_internet.test')
-rw-r--r--sites/all/modules/media/modules/media_internet/tests/media_internet.test394
1 files changed, 394 insertions, 0 deletions
diff --git a/sites/all/modules/media/modules/media_internet/tests/media_internet.test b/sites/all/modules/media/modules/media_internet/tests/media_internet.test
new file mode 100644
index 000000000..04b3243b6
--- /dev/null
+++ b/sites/all/modules/media/modules/media_internet/tests/media_internet.test
@@ -0,0 +1,394 @@
+<?php
+
+/**
+ * @file
+ * Tests for media_internet.module.
+ */
+
+/**
+ * Provides methods specifically for testing Media Internet module's remote media handling.
+ */
+class MediaInternetTestHelper extends DrupalWebTestCase {
+ function setUp() {
+ // Since this is a base class for many test cases, support the same
+ // flexibility that DrupalWebTestCase::setUp() has for the modules to be
+ // passed in as either an array or a variable number of string arguments.
+ $modules = func_get_args();
+ if (isset($modules[0]) && is_array($modules[0])) {
+ $modules = $modules[0];
+ }
+ $modules[] = 'media_internet';
+ parent::setUp($modules);
+ }
+
+ /**
+ * Retrieves a sample file of the specified type.
+ */
+ function getTestFile($type_name, $size = NULL) {
+ // Get a file to upload.
+ $file = current($this->drupalGetTestFiles($type_name, $size));
+
+ // Add a filesize property to files as would be read by file_load().
+ $file->filesize = filesize($file->uri);
+
+ return $file;
+ }
+
+ /**
+ * Retrieves the fid of the last inserted file.
+ */
+ function getLastFileId() {
+ return (int) db_query('SELECT MAX(fid) FROM {file_managed}')->fetchField();
+ }
+
+ /**
+ * Get a file from the database based on its filename.
+ *
+ * @param $filename
+ * A file filename, usually generated by $this->randomName().
+ * @param $reset
+ * (optional) Whether to reset the internal file_load() cache.
+ *
+ * @return
+ * A file object matching $filename.
+ */
+ function getFileByFilename($filename, $reset = FALSE) {
+ $files = file_load_multiple(array(), array('filename' => $filename), $reset);
+ // Load the first file returned from the database.
+ $returned_file = reset($files);
+ return $returned_file;
+ }
+
+ protected function createFileType($overrides = array()) {
+ $type = new stdClass();
+ $type->type = 'test';
+ $type->label = "Test";
+ $type->description = '';
+ $type->mimetypes = array('image/jpeg', 'image/gif', 'image/png', 'image/tiff');
+
+ foreach ($overrides as $k => $v) {
+ $type->$k = $v;
+ }
+
+ file_type_save($type);
+ return $type;
+ }
+}
+
+/**
+ * Tests the media browser 'Web' tab.
+ */
+class MediaInternetBrowserWebTabTestCase extends MediaInternetTestHelper {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Media browser web tab test',
+ 'description' => 'Tests the media browser web tab.',
+ 'group' => 'Media Internet',
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+
+ $web_user = $this->drupalCreateUser(array('access media browser', 'add media from remote sources'));
+ $this->drupalLogin($web_user);
+ }
+
+ /**
+ * Tests that the views sorting works on the media browser 'Library' tab.
+ */
+ function testMediaBrowserWebTab() {
+ // Load only the 'Library' tab of the media browser.
+ $options = array(
+ 'query' => array(
+ 'enabledPlugins' => array(
+ 'media_internet' => 'media_internet',
+ ),
+ ),
+ );
+
+ $this->drupalGet('media/browser', $options);
+ $this->assertResponse(200);
+
+ // Check that the web tab is available and has an 'embed code' field.
+ $this->assertRaw(t('Web'), t('The web tab was found.'));
+ $this->assertFieldByName('embed_code', '', t('Embed code form field found.'));
+ }
+}
+
+/**
+ * Test the default MediaInternetFileHandler provider.
+ */
+class MediaInternetRemoteFileTestCase extends MediaInternetTestHelper {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Remote media file handler provider',
+ 'description' => 'Test the default remote file handler provider.',
+ 'group' => 'Media Internet',
+ );
+ }
+
+ function setUp() {
+ parent::setUp();
+
+ // Disable the private file system which is automatically enabled by
+ // DrupalTestCase so we can test the upload wizard correctly.
+ variable_del('file_private_path');
+
+ $web_user = $this->drupalCreateUser(array('create files', 'add media from remote sources'));
+ $this->drupalLogin($web_user);
+ }
+
+ /**
+ * Tests the default remote file handler.
+ */
+ function testRemoteFileHandling() {
+ // Step 1: Add a basic document file by providing a URL to the file.
+ $edit = array();
+ $edit['embed_code'] = file_create_url('README.txt');
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => 'Document', '%name' => $file->filename)), t('Document file uploaded.'));
+ }
+}
+
+/**
+ * Tests custom media provider APIs.
+ */
+class MediaInternetProviderTestCase extends MediaInternetTestHelper {
+ public static function getInfo() {
+ return array(
+ 'name' => 'Custom media provider test',
+ 'description' => 'Tests the custom media provider APIs.',
+ 'group' => 'Media Internet',
+ );
+ }
+
+ function setUp() {
+ parent::setUp('media_internet_test');
+
+ // Disable the private file system which is automatically enabled by
+ // DrupalTestCase so we can test the upload wizard correctly.
+ variable_del('file_private_path');
+
+ // Enable media_internet_test.module's hook_media_internet_providers()
+ // implementation.
+ variable_set('media_internet_test_media_internet_providers', TRUE);
+
+ $web_user = $this->drupalCreateUser(array('create files', 'view own private files', 'add media from remote sources'));
+ $this->drupalLogin($web_user);
+ }
+
+ /**
+ * Test the basic file upload wizard functionality.
+ */
+ function testMediaInternetCustomProviderWizardBasic() {
+ $this->drupalGet('file/add/web');
+ $this->assertResponse(200);
+
+ // Check that the provider is listed as supported.
+ $this->assertRaw(t('Supported internet media providers: !providers.', array('!providers' => '<strong>' . 'Media Internet Test' . '</strong>')), t('The example media provider is enabled.'));
+
+ // Enable media_internet_test.module's
+ // hook_media_browser_plugin_info_alter_alter() implementation and ensure it
+ // is working as designed.
+ variable_set('media_internet_test_media_internet_providers_alter', TRUE);
+
+ $this->drupalGet('file/add/web');
+ $this->assertRaw(t('Supported internet media providers: !providers.', array('!providers' => '<strong>' . 'Altered provider title' . '</strong>')), t('The example media provider was successfully altered.'));
+
+ // Step 1: Upload a basic video file.
+ $edit = array();
+ $edit['embed_code'] = 'http://www.example.com/video/123';
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => 'Video', '%name' => $file->filename)), t('Video file uploaded.'));
+ }
+
+ /**
+ * Test the file upload wizard type step.
+ */
+ function testMediaInternetCustomProviderWizardTypes() {
+ // Create multiple file types with the same mime types.
+ $this->createFileType(array('type' => 'video1', 'label' => 'Video 1', 'mimetypes' => array('video/mediainternettest')));
+ $this->createFileType(array('type' => 'video2', 'label' => 'Video 2', 'mimetypes' => array('video/mediainternettest')));
+
+ // Step 1: Upload a basic video file.
+ $edit = array();
+ $edit['embed_code'] = 'http://www.example.com/video/123';
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Step 2: File type selection.
+ $edit = array();
+ $edit['type'] = 'video2';
+ $this->drupalPost(NULL, $edit, t('Next'));
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => 'Video 2', '%name' => $file->filename)), t('Video 2 file uploaded.'));
+ }
+
+ /**
+ * Test the file upload wizard scheme step.
+ */
+ function testMediaInternetCustomProviderWizardSchemes() {
+ // Enable the private file system.
+ variable_set('file_private_path', $this->private_files_directory);
+
+ // Step 1: Upload a basic video file.
+ $edit = array();
+ $edit['embed_code'] = 'http://www.example.com/video/123';
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Step 3: Users should not be able to select a scheme for files with
+ // read-only stream wrappers.
+ $this->assertNoFieldByName('scheme');
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => 'Video', '%name' => $file->filename)), t('Video file uploaded.'));
+ }
+
+ /**
+ * Test the file upload wizard field step.
+ */
+ function testMediaInternetCustomProviderWizardFields() {
+ $filename = $this->randomName();
+
+ // Add a text field to the video file type.
+ $field_name = drupal_strtolower($this->randomName() . '_field_name');
+ $field = array('field_name' => $field_name, 'type' => 'text');
+ field_create_field($field);
+ $instance = array(
+ 'field_name' => $field_name,
+ 'entity_type' => 'file',
+ 'bundle' => 'video',
+ 'label' => $this->randomName() . '_label',
+ );
+ field_create_instance($instance);
+
+ // Step 1: Upload a basic video file.
+ $edit = array();
+ $edit['embed_code'] = 'http://www.example.com/video/123';
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Step 4: Attached fields.
+ $edit = array();
+ $edit['filename'] = $filename;
+ $edit[$field_name . '[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName();
+ $this->drupalPost(NULL, $edit, t('Save'));
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => 'Video', '%name' => $filename)), t('Video file uploaded.'));
+ }
+
+ /**
+ * Test skipping each of the file upload wizard steps.
+ */
+ function testMediaInternetCustomProviderWizardStepSkipping() {
+ $filename = $this->randomName();
+
+ // Ensure that the file is affected by every step.
+ variable_set('file_private_path', $this->private_files_directory);
+
+ $this->createFileType(array('type' => 'video1', 'label' => 'Video 1', 'mimetypes' => array('video/mediainternettest')));
+ $this->createFileType(array('type' => 'video2', 'label' => 'Video 2', 'mimetypes' => array('video/mediainternettest')));
+
+ $field_name = drupal_strtolower($this->randomName() . '_field_name');
+ $field = array('field_name' => $field_name, 'type' => 'text');
+ field_create_field($field);
+ $instance = array(
+ 'field_name' => $field_name,
+ 'entity_type' => 'file',
+ 'bundle' => 'video2',
+ 'label' => $this->randomName() . '_label',
+ );
+ field_create_instance($instance);
+
+ // Test skipping each upload wizard step.
+ foreach (array('types', 'schemes', 'fields') as $step) {
+ // Step to skip.
+ switch ($step) {
+ case 'types':
+ variable_set('file_entity_file_upload_wizard_skip_file_type', TRUE);
+ break;
+ case 'schemes':
+ variable_set('file_entity_file_upload_wizard_skip_scheme', TRUE);
+ break;
+ case 'fields':
+ variable_set('file_entity_file_upload_wizard_skip_fields', TRUE);
+ break;
+ }
+
+ // Step 1: Upload a basic video file.
+ $edit = array();
+ $edit['embed_code'] = 'http://www.example.com/video/123';
+ $this->drupalPost('file/add/web', $edit, t('Next'));
+
+ // Step 2: File type selection.
+ if ($step != 'types') {
+ $edit = array();
+ $edit['type'] = 'video2';
+ $this->drupalPost(NULL, $edit, t('Next'));
+ }
+
+ // Step 3: Users should not be able to select a scheme for files with
+ // read-only stream wrappers.
+ $this->assertNoFieldByName('scheme');
+
+ // Step 4: Attached fields.
+ if ($step != 'fields') {
+ // Skipping file type selection essentially skips this step as well
+ // because the file will not be assigned a type so no fields will be
+ // available.
+ if ($step != 'types') {
+ $edit = array();
+ $edit['filename'] = $filename;
+ $edit[$field_name . '[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName();
+ $this->drupalPost(NULL, $edit, t('Save'));
+ }
+ }
+
+ // Check that the file exists in the database.
+ $fid = $this->getLastFileId();
+ $file = file_load($fid);
+ $this->assertTrue($file, t('File found in database.'));
+
+ // Determine the file's file type.
+ $type = file_type_load($file->type);
+
+ // Check that the video file has been uploaded.
+ $this->assertRaw(t('!type %name was uploaded.', array('!type' => $type->label, '%name' => $file->filename)), t('Video file uploaded.'));
+
+ // Reset 'skip' variables.
+ variable_del('file_entity_file_upload_wizard_skip_file_type');
+ variable_del('file_entity_file_upload_wizard_skip_scheme');
+ variable_del('file_entity_file_upload_wizard_skip_fields');
+ }
+ }
+}