added test for editing annotation via API
authordurandn
Thu, 03 Sep 2015 12:29:51 +0200
changeset 1422 337fb3ff4e18
parent 1421 dc3c9a705d6d
child 1423 09d4840f213e
added test for editing annotation via API
src/ldt/ldt/api/ldt/tests/tests_annotation.py
src/ldt/ldt/fixtures/tests/api/projects_project.json
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/ldt/tests/tests_annotation.py	Thu Sep 03 12:29:51 2015 +0200
@@ -0,0 +1,96 @@
+import logging
+
+from tastypie.test import ResourceTestCase, TestApiClient
+from ldt.api.ldt.serializers.cinelabserializer import CinelabSerializer
+from django.core.urlresolvers import reverse
+from ldt.ldt_utils.models import Segment
+import json
+
+
+logger = logging.getLogger(__name__)
+
+class AnnotationTest(ResourceTestCase):
+
+    fixtures = ['tests/api/projects_user.json', 'tests/api/projects_project.json']
+
+    def get_credentials(self):
+        result = self.api_client.client.login(username='admin',password='admin')
+        return result
+    
+    
+    def setUp(self):
+        self.api_client = TestApiClient(CinelabSerializer())
+        self.get_credentials()
+        self.test_annotation_json = json.dumps({
+            "media": "b3c22994-2eca-11e5-bd56-58b035f6b93d",
+            "project": "c0bc66fa-2eca-11e5-a518-58b035f6b93d",
+            "begin": 0,
+            "end": 0,
+            "type_title": "ann_type_test",
+            "content": {
+                "title": "ann_title_test",
+                "description": "ann_description_test"
+            },
+            "meta": {
+                "creator": "admin",
+                "created": "2015-07-20T10:33:46.282Z"
+            },
+            "tags": [],
+        })
+        self.test_edition_prep_data_dict = {
+            "media": "b3c22994-2eca-11e5-bd56-58b035f6b93d",
+            "project": "c0bc66fa-2eca-11e5-a518-58b035f6b93d",
+            "begin": 2,
+            "end": 3,
+            "content": {
+                "title": "ann_title_test_edited",
+                "description": "ann_description_test_edited"
+            },
+            "meta": {
+                "creator": "admin",
+                "created": "2015-07-20T10:33:46.282Z"
+            },
+            "tags": ["added_tag"],
+        }
+
+    def testPost(self):
+        resp = self.api_client.client.post(reverse('api_dispatch_list', kwargs={'api_name':'1.0', 'resource_name':'annotations'}), content_type='application/json', data=self.test_annotation_json)
+        self.assertHttpCreated(resp)
+        created_ann_data = json.loads(resp.content)
+        annotation = Segment.objects.get(project_id=created_ann_data["project"], iri_id=created_ann_data["media"], cutting_id=created_ann_data["type"], element_id=created_ann_data["id"])
+        
+        self.assertRegexpMatches(annotation.element_id, "s_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}", "should match a guid prefixed with s_")
+        self.assertEqual("ann_title_test", annotation.title)
+        self.assertEqual("ann_description_test", annotation.abstract)
+        self.assertEqual(0, annotation.start_ts)
+        self.assertEqual(0, annotation.duration)
+        self.assertEqual("admin", annotation.author)
+        self.assertEqual("2015-07-20T10:33:46.282Z", annotation.date)
+        self.assertEqual("", annotation.get_tags())
+        
+    def testPut(self):
+        post_resp = self.api_client.client.post(reverse('api_dispatch_list', kwargs={'api_name':'1.0', 'resource_name':'annotations'}), content_type='application/json', data=self.test_annotation_json)
+        
+        ann_id = json.loads(post_resp.content)["id"]
+        type_id = json.loads(post_resp.content)["type"]
+        editing_data = self.test_edition_prep_data_dict
+        editing_data["id"] = ann_id
+        editing_data["type"] = type_id
+        
+        put_resp = self.api_client.client.put(reverse('api_dispatch_detail', kwargs={'api_name':'1.0', 'resource_name':'annotations', 'pk': ann_id}), content_type='application/json', data=json.dumps(editing_data))
+        edited_ann_data = json.loads(put_resp.content)
+        edited_annotation = Segment.objects.get(project_id=edited_ann_data["project"], iri_id=edited_ann_data["media"], cutting_id=edited_ann_data["type"], element_id=edited_ann_data["id"])
+        
+        self.assertEqual(ann_id, edited_annotation.element_id)
+        self.assertEqual(type_id, edited_annotation.cutting_id)
+        self.assertEqual("ann_title_test_edited", edited_annotation.title)
+        self.assertEqual("ann_description_test_edited", edited_annotation.abstract)
+        self.assertEqual(2, edited_annotation.start_ts)
+        self.assertEqual(1, edited_annotation.duration) # begin 2, end 3, duration is 1
+        self.assertEqual("admin", edited_annotation.author)
+        self.assertEqual("2015-07-20T10:33:46.282Z", edited_annotation.date)
+        self.assertEqual("added_tag", edited_annotation.get_tags())
+        
+        
+    def tearDown(self):
+        pass
\ No newline at end of file
--- a/src/ldt/ldt/fixtures/tests/api/projects_project.json	Tue Sep 01 18:28:23 2015 +0200
+++ b/src/ldt/ldt/fixtures/tests/api/projects_project.json	Thu Sep 03 12:29:51 2015 +0200
@@ -40,6 +40,14 @@
 },
 {
   "fields": {
+  	"content": 1,
+  	"nb_annotations": 0
+  },
+  "model": "ldt_utils.contentstat",
+  "pk": 1
+},
+{
+  "fields": {
     "ldt_id": "c0bc66fa-2eca-11e5-a518-58b035f6b93d",
     "description": "",
     "modification_date": "2015-07-20T10:33:25.885Z",