]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
Merge pull request #4161 from aaa2000/bug-empty-quote
authorJérémy Benoist <j0k3r@users.noreply.github.com>
Thu, 5 Dec 2019 00:09:49 +0000 (16:09 -0800)
committerGitHub <noreply@github.com>
Thu, 5 Dec 2019 00:09:49 +0000 (16:09 -0800)
API return an error with empty quote

src/Wallabag/AnnotationBundle/Form/NewAnnotationType.php
src/Wallabag/ApiBundle/Controller/AnnotationRestController.php
tests/Wallabag/AnnotationBundle/Controller/AnnotationControllerTest.php

index c73c3ded9041f4eaa5964fa570b57e17f8c9890c..48bc2c59d1085f24a4182a1e0d3d0b399a6ecc28 100644 (file)
@@ -17,7 +17,8 @@ class NewAnnotationType extends AbstractType
                 'empty_data' => '',
             ])
             ->add('quote', null, [
-                'empty_data' => null,
+                'empty_data' => '',
+                'trim' => false,
             ])
             ->add('ranges', CollectionType::class, [
                 'entry_type' => RangeType::class,
index f59431e470bbff03d5e31710aca8f75ecfe472a2..66693189ace14771445b2d42999372d34687838d 100644 (file)
@@ -37,8 +37,8 @@ class AnnotationRestController extends WallabagRestController
      * @ApiDoc(
      *      requirements={
      *          {"name"="ranges", "dataType"="array", "requirement"="\w+", "description"="The range array for the annotation"},
-     *          {"name"="quote", "dataType"="string", "required"=false, "description"="Optional, quote for the annotation"},
-     *          {"name"="text", "dataType"="string", "required"=true, "description"=""},
+     *          {"name"="quote", "dataType"="string", "description"="The annotated text"},
+     *          {"name"="text", "dataType"="string", "required"=true, "description"="Content of annotation"},
      *      }
      * )
      *
index 2c46e0a1deff5f7c1b870af3a76a792674d684c8..260edd770ffc6dd13882862f910598ed0f2726d0 100644 (file)
@@ -107,6 +107,63 @@ class AnnotationControllerTest extends WallabagAnnotationTestCase
         $this->assertSame('my annotation', $annotation->getText());
     }
 
+    public function testAllowEmptyQuote()
+    {
+        $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
+
+        /** @var Entry $entry */
+        $entry = $em
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->findOneByUsernameAndNotArchived('admin');
+
+        $headers = ['CONTENT_TYPE' => 'application/json'];
+        $content = json_encode([
+            'text' => 'my annotation',
+            'quote' => null,
+            'ranges' => [
+                ['start' => '', 'startOffset' => 24, 'end' => '', 'endOffset' => 31],
+            ],
+        ]);
+        $this->client->request('POST', '/api/annotations/' . $entry->getId() . '.json', [], [], $headers, $content);
+
+        $this->assertSame(200, $this->client->getResponse()->getStatusCode());
+
+        $content = json_decode($this->client->getResponse()->getContent(), true);
+
+        $this->assertSame('Big boss', $content['user']);
+        $this->assertSame('v1.0', $content['annotator_schema_version']);
+        $this->assertSame('my annotation', $content['text']);
+        $this->assertSame('', $content['quote']);
+    }
+
+    public function testAllowOmmittedQuote()
+    {
+        $em = $this->client->getContainer()->get('doctrine.orm.entity_manager');
+
+        /** @var Entry $entry */
+        $entry = $em
+            ->getRepository('WallabagCoreBundle:Entry')
+            ->findOneByUsernameAndNotArchived('admin');
+
+        $headers = ['CONTENT_TYPE' => 'application/json'];
+        $content = json_encode([
+            'text' => 'my new annotation',
+            'ranges' => [
+                ['start' => '', 'startOffset' => 25, 'end' => '', 'endOffset' => 32],
+            ],
+        ]);
+        $this->client->request('POST', '/api/annotations/' . $entry->getId() . '.json', [], [], $headers, $content);
+
+        $this->assertSame(200, $this->client->getResponse()->getStatusCode());
+
+        $content = json_decode($this->client->getResponse()->getContent(), true);
+
+        $this->assertSame('Big boss', $content['user']);
+        $this->assertSame('v1.0', $content['annotator_schema_version']);
+        $this->assertSame('my new annotation', $content['text']);
+        $this->assertSame('', $content['quote']);
+    }
+
     /**
      * @dataProvider dataForEachAnnotations
      */