commit 06548535750d8c6c33693b355bbd1e19ac37d36d
parent 2027845663d26fcc7db2b3a0397c56d9dd60743b
Author: Felicitus <felicitus@felicitus.org>
Date: Sun, 13 Sep 2015 13:26:16 +0200
Refactored upload for new DunglasApiBundle version, added unit test for uploading
Diffstat:
4 files changed, 96 insertions(+), 9 deletions(-)
diff --git a/src/PartKeepr/ImageBundle/Response/TemporaryImageUploadResponse.php b/src/PartKeepr/ImageBundle/Response/TemporaryImageUploadResponse.php
@@ -1,9 +1,6 @@
<?php
namespace PartKeepr\ImageBundle\Response;
-
-use PartKeepr\ImageBundle\Entity\TempImage;
-
class TemporaryImageUploadResponse
{
/**
diff --git a/src/PartKeepr/UploadedFileBundle/Controller/FileController.php b/src/PartKeepr/UploadedFileBundle/Controller/FileController.php
@@ -2,11 +2,11 @@
namespace PartKeepr\UploadedFileBundle\Controller;
use Doctrine\ORM\EntityManager;
-use Nelmio\ApiDocBundle\Tests\Fixtures\Controller\ResourceController;
use PartKeepr\UploadedFileBundle\Entity\UploadedFile;
+use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
-abstract class FileController extends ResourceController
+abstract class FileController extends Controller
{
/**
* Returns the full path for the file
diff --git a/src/PartKeepr/UploadedFileBundle/Controller/TemporaryFileController.php b/src/PartKeepr/UploadedFileBundle/Controller/TemporaryFileController.php
@@ -1,6 +1,8 @@
<?php
namespace PartKeepr\UploadedFileBundle\Controller;
+use Dunglas\ApiBundle\Action\ActionUtilTrait;
+use Dunglas\ApiBundle\Api\ResourceInterface;
use FOS\RestBundle\Controller\Annotations\RequestParam;
use FOS\RestBundle\Controller\Annotations\View;
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
@@ -14,10 +16,12 @@ use Symfony\Component\HttpFoundation\Response;
class TemporaryFileController extends FileController
{
+ use ActionUtilTrait;
+
/**
* Handles a temporary file upload
*
- * @RequestParam(name="url",description="An URL where the file is located")
+ * @RequestParam(name="url",description="An URL where the file is located",strict=false)
* @ApiDoc(section="file",output="PartKeepr\UploadedFileBundleBundle\Response\TemporaryFileUploadResponse")
* @View()
*
@@ -47,11 +51,15 @@ class TemporaryFileController extends FileController
$this->getDoctrine()->getManager()->persist($uploadedFile);
$this->getDoctrine()->getManager()->flush();
- $resource = $this->getResource($request);
+ /**
+ * @var ResourceInterface $resourceType
+ */
+ list($resourceType) = $this->extractAttributes($request);
+
$serializedData = $this->get('serializer')->normalize(
$uploadedFile,
- 'json-ld',
- $resource->getNormalizationContext()
+ 'jsonld',
+ $resourceType->getNormalizationContext()
);
return new JsonResponse(new TemporaryImageUploadResponse($serializedData));
diff --git a/src/PartKeepr/UploadedFileBundle/Tests/UploadTest.php b/src/PartKeepr/UploadedFileBundle/Tests/UploadTest.php
@@ -0,0 +1,81 @@
+<?php
+namespace PartKeepr\UploadedFileBundle\Tests;
+
+
+use Liip\FunctionalTestBundle\Test\WebTestCase;
+use Symfony\Component\HttpFoundation\File\UploadedFile;
+
+class UploadTest extends WebTestCase
+{
+ public function testUploadAction()
+ {
+ $client = static::createClient();
+
+ $file = __DIR__."/Fixtures/files/uploadtest.png";
+ $originalFilename = 'uploadtest.png';
+ $mimeType = "image/png";
+ $extension = "png";
+
+ $image = new UploadedFile(
+ $file,
+ $originalFilename,
+ $mimeType,
+ filesize($file)
+ );
+
+ $client->request(
+ 'POST',
+ '/api/temp_uploaded_files/upload',
+ array(),
+ array('userfile' => $image)
+ );
+
+ $response = json_decode($client->getResponse()->getContent());
+
+ $this->assertObjectHasAttribute("success", $response);
+ $this->assertObjectHasAttribute("image", $response);
+ $this->assertObjectHasAttribute("response", $response);
+
+ $this->assertEquals(true, $response->success);
+
+ $propertiesToCheck = array(
+ "@context",
+ "@id",
+ "@type",
+ "originalFilename",
+ "size",
+ "type",
+ "filename",
+ "mimeType",
+ "extension",
+ "description",
+ "legacyExtension",
+ );
+
+ foreach ($propertiesToCheck as $property) {
+ $this->assertObjectHasAttribute($property, $response->image);
+ $this->assertObjectHasAttribute($property, $response->response);
+ }
+
+ $this->assertEquals(filesize($file), $response->image->size);
+ $this->assertEquals(filesize($file), $response->response->size);
+
+ $this->assertEquals($originalFilename, $response->image->originalFilename);
+ $this->assertEquals($originalFilename, $response->response->originalFilename);
+
+ $this->assertEquals($mimeType, $response->image->mimeType);
+ $this->assertEquals($mimeType, $response->response->mimeType);
+
+ $this->assertEquals($extension, $response->image->extension);
+ $this->assertEquals($extension, $response->response->extension);
+
+ $this->assertEquals("tempfile", $response->image->type);
+ $this->assertEquals("tempfile", $response->response->type);
+
+ $property = "@type";
+
+ $this->assertEquals("TempUploadedFile", $response->image->$property);
+ $this->assertEquals("TempUploadedFile", $response->response->$property);
+
+ }
+}+
\ No newline at end of file