|
|
<?php |
|
|
|
|
|
require_once __DIR__.'/../Base.php'; |
|
|
|
|
|
use Kanboard\Model\TaskFileModel; |
|
|
use Kanboard\Model\TaskCreationModel; |
|
|
use Kanboard\Model\ProjectModel; |
|
|
|
|
|
class TaskFileModelTest extends Base |
|
|
{ |
|
|
public function testCreation() |
|
|
{ |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10)); |
|
|
|
|
|
$file = $fileModel->getById(1); |
|
|
$this->assertEquals('test', $file['name']); |
|
|
$this->assertEquals('/tmp/foo', $file['path']); |
|
|
$this->assertEquals(0, $file['is_image']); |
|
|
$this->assertEquals(1, $file['task_id']); |
|
|
$this->assertEqualsWithDelta(time(), $file['date'], 2, ''); |
|
|
$this->assertEquals(0, $file['user_id']); |
|
|
$this->assertEquals(10, $file['size']); |
|
|
|
|
|
$this->assertEquals(2, $fileModel->create(1, 'test2.png', '/tmp/foobar', 10)); |
|
|
|
|
|
$file = $fileModel->getById(2); |
|
|
$this->assertEquals('test2.png', $file['name']); |
|
|
$this->assertEquals('/tmp/foobar', $file['path']); |
|
|
$this->assertEquals(1, $file['is_image']); |
|
|
} |
|
|
|
|
|
public function testCreationWithFileNameTooLong() |
|
|
{ |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$this->assertNotFalse($fileModel->create(1, 'test', '/tmp/foo', 10)); |
|
|
$this->assertNotFalse($fileModel->create(1, str_repeat('a', 1000), '/tmp/foo', 10)); |
|
|
|
|
|
$files = $fileModel->getAll(1); |
|
|
$this->assertNotEmpty($files); |
|
|
$this->assertCount(2, $files); |
|
|
|
|
|
$this->assertEquals(str_repeat('a', 255), $files[0]['name']); |
|
|
$this->assertEquals('test', $files[1]['name']); |
|
|
} |
|
|
|
|
|
public function testCreationWithSessionOpen() |
|
|
{ |
|
|
$_SESSION['user'] = array('id' => 1); |
|
|
|
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foo', 10)); |
|
|
|
|
|
$file = $fileModel->getById(1); |
|
|
$this->assertEquals('test', $file['name']); |
|
|
$this->assertEquals(1, $file['user_id']); |
|
|
} |
|
|
|
|
|
public function testGetAll() |
|
|
{ |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$this->assertEquals(1, $fileModel->create(1, 'B.pdf', '/tmp/foo', 10)); |
|
|
$this->assertEquals(2, $fileModel->create(1, 'A.png', '/tmp/foo', 10)); |
|
|
$this->assertEquals(3, $fileModel->create(1, 'D.doc', '/tmp/foo', 10)); |
|
|
$this->assertEquals(4, $fileModel->create(1, 'C.JPG', '/tmp/foo', 10)); |
|
|
|
|
|
$fileModeliles = $fileModel->getAll(1); |
|
|
$this->assertNotEmpty($fileModeliles); |
|
|
$this->assertCount(4, $fileModeliles); |
|
|
$this->assertEquals('A.png', $fileModeliles[0]['name']); |
|
|
$this->assertEquals('B.pdf', $fileModeliles[1]['name']); |
|
|
$this->assertEquals('C.JPG', $fileModeliles[2]['name']); |
|
|
$this->assertEquals('D.doc', $fileModeliles[3]['name']); |
|
|
|
|
|
$fileModeliles = $fileModel->getAllImages(1); |
|
|
$this->assertNotEmpty($fileModeliles); |
|
|
$this->assertCount(2, $fileModeliles); |
|
|
$this->assertEquals('A.png', $fileModeliles[0]['name']); |
|
|
$this->assertEquals('C.JPG', $fileModeliles[1]['name']); |
|
|
|
|
|
$fileModeliles = $fileModel->getAllDocuments(1); |
|
|
$this->assertNotEmpty($fileModeliles); |
|
|
$this->assertCount(2, $fileModeliles); |
|
|
$this->assertEquals('B.pdf', $fileModeliles[0]['name']); |
|
|
$this->assertEquals('D.doc', $fileModeliles[1]['name']); |
|
|
} |
|
|
|
|
|
public function testIsImage() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
|
|
|
$this->assertTrue($fileModel->isImage('test.png')); |
|
|
$this->assertTrue($fileModel->isImage('test.jpeg')); |
|
|
$this->assertTrue($fileModel->isImage('test.gif')); |
|
|
$this->assertTrue($fileModel->isImage('test.jpg')); |
|
|
$this->assertTrue($fileModel->isImage('test.JPG')); |
|
|
|
|
|
$this->assertFalse($fileModel->isImage('test.bmp')); |
|
|
$this->assertFalse($fileModel->isImage('test')); |
|
|
$this->assertFalse($fileModel->isImage('test.pdf')); |
|
|
} |
|
|
|
|
|
public function testGetThumbnailPath() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$this->assertEquals('thumbnails'.DIRECTORY_SEPARATOR.'test', $fileModel->getThumbnailPath('test')); |
|
|
} |
|
|
|
|
|
public function testGeneratePath() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
|
|
|
$this->assertStringStartsWith('tasks'.DIRECTORY_SEPARATOR.'34'.DIRECTORY_SEPARATOR, $fileModel->generatePath(34, 'test.png')); |
|
|
$this->assertNotEquals($fileModel->generatePath(34, 'test1.png'), $fileModel->generatePath(34, 'test2.png')); |
|
|
} |
|
|
|
|
|
public function testUploadFiles() |
|
|
{ |
|
|
$fileModel = $this |
|
|
->getMockBuilder('\Kanboard\Model\TaskFileModel') |
|
|
->setConstructorArgs(array($this->container)) |
|
|
->setMethods(array('generateThumbnailFromFile')) |
|
|
->getMock(); |
|
|
|
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$files = array( |
|
|
'name' => array( |
|
|
'file1.png', |
|
|
'file2.doc', |
|
|
), |
|
|
'tmp_name' => array( |
|
|
'/tmp/phpYzdqkD', |
|
|
'/tmp/phpeEwEWG', |
|
|
), |
|
|
'error' => array( |
|
|
UPLOAD_ERR_OK, |
|
|
UPLOAD_ERR_OK, |
|
|
), |
|
|
'size' => array( |
|
|
123, |
|
|
456, |
|
|
), |
|
|
); |
|
|
|
|
|
$fileModel |
|
|
->expects($this->once()) |
|
|
->method('generateThumbnailFromFile'); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->exactly(2)) |
|
|
->method('moveUploadedFile') |
|
|
->withConsecutive( |
|
|
['/tmp/phpYzdqkD'], |
|
|
['/tmp/phpeEwEWG'], |
|
|
); |
|
|
|
|
|
$this->assertTrue($fileModel->uploadFiles(1, $files)); |
|
|
|
|
|
$files = $fileModel->getAll(1); |
|
|
$this->assertCount(2, $files); |
|
|
|
|
|
$this->assertEquals(1, $files[0]['id']); |
|
|
$this->assertEquals('file1.png', $files[0]['name']); |
|
|
$this->assertEquals(1, $files[0]['is_image']); |
|
|
$this->assertEquals(1, $files[0]['task_id']); |
|
|
$this->assertEquals(0, $files[0]['user_id']); |
|
|
$this->assertEquals(123, $files[0]['size']); |
|
|
$this->assertEqualsWithDelta(time(), $files[0]['date'], 2, ''); |
|
|
|
|
|
$this->assertEquals(2, $files[1]['id']); |
|
|
$this->assertEquals('file2.doc', $files[1]['name']); |
|
|
$this->assertEquals(0, $files[1]['is_image']); |
|
|
$this->assertEquals(1, $files[1]['task_id']); |
|
|
$this->assertEquals(0, $files[1]['user_id']); |
|
|
$this->assertEquals(456, $files[1]['size']); |
|
|
$this->assertEqualsWithDelta(time(), $files[1]['date'], 2, ''); |
|
|
} |
|
|
|
|
|
public function testUploadFilesWithEmptyFiles() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$this->assertFalse($fileModel->uploadFiles(1, array())); |
|
|
} |
|
|
|
|
|
public function testUploadFilesWithUploadError() |
|
|
{ |
|
|
$files = array( |
|
|
'name' => array( |
|
|
'file1.png', |
|
|
'file2.doc', |
|
|
), |
|
|
'tmp_name' => array( |
|
|
'', |
|
|
'/tmp/phpeEwEWG', |
|
|
), |
|
|
'error' => array( |
|
|
UPLOAD_ERR_CANT_WRITE, |
|
|
UPLOAD_ERR_OK, |
|
|
), |
|
|
'size' => array( |
|
|
123, |
|
|
456, |
|
|
), |
|
|
); |
|
|
|
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$this->assertFalse($fileModel->uploadFiles(1, $files)); |
|
|
} |
|
|
|
|
|
public function testUploadFilesWithObjectStorageError() |
|
|
{ |
|
|
$files = array( |
|
|
'name' => array( |
|
|
'file1.csv', |
|
|
'file2.doc', |
|
|
), |
|
|
'tmp_name' => array( |
|
|
'/tmp/phpYzdqkD', |
|
|
'/tmp/phpeEwEWG', |
|
|
), |
|
|
'error' => array( |
|
|
UPLOAD_ERR_OK, |
|
|
UPLOAD_ERR_OK, |
|
|
), |
|
|
'size' => array( |
|
|
123, |
|
|
456, |
|
|
), |
|
|
); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('moveUploadedFile') |
|
|
->with($this->equalTo('/tmp/phpYzdqkD'), $this->anything()) |
|
|
->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test'))); |
|
|
|
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$this->assertFalse($fileModel->uploadFiles(1, $files)); |
|
|
} |
|
|
|
|
|
public function testUploadFileContent() |
|
|
{ |
|
|
$fileModel = $this |
|
|
->getMockBuilder('\Kanboard\Model\TaskFileModel') |
|
|
->setConstructorArgs(array($this->container)) |
|
|
->setMethods(array('generateThumbnailFromFile')) |
|
|
->getMock(); |
|
|
|
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
$data = 'test'; |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('put') |
|
|
->with($this->anything(), $this->equalTo($data)); |
|
|
|
|
|
$this->assertEquals(1, $fileModel->uploadContent(1, 'test.doc', base64_encode($data))); |
|
|
|
|
|
$files = $fileModel->getAll(1); |
|
|
$this->assertCount(1, $files); |
|
|
|
|
|
$this->assertEquals(1, $files[0]['id']); |
|
|
$this->assertEquals('test.doc', $files[0]['name']); |
|
|
$this->assertEquals(0, $files[0]['is_image']); |
|
|
$this->assertEquals(1, $files[0]['task_id']); |
|
|
$this->assertEquals(0, $files[0]['user_id']); |
|
|
$this->assertEquals(4, $files[0]['size']); |
|
|
$this->assertEqualsWithDelta(time(), $files[0]['date'], 2, ''); |
|
|
} |
|
|
|
|
|
public function testUploadFileContentWithObjectStorageError() |
|
|
{ |
|
|
$fileModel = $this |
|
|
->getMockBuilder('\Kanboard\Model\TaskFileModel') |
|
|
->setConstructorArgs(array($this->container)) |
|
|
->setMethods(array('generateThumbnailFromFile')) |
|
|
->getMock(); |
|
|
|
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
$data = 'test'; |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('put') |
|
|
->with($this->anything(), $this->equalTo($data)) |
|
|
->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test'))); |
|
|
|
|
|
$this->assertFalse($fileModel->uploadContent(1, 'test.doc', base64_encode($data))); |
|
|
} |
|
|
|
|
|
public function testUploadScreenshot() |
|
|
{ |
|
|
$fileModel = $this |
|
|
->getMockBuilder('\Kanboard\Model\TaskFileModel') |
|
|
->setConstructorArgs(array($this->container)) |
|
|
->setMethods(array('generateThumbnailFromData')) |
|
|
->getMock(); |
|
|
|
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
$data = 'test'; |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
|
|
|
$fileModel |
|
|
->expects($this->once()) |
|
|
->method('generateThumbnailFromData'); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('put') |
|
|
->with($this->anything(), $this->equalTo($data)); |
|
|
|
|
|
$this->assertEquals(1, $fileModel->uploadScreenshot(1, base64_encode($data))); |
|
|
|
|
|
$files = $fileModel->getAll(1); |
|
|
$this->assertCount(1, $files); |
|
|
|
|
|
$this->assertEquals(1, $files[0]['id']); |
|
|
$this->assertStringStartsWith('Screenshot taken ', $files[0]['name']); |
|
|
$this->assertEquals(1, $files[0]['is_image']); |
|
|
$this->assertEquals(1, $files[0]['task_id']); |
|
|
$this->assertEquals(0, $files[0]['user_id']); |
|
|
$this->assertEquals(4, $files[0]['size']); |
|
|
} |
|
|
|
|
|
public function testRemove() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10)); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('remove') |
|
|
->with('tmp/foo'); |
|
|
|
|
|
$this->assertTrue($fileModel->remove(1)); |
|
|
} |
|
|
|
|
|
public function testRemoveWithObjectStorageError() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10)); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->once()) |
|
|
->method('remove') |
|
|
->with('tmp/foo') |
|
|
->will($this->throwException(new \Kanboard\Core\ObjectStorage\ObjectStorageException('test'))); |
|
|
|
|
|
$this->assertFalse($fileModel->remove(1)); |
|
|
} |
|
|
|
|
|
public function testRemoveImage() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'image.gif', 'tmp/image.gif', 10)); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->exactly(2)) |
|
|
->method('remove') |
|
|
->withConsecutive( |
|
|
['tmp/image.gif'], |
|
|
['thumbnails'.DIRECTORY_SEPARATOR.'tmp/image.gif'], |
|
|
); |
|
|
|
|
|
$this->assertTrue($fileModel->remove(1)); |
|
|
} |
|
|
|
|
|
public function testRemoveAll() |
|
|
{ |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', 'tmp/foo', 10)); |
|
|
$this->assertEquals(2, $fileModel->create(1, 'test', 'tmp/foo', 10)); |
|
|
|
|
|
$this->container['objectStorage'] |
|
|
->expects($this->exactly(1)) |
|
|
->method('remove') |
|
|
->with('tmp/foo'); |
|
|
|
|
|
$this->assertTrue($fileModel->removeAll(1)); |
|
|
} |
|
|
|
|
|
public function testGetProjectId() |
|
|
{ |
|
|
$projectModel = new ProjectModel($this->container); |
|
|
$fileModel = new TaskFileModel($this->container); |
|
|
$taskCreationModel = new TaskCreationModel($this->container); |
|
|
|
|
|
$this->assertEquals(1, $projectModel->create(array('name' => 'test'))); |
|
|
$this->assertEquals(1, $taskCreationModel->create(array('project_id' => 1, 'title' => 'test'))); |
|
|
$this->assertEquals(1, $fileModel->create(1, 'test', '/tmp/foobar', 10)); |
|
|
$this->assertEquals(1, $fileModel->getProjectId(1)); |
|
|
$this->assertEquals(0, $fileModel->getProjectId(2)); |
|
|
} |
|
|
} |
|
|
|