getUserToken([]); $response = $this->createClientWithCredentials($token)->request('GET', '/api/documents'); $this->assertResponseIsSuccessful(); // Asserts that the returned content type is JSON-LD (the default) $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); // Asserts that the returned JSON is a superset of this one $this->assertJsonContains([ '@context' => '/api/contexts/Documents', '@id' => '/api/documents', '@type' => 'hydra:Collection', 'hydra:totalItems' => 0, ]); $this->assertCount(0, $response->toArray()['hydra:member']); $this->assertMatchesResourceCollectionJsonSchema(CDocument::class); } public function testCreateFolder(): void { $course = $this->createCourse('Test'); // Create folder. $resourceLinkList = [ 'cid' => $course->getId(), 'visibility' => 2, ]; $folderName = 'folder1'; $token = $this->getUserToken([]); $this->createClientWithCredentials($token)->request( 'POST', '/api/documents', [ 'json' => [ 'title' => $folderName, 'filetype' => 'folder', 'parentResourceNodeId' => $course->getResourceNode()->getId(), 'resourceLinkList' => json_encode($resourceLinkList), ], ] ); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(201); $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); $this->assertJsonContains([ '@context' => '/api/contexts/Documents', '@type' => 'Documents', 'title' => $folderName, ]); } public function testUploadFile(): void { $course = $this->createCourse('Test'); $resourceLinkList = [ 'cid' => $course->getId(), 'visibility' => 2, ]; $file = $this->getUploadedFile(); $token = $this->getUserToken([]); $this->createClientWithCredentials($token)->request( 'POST', '/api/documents', [ 'headers' => [ 'Content-Type' => 'multipart/form-data', ], 'extra' => [ 'files' => [ 'uploadFile' => $file, ], ], 'json' => [ 'filetype' => 'file', 'size' => $file->getSize(), 'parentResourceNodeId' => $course->getResourceNode()->getId(), 'resourceLinkList' => json_encode($resourceLinkList), ], ] ); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(201); $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); $this->assertJsonContains([ '@context' => '/api/contexts/Documents', '@type' => 'Documents', 'title' => $file->getFilename(), 'filetype' => 'file', ]); } public function testUploadFileInSideASubFolder(): void { $course = $this->createCourse('Test'); // Create folder. $resourceLinkList = [ 'cid' => $course->getId(), 'visibility' => 2, ]; $token = $this->getUserToken([]); // Creates a folder. $folderName = 'myfolder'; $response = $this->createClientWithCredentials($token)->request( 'POST', '/api/documents', [ 'json' => [ 'title' => $folderName, 'filetype' => 'folder', 'parentResourceNodeId' => $course->getResourceNode()->getId(), 'resourceLinkList' => json_encode($resourceLinkList), ], ] ); $this->assertResponseIsSuccessful(); $data = json_decode($response->getContent()); $resourceNodeId = $data->resourceNode->id; $file = $this->getUploadedFile(); $token = $this->getUserToken([]); $this->createClientWithCredentials($token)->request( 'POST', '/api/documents', [ 'headers' => [ 'Content-Type' => 'multipart/form-data', ], 'extra' => [ 'files' => [ 'uploadFile' => $file, ], ], 'json' => [ 'filetype' => 'file', 'size' => $file->getSize(), 'parentResourceNodeId' => $resourceNodeId, 'resourceLinkList' => json_encode($resourceLinkList), ], ] ); $this->assertResponseIsSuccessful(); $this->assertResponseStatusCodeSame(201); $this->assertResponseHeaderSame('content-type', 'application/ld+json; charset=utf-8'); $this->assertJsonContains([ '@context' => '/api/contexts/Documents', '@type' => 'Documents', 'title' => $file->getFilename(), 'filetype' => 'file', ]); $this->assertMatchesRegularExpression('~'.$folderName.'~', $response->toArray()['resourceNode']['path']); } }