diff --git a/public/main/inc/lib/document.lib.php b/public/main/inc/lib/document.lib.php index 90e03e2b71..fb8c6e9d34 100644 --- a/public/main/inc/lib/document.lib.php +++ b/public/main/inc/lib/document.lib.php @@ -3421,20 +3421,13 @@ This folder contains all sessions that have been opened in the chat. Although th return $document; } -// $criteria = ['path' => $path, 'course' => $courseEntity]; -// $document = $documentRepo->findOneBy($criteria); -// -// // Document already exists -// if ($document) { -// return false; -// } - // is updated using the title $document = (new CDocument()) ->setFiletype($fileType) ->setTitle($title) ->setComment($comment) ->setReadonly(1 === $readonly) + ->setCreator(api_get_user_entity()) ->setParent($parentResource) ->addCourseLink($courseEntity, $session, $group) ; diff --git a/tests/ChamiloTestTrait.php b/tests/ChamiloTestTrait.php index e3d89f9b6e..9766290b19 100644 --- a/tests/ChamiloTestTrait.php +++ b/tests/ChamiloTestTrait.php @@ -134,6 +134,17 @@ trait ChamiloTestTrait $this->assertEquals(0, $errors->count(), implode(', ', $message)); } + public function getUploadedFileArray(): array + { + return [ + 'tmp_name' => $this->getUploadedFile()->getRealPath(), + 'name' => $this->getUploadedFile()->getFilename(), + 'type' => $this->getUploadedFile()->getMimeType(), + 'size' => $this->getUploadedFile()->getSize(), + 'error' => UPLOAD_ERR_OK, + ]; + } + public function getUploadedFile(): UploadedFile { $path = $this->getContainer()->get('kernel')->getProjectDir(); diff --git a/tests/CoreBundle/Repository/AssetRepositoryTest.php b/tests/CoreBundle/Repository/AssetRepositoryTest.php index 18df90eca0..7ae92e1c66 100644 --- a/tests/CoreBundle/Repository/AssetRepositoryTest.php +++ b/tests/CoreBundle/Repository/AssetRepositoryTest.php @@ -85,14 +85,7 @@ class AssetRepositoryTest extends AbstractApiTest ->setCategory(Asset::WATERMARK) ; - $file = [ - 'tmp_name' => $this->getUploadedFile()->getRealPath(), - 'name' => $this->getUploadedFile()->getFilename(), - 'type' => $this->getUploadedFile()->getMimeType(), - 'size' => $this->getUploadedFile()->getSize(), - 'error' => UPLOAD_ERR_OK, - ]; - + $file = $this->getUploadedFileArray(); $assetRepo->createFromRequest($asset, $file); $this->assertHasNoEntityViolations($asset); } diff --git a/tests/CourseBundle/Repository/CDocumentRepositoryTest.php b/tests/CourseBundle/Repository/CDocumentRepositoryTest.php index 522610da1a..627048a7db 100644 --- a/tests/CourseBundle/Repository/CDocumentRepositoryTest.php +++ b/tests/CourseBundle/Repository/CDocumentRepositoryTest.php @@ -16,6 +16,7 @@ use Chamilo\CourseBundle\Entity\CGroup; use Chamilo\CourseBundle\Repository\CDocumentRepository; use Chamilo\Tests\AbstractApiTest; use Chamilo\Tests\ChamiloTestTrait; +use Symfony\Component\HttpFoundation\Request; class CDocumentRepositoryTest extends AbstractApiTest { @@ -392,7 +393,101 @@ class CDocumentRepositoryTest extends AbstractApiTest $this->assertSame(0, \count($docs)); } - public function testCreateNodeForResource(): void + public function testAddFileFromString(): void + { + self::bootKernel(); + + $course = $this->createCourse('Test'); + $documentRepo = self::getContainer()->get(CDocumentRepository::class); + $admin = $this->getUser('admin'); + + $document = (new CDocument()) + ->setFiletype('file') + ->setTitle('title 123') + ->setParent($course) + ->setCreator($admin) + ->addCourseLink($course) + ; + + $documentRepo->create($document); + + $this->assertInstanceOf(ResourceNode::class, $document->getResourceNode()); + $this->assertNull($documentRepo->getParent($document)); + $this->assertFalse($document->hasUploadFile()); + $this->assertSame(1, $documentRepo->count([])); + + $documentRepo->addFileFromString($document, 'test', 'text/html', 'my file', true); + + /** @var CDocument $document */ + $document = $documentRepo->find($document->getIid()); + $this->assertTrue($document->getResourceNode()->hasResourceFile()); + } + + public function testAddFileFromPath(): void + { + self::bootKernel(); + + $course = $this->createCourse('Test'); + $documentRepo = self::getContainer()->get(CDocumentRepository::class); + $admin = $this->getUser('admin'); + + $document = (new CDocument()) + ->setFiletype('file') + ->setTitle('title 123') + ->setParent($course) + ->setCreator($admin) + ->addCourseLink($course) + ; + + $documentRepo->create($document); + + $this->assertSame(1, $documentRepo->count([])); + + $path = $this->getUploadedFile()->getRealPath(); + $resourceFile = $documentRepo->addFileFromPath($document, 'logo.png', $path, true); + + $this->assertNotNull($resourceFile); + + /** @var CDocument $document */ + $document = $documentRepo->find($document->getIid()); + $this->assertTrue($document->getResourceNode()->hasResourceFile()); + } + + public function testAddFileFromFileRequest(): void + { + self::bootKernel(); + + $course = $this->createCourse('Test'); + $documentRepo = self::getContainer()->get(CDocumentRepository::class); + $admin = $this->getUser('admin'); + + $document = (new CDocument()) + ->setFiletype('file') + ->setTitle('title 123') + ->setParent($course) + ->setCreator($admin) + ->addCourseLink($course) + ; + + $documentRepo->create($document); + + $this->assertSame(1, $documentRepo->count([])); + + $file = $this->getUploadedFileArray(); + + $request = new Request([], [], [], [], ['upload_file' => $file]); + $this->getContainer()->get('request_stack')->push($request); + + $resourceFile = $documentRepo->addFileFromFileRequest($document, 'upload_file'); + + $this->assertNotNull($resourceFile); + + /** @var CDocument $document */ + $document = $documentRepo->find($document->getIid()); + $this->assertTrue($document->getResourceNode()->hasResourceFile()); + } + + public function testCreateWithAddResourceNode(): void { self::bootKernel(); @@ -411,8 +506,11 @@ class CDocumentRepositoryTest extends AbstractApiTest $this->assertInstanceOf(ResourceNode::class, $document->getResourceNode()); $this->assertSame('title 123', (string) $document); - $this->assertNull($documentRepo->getParent($document)); + + $documentRepo->hardDelete($document); + + $this->assertSame(0, $documentRepo->count([])); } public function testCreateDocumentWithLinks(): void