View source
<?php
require_once 'ServicesWebTestCase.php';
class ServicesResourceFileTests extends ServicesWebTestCase {
protected $privileged_user = NULL;
protected $endpoint = NULL;
protected $testfiles;
public function setUp() {
parent::setUp('upload', 'autoload', 'ctools', 'services', 'rest_server', 'inputstream');
$this->endpoint = $this
->saveNewEndpoint();
$this->privileged_user = $this
->drupalCreateUser(array(
'get own binary files',
'save file information',
'administer services',
'administer site configuration',
'upload files',
));
$this
->drupalLogin($this->privileged_user);
$this->testfiles = $this
->drupalGetTestFiles('text');
}
public static function getInfo() {
return array(
'name' => t('Resource File'),
'description' => t('Test the resource File methods.'),
'group' => t('Services'),
);
}
public function testResourceFileCreate() {
$file = array(
'filesize' => filesize($this->testfiles[0]->filename),
'filename' => str_replace('/simpletest/', '/' . $this
->randomName() . '/' . $this
->randomName() . '/', $this->testfiles[0]->filename),
'file' => base64_encode(file_get_contents($this->testfiles[0]->filename)),
);
$result = $this
->servicesPost($this->endpoint->path . '/file', $file);
$this
->assertEqual($result['code'], 200, t('File created.'), 'FileResource: Create');
$dbresult = db_query('SELECT * FROM {files} WHERE fid = %d', $result['body']['fid']);
$file_load = db_fetch_object($dbresult);
$this
->assertTrue(is_file($file_load->filepath), t('New file saved to disk.'), 'FileResource: Create');
$this
->assertEqual($file_load->uid, $this->privileged_user->uid, t('File author id is preserved.'), 'FileResource: Create');
$result = $this
->servicesPost($this->endpoint->path . '/file', $file);
$dbresult = db_query('SELECT * FROM {files} WHERE fid = %d', $result['body']['fid']);
$file1 = db_fetch_object($dbresult);
$file2 = db_fetch_object($dbresult);
$this
->assertTrue($file1->filename != $file2->filename && $file1->filepath != $file2->filepath, t('Two identical files created end up with different names.'), 'FileResource: Create');
}
public function testResourceFileCreateLegacy() {
$file = array(
'filesize' => filesize($this->testfiles[0]->filename),
'filename' => $this->testfiles[0]->filename,
'file' => base64_encode(file_get_contents($this->testfiles[0]->filename)),
'uid' => $this->privileged_user->uid,
);
$result = $this
->servicesPost($this->endpoint->path . '/file', array(
'file' => $file,
));
$this
->assertEqual($result['code'], 200, t('File created.'), 'FileResource: Create (Legacy)');
$dbresult = db_query('SELECT * FROM {files} WHERE fid = %d', $result['body']['fid']);
$file_load = db_fetch_object($dbresult);
$this
->assertTrue(is_file($file_load->filepath), t('New file saved to disk.'), 'FileResource: Create (Legacy)');
$result = $this
->servicesPost($this->endpoint->path . '/file', array(
'file' => $file,
));
$dbresult = db_query('SELECT * FROM {files} WHERE fid = %d', $result['body']['fid']);
$file1 = db_fetch_object($dbresult);
$file2 = db_fetch_object($dbresult);
$this
->assertTrue($file1->filename != $file2->filename && $file1->filepath != $file2->filepath, t('Two identical files created end up with different names.'), 'FileResource: Create (Legacy)');
}
public function testResourceFileRetrieve() {
$testfile = $this
->uploadTestFile();
$result = $this
->servicesGet($this->endpoint->path . '/file/' . $testfile['fid']);
$file = $result['body'];
$this
->assertTrue($file['fid'] == $testfile['fid'] && $file['filesize'] == $testfile['filesize'], t('File retrieved.'), 'FileResource: Retrieve');
}
public function testResourceFileDelete() {
$testfile = $this
->uploadTestFile();
$result = $this
->servicesDelete($this->endpoint->path . '/file/' . $testfile['fid']);
$fid = db_result(db_query('SELECT fid FROM {files} WHERE fid = %d', $testfile['fid']));
$this
->assertTrue(empty($fid), t('File deleted.'), 'FileResource: Delete');
}
public function uploadTestFile($file = NULL) {
if (empty($file)) {
$file = current($this->testfiles);
}
$testfile = array(
'fid' => NULL,
'uid' => $this->privileged_user->uid,
'filename' => trim(basename($file->filename), '.'),
'filepath' => $file->filename,
'filemime' => file_get_mimetype($file->filename),
'filesize' => filesize($file->filename),
'status' => FILE_STATUS_PERMANENT,
'timestamp' => time(),
);
$source = $testfile['filepath'];
$destination = file_directory_path() . '/' . $testfile['filepath'];
$dirname = dirname($destination);
$dir_array = explode('/', $dirname);
$file_check_directory_array = array();
foreach ($dir_array as $dir_element) {
$file_check_directory_array[] = $dir_element;
$dir_path_element = implode('/', $file_check_directory_array);
file_check_directory($dir_path_element, FILE_CREATE_DIRECTORY);
}
file_copy($source, $destination);
drupal_write_record('files', $testfile);
return $testfile;
}
}