From 7079c78e140091e281ffc9604c9735b4b5441e2f Mon Sep 17 00:00:00 2001
From: Marko Budiselic <mbudiselicbuda@gmail.com>
Date: Sun, 3 Jan 2016 22:42:55 +0100
Subject: [PATCH] vertex crud test update

---
 test/unit/http_api/vertex_crud_test.py | 83 ++++++++++++++++++++++----
 1 file changed, 72 insertions(+), 11 deletions(-)

diff --git a/test/unit/http_api/vertex_crud_test.py b/test/unit/http_api/vertex_crud_test.py
index 4993c1bbf..81e7ea13c 100644
--- a/test/unit/http_api/vertex_crud_test.py
+++ b/test/unit/http_api/vertex_crud_test.py
@@ -6,21 +6,82 @@ import requests
 
 class VertexCrudTest(unittest.TestCase):
 
-    def test_crud(self):
+    def check_reponse_status_code(self, r, code):
         '''
-        create -> read -> update -> read -> delete -> read
+        Checks status code of the response and returns
+        response data as json.
+
+        Returns:
+            response data (json)
         '''
-        endpoint = 'http://localhost:7474/db/data/node'
-        payload = { "foo1": "bar1", "foo2": "bar2" }
-        r = requests.post(endpoint, json = payload)
-        self.assertEqual(r.status_code, 201)
+        self.assertEqual(r.status_code, code)
         response = r.json()
+        return response
+
+    def check_metadata_and_id(self, response, id=None):
+        '''
+        Checks reponse id and return it.
+        '''
         self.assertIn("metadata", response)
         metadata = response["metadata"]
         self.assertIn("id", metadata)
-        identifier = metadata["id"]
+        response_id = metadata["id"]
+        if id is not None:
+            self.assertEqual(id, response_id)
+        return response_id
+
+    def check_response_data(self, response, data):
+        '''
+        Takes data from response json and compare them to the data
+        argument.
+        '''
         self.assertIn("data", response)
-        data = response["data"]
-        self.assertDictEqual(payload, data)
-        
-        # TODO: read -> update -> read -> delete -> read
+        response_data = response["data"]
+        self.assertDictEqual(response_data, data)
+        return response_data
+
+    def check_read(self, resource_id, valid_data):
+        '''
+        Check a whole get request.
+        '''
+        resource_url = self.endpoint + '/%s' % resource_id
+        r = requests.get(resource_url)
+        response = self.check_reponse_status_code(r, 200)
+        self.check_metadata_and_id(response, resource_id)
+        self.check_response_data(response, valid_data)
+
+    def test_crud(self):
+        '''
+        CRUD test:
+            create -> read -> update -> read -> delete -> read
+        '''
+        self.endpoint = 'http://localhost:7474/db/data/node'
+
+        create_payload = {"foo1": "bar1", "foo2": "bar2"}
+        edit_payload = {"foo2": "bar22", "foo3": "bar3"}
+        edited_resource = {"foo1": "bar1", "foo2": "bar22", "foo3": "bar3"}
+
+        # 1. create
+        r = requests.post(self.endpoint, json=create_payload)
+        response = self.check_reponse_status_code(r, 201)
+        self.resource_id = self.check_metadata_and_id(response)
+        self.resource_url = self.endpoint + "/%s" % self.resource_id
+        self.check_response_data(response, create_payload)
+
+        # 2. read
+        self.check_read(self.resource_id, create_payload)
+
+        # 3. update
+        r = requests.put(self.resource_url, edit_payload)
+        self.check_reponse_status_code(r, 200)
+
+        # 4. read
+        self.check_read(self.resource_id, edited_resource)
+
+        # 5. delete
+        r = requests.delete(self.resource_url)
+        self.check_response_status_code(r, 200)
+
+        # 6. read
+        r = requests.get(self.resource_url)
+        self.check_response_status_code(r, 404)