예제 #1
0
    def setUp(self, get_session_mock, socket_client_mock):
        """Setting up Agent object
        :param get_session_mock: MagicMock object for patching session.get
                                 it's used to Mock Hydrus response to ApiDoc
        """
        # Mocking get for ApiDoc to Server, so hydrus doesn't need to be up
        get_session_mock.return_value.json.return_value = drone_doc
        socket_client_mock.return_value = None

        self.agent = Agent("http://localhost:8080/api")
        self.redis_proxy = RedisProxy()
        self.redis_connection = self.redis_proxy.get_connection()
        self.redis_graph = Graph("apigraph", self.redis_connection)
예제 #2
0
def start_agent():
    """Receive hydrus server URL and start the Agent
    :param body['url']: Entrypoint URL for the hydrus server
    :return: Success message
    """
    global agent
    global url
    body = request.get_data()
    body = body.decode('utf8').replace("'", '"')
    body = json.loads(body)
    url = body['url']
    agent = Agent(url)
    return "Server started successfully"
예제 #3
0
from flask import Flask, request, send_from_directory
from flask_cors import CORS
from hydra_agent.agent import Agent
import sys
import json
import os
from requests import get

app = Flask(__name__, static_folder='console-frontend/build/')

# Setting CORS so it allows requests from our React app in localhost:3000
CORS(app, resources={r"*": {"origins": "http://*****:*****@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def serve(path):
    """Default endpoint, it serves the built static React App
    :return: Served file
    """
    file_path = os.path.join(app.static_folder, path)
    if path != "" and os.path.exists(file_path):
        return send_from_directory(app.static_folder, path)
    else:
        return send_from_directory(app.static_folder, 'index.html')

예제 #4
0
class TestAgent(unittest.TestCase):
    """
    TestCase for Agent Class
    """
    @patch('hydra_agent.agent.socketio.Client.connect')
    @patch('hydra_agent.agent.Session.get')
    def setUp(self, get_session_mock, socket_client_mock):
        """Setting up Agent object
        :param get_session_mock: MagicMock object for patching session.get
                                 it's used to Mock Hydrus response to ApiDoc
        """
        # Mocking get for ApiDoc to Server, so hydrus doesn't need to be up
        get_session_mock.return_value.json.return_value = drone_doc
        socket_client_mock.return_value = None

        self.agent = Agent("http://*****:*****@patch('hydra_agent.agent.Session.get')
    def test_get_url(self, get_session_mock):
        """Tests get method from the Agent with URL
        :param get_session_mock: MagicMock object for patching session.get
        """
        state_object = {
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2",
            "@context": "/api/contexts/StateCollection.jsonld"
        }

        get_session_mock.return_value.status_code = 200
        get_session_mock.return_value.json.return_value = state_object
        response = self.agent.get("http://*****:*****@patch('hydra_agent.agent.Session.get')
    def test_get_class_properties(self, get_session_mock):
        """Tests get method from the Agent by class name and properties
        :param get_session_mock: MagicMock object for patching session.get
        """
        state_object = {
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "North",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2",
            "@context": "/api/contexts/StateCollection.jsonld"
        }

        get_session_mock.return_value.status_code = 200
        get_session_mock.return_value.json.return_value = state_object
        response_url = self.agent.get("http://*****:*****@patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_get_collection(self, put_session_mock, embedded_get_mock):
        """Tests get method from the Agent when fetching collections
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        collection_url = "http://*****:*****@context": "/api/contexts/StateCollection.jsonld",
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }

        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.return_value.json.return_value = state_object

        response, new_object_url = self.agent.put(collection_url, new_object)

        simplified_collection = \
            {
                "@context": "/api/contexts/DroneCollection.jsonld",
                "@id": "/api/DroneCollection/",
                "@type": "DroneCollection",
                "members": [
                    {
                        "@id": "/api/DroneCollection/1",
                        "@type": "Drone"
                    }
                ],
            }

        embedded_get_mock.return_value.json.return_value = \
            simplified_collection
        get_collection_url = self.agent.get(collection_url)
        get_collection_resource_type = self.agent.get(resource_type="Drone")
        self.assertEqual(type(get_collection_url), list)
        self.assertEqual(type(get_collection_resource_type), list)
        self.assertEqual(get_collection_resource_type, get_collection_url)

        get_collection_cached = self.agent.get(resource_type="Drone",
                                               cached_limit=1)

        self.assertEqual(get_collection_cached[0]["@id"],
                         get_collection_url[0]["@id"])

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_put(self, put_session_mock, embedded_get_mock):
        """Tests put method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        collection_url = "http://*****:*****@context": "/api/contexts/StateCollection.jsonld",
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }

        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.return_value.json.return_value = state_object

        response, new_object_url = self.agent.put(collection_url, new_object)

        # Assert if object was inserted queried and inserted successfully
        get_new_object_url = self.agent.get(new_object_url)
        self.assertEqual(get_new_object_url, new_object)

        get_new_object_type = self.agent.get(resource_type="Drone",
                                             filters={'name': "Smart Drone"},
                                             cached_limit=1)
        self.assertEqual(get_new_object_url, get_new_object_type[0])

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.post')
    @patch('hydra_agent.agent.Session.put')
    def test_post(self, put_session_mock, post_session_mock,
                  embedded_get_mock):
        """Tests post method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param post_session_mock: MagicMock object for patching session.post
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        collection_url = "http://*****:*****@context": "/api/contexts/StateCollection.jsonld",
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }
        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.return_value.json.return_value = state_object

        response = self.agent.post(new_object_url, new_object)

        # Assert if object was updated successfully as intended
        get_new_object = self.agent.get(new_object_url)
        self.assertEqual(get_new_object, new_object)

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.delete')
    @patch('hydra_agent.agent.Session.put')
    def test_delete(self, put_session_mock, delete_session_mock,
                    get_session_mock):
        """Tests post method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param delete_session_mock: MagicMock object to patch session.delete
        :param get_session_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "/api/StateCollection/1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        collection_url = "http://*****:*****@patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_edges(self, put_session_mock, embedded_get_mock):
        """Tests to check if all edges are being created properly
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        collection_url = "http://*****:*****@context": "/api/contexts/StateCollection.jsonld",
            "@id": "/api/StateCollection/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }

        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.return_value.json.return_value = state_object

        response, new_object_url = self.agent.put(collection_url, new_object)

        # Checking if Drone Collection has an edge to the Drone Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'DroneCollection' \
            RETURN type(r)"

        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[0][0], 'has_Drone')

        # Checking if State Collection has an edge to the State Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'StateCollection' \
            RETURN type(r)"

        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[0][0], 'has_State')

        # Checking if Drone Resource has an edge to the State Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'Drone' RETURN type(r)"
        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[0][0], 'has_State')
예제 #5
0
class TestAgent(unittest.TestCase):
    """
    TestCase for Agent Class
    """
    @patch('hydra_agent.agent.socketio.Client.connect')
    @patch('hydra_agent.agent.Session.get')
    def setUp(self, get_session_mock, socket_client_mock):
        """Setting up Agent object
        :param get_session_mock: MagicMock object for patching session.get
                                 it's used to Mock Hydrus response to ApiDoc
        """
        # Mocking get for ApiDoc to Server, so hydrus doesn't need to be up
        get_session_mock.return_value.json.return_value = drone_doc
        socket_client_mock.return_value = None
        try:
            self.agent = Agent("http://*****:*****@patch('hydra_agent.agent.Session.get')
    def test_get_url(self, get_session_mock):
        """Tests get method from the Agent with URL
        :param get_session_mock: MagicMock object for patching session.get
        """
        state_object = {
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2",
            "@context": "/api/contexts/StateCollection.jsonld"
        }

        get_session_mock.return_value.status_code = 200
        get_session_mock.return_value.json.return_value = state_object
        response = self.agent.get("http://*****:*****@patch('hydra_agent.agent.Session.get')
    def test_get_class_properties(self, get_session_mock):
        """Tests get method from the Agent by class name and properties
        :param get_session_mock: MagicMock object for patching session.get
        """
        state_object = {
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "North",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2",
            "@context": "/api/contexts/State.jsonld"
        }

        get_session_mock.return_value.status_code = 200
        get_session_mock.return_value.json.return_value = state_object
        response_url = self.agent.get("http://*****:*****@patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_get_collection(self, put_session_mock, embedded_get_mock):
        """Tests get method from the Agent when fetching collections
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {"@type": "DroneCollection", "members": ["1"]}

        collection_url = "http://*****:*****@context": "/api/contexts/DroneCollection.jsonld",
                "@id": "/api/DroneCollection/1",
                "@type": "DroneCollection",
                "members": [
                    {
                        "@id": "/api/Drone/1",
                        "@type": "Drone"
                    }
                ],
                "search": {
                    "@type": "hydra:IriTemplate",
                    "hydra:mapping": [{
                        "@type": "hydra:IriTemplateMapping",
                        "hydra:property": "http://auto.schema.org/speed",
                        "hydra:required": False,
                        "hydra:variable": "DroneState[Speed]"}
                    ],
                    "hydra:template": "/serverapi/Drone(DroneState[Speed])",
                    "hydra:variableRepresentation": "hydra:BasicRepresentation",
                },
                "totalItems": 1,
                "view": {
                    "@id": "/serverapi/DroneCollection?page=1",
                    "@type": "PartialCollectionView",
                    "first": "/serverapi/DroneCollection?page=1",
                    "last": "/serverapi/DroneCollection?page=1",
                    "next": "/serverapi/DroneCollection?page=1"
                }
            }

        embedded_get_mock.return_value.json.return_value = simplified_collection
        embedded_get_mock.return_value.status_code = 200
        response, new_object_url = self.agent.put(collection_url, new_object)
        get_collection_url = self.agent.get(collection_url)
        self.assertEqual(type(get_collection_url), dict)
        # get_collection_cached = self.agent.get(resource_type="Drone",
        #                                        cached_limit=1)
        # self.assertEqual(get_collection_cached[0]["@id"],
        #                  get_collection_url['members'][0]["@id"])

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_put(self, put_session_mock, embedded_get_mock):
        """Tests put method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        class_url = "http://*****:*****@context": "/api/contexts/State.jsonld",
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }
        drone_res = {
            "@context": "/api/contexts/Drone.jsonld",
            "@id": "/api/Drone/1",
            "@type": "Drone",
            "DroneState": {
                "@id": "/api/State/1",
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "MaxSpeed": "A3GZ37",
            "Sensor": "E7JD5Q",
            "model": "HB14CX",
            "name": "Priaysnhu"
        }
        fake_responses = [Mock(), Mock(), Mock(), Mock()]
        fake_responses[0].json.return_value = drone_res
        fake_responses[0].status_code = 200
        fake_responses[1].json.return_value = state_object
        fake_responses[1].status_code = 200
        fake_responses[2].json.return_value = drone_res
        fake_responses[2].status_code = 200
        fake_responses[3].json.return_value = drone_res
        fake_responses[3].status_code = 200
        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.side_effect = fake_responses
        response, new_object_url = self.agent.put(new_object_url, new_object)

        # Assert if object was inserted queried and inserted successfully
        get_new_object_url = self.agent.get(new_object_url)
        self.assertEqual(get_new_object_url, drone_res)

        get_new_object_type = self.agent.get(new_object_url,
                                             filters={'name': "Smart Drone"})
        self.assertEqual(get_new_object_url, get_new_object_type)

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.post')
    @patch('hydra_agent.agent.Session.put')
    def test_post(self, put_session_mock, post_session_mock,
                  embedded_get_mock):
        """Tests post method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param post_session_mock: MagicMock object for patching session.post
        """
        new_object = {
            "@type": "Drone",
            "DroneState": {
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "MaxSpeed": "A3GZ37",
            "Sensor": "E7JD5Q",
            "model": "HB14CX",
            "name": "Priyanshu"
        }

        class_url = "http://*****:*****@context": "/api/contexts/State.jsonld",
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }
        drone_res = {
            "@context": "/api/contexts/Drone.jsonld",
            "@id": "/api/Drone/2",
            "@type": "Drone",
            "DroneState": {
                "@id": "/api/State/1",
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "MaxSpeed": "A3GZ37",
            "Sensor": "E7JD5Q",
            "model": "HB14CX",
            "name": "Priaysnhu"
        }
        fake_responses = [Mock(), Mock(), Mock()]
        fake_responses[0].json.return_value = drone_res
        fake_responses[0].status_code = 200
        fake_responses[1].json.return_value = state_object
        fake_responses[1].status_code = 200
        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.side_effect = fake_responses

        response, new_object_url = self.agent.put(new_object_url, new_object)

        post_session_mock.return_value.status_code = 200
        post_session_mock.return_value.json.return_value = {"msg": "success"}
        new_object['DroneState']['@id'] = "/api/State/1"
        new_object['name'] = "Updated Name"
        # Mocking an object to be used for a property that has an embedded link
        response = self.agent.post(new_object_url, new_object)
        # Assert if object was updated successfully as intended
        fake_responses[2].json.return_value = new_object
        fake_responses[2].status_code = 200
        get_new_object = self.agent.get(new_object_url)

        self.assertEqual(get_new_object, new_object)

    @patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.delete')
    @patch('hydra_agent.agent.Session.put')
    def test_delete(self, put_session_mock, delete_session_mock,
                    get_session_mock):
        """Tests post method from the Agent
        :param put_session_mock: MagicMock object for patching session.put
        :param delete_session_mock: MagicMock object to patch session.delete
        :param get_session_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": "/api/StateCollection/1",
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        class_url = "http://*****:*****@context": "/api/contexts/State.jsonld",
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }
        drone_res = {
            "@context": "/api/contexts/Drone.jsonld",
            "@id": "/api/Drone/1",
            "@type": "Drone",
            "DroneState": {
                "@id": "/api/State/1",
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "MaxSpeed": "A3GZ37",
            "Sensor": "E7JD5Q",
            "model": "HB14CX",
            "name": "Priaysnhu"
        }
        fake_responses = [Mock(), Mock(), Mock()]
        fake_responses[0].json.return_value = drone_res
        fake_responses[0].status_code = 200
        fake_responses[1].json.return_value = state_object
        fake_responses[1].status_code = 200
        fake_responses[2].text = {"msg": "resource doesn't exist"}
        # Mocking an object to be used for a property that has an embedded link
        get_session_mock.return_value.status_code = 200
        get_session_mock.side_effect = fake_responses

        response, new_object_url = self.agent.put(new_object_url, new_object)

        delete_session_mock.return_value.status_code = 200
        delete_session_mock.return_value.json.return_value = {"msg": "success"}
        response = self.agent.delete(new_object_url)
        get_new_object = self.agent.get(new_object_url)

        # Assert if nothing different was returned by Redis
        self.assertEqual(get_new_object, {"msg": "resource doesn't exist"})

    def test_basic_iri_templates(self):
        """Tests the URI constructed on the basis of Basic Representation
        """
        simplified_response = {
            "@context": "/serverapi/contexts/DroneCollection.jsonld",
            "@id": "/serverapi/DroneCollection/",
            "@type": "DroneCollection",
            "members": [
                {
                    "@id": "/serverapi/DroneCollection/1",
                    "@type": "Drone"
                },
            ],
            "search": {
                "@type":
                "hydra:IriTemplate",
                "hydra:mapping": [{
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "http://schema.org/name",
                    "hydra:required": False,
                    "hydra:variable": "name"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "pageIndex",
                    "hydra:required": False,
                    "hydra:variable": "pageIndex"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "limit",
                    "hydra:required": False,
                    "hydra:variable": "limit"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "offset",
                    "hydra:required": False,
                    "hydra:variable": "offset"
                }],
                "hydra:template":
                "/serverapi/(pageIndex, limit, offset)",
                "hydra:variableRepresentation":
                "hydra:BasicRepresentation"
            },
            "view": {
                "@id": "/serverapi/DroneCollection?page=1",
                "@type": "PartialCollectionView",
                "first": "/serverapi/DroneCollection?page=1",
                "last": "/serverapi/DroneCollection?page=1",
                "next": "/serverapi/DroneCollection?page=1"
            }
        }
        sample_mapping_object = {
            "name": "Drone1",
            "pageIndex": "1",
            "limit": "10",
            "offset": "1"
        }
        url = urlparse(
            expand_template("http://*****:*****@context": "/serverapi/contexts/DroneCollection.jsonld",
            "@id": "/serverapi/DroneCollection/",
            "@type": "DroneCollection",
            "members": [
                {
                    "@id": "/serverapi/DroneCollection/1",
                    "@type": "Drone"
                },
            ],
            "search": {
                "@type":
                "hydra:IriTemplate",
                "hydra:mapping": [{
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "http://schema.org/name",
                    "hydra:required": False,
                    "hydra:variable": "name"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "pageIndex",
                    "hydra:required": False,
                    "hydra:variable": "pageIndex"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "limit",
                    "hydra:required": False,
                    "hydra:variable": "limit"
                }, {
                    "@type": "hydra:IriTemplateMapping",
                    "hydra:property": "offset",
                    "hydra:required": False,
                    "hydra:variable": "offset"
                }],
                "hydra:template":
                "/serverapi/(pageIndex, limit, offset)",
                "hydra:variableRepresentation":
                "hydra:ExplicitRepresentation"
            },
            "view": {
                "@id": "/serverapi/DroneCollection?page=1",
                "@type": "PartialCollectionView",
                "first": "/serverapi/DroneCollection?page=1",
                "last": "/serverapi/DroneCollection?page=1",
                "next": "/serverapi/DroneCollection?page=1"
            }
        }
        sample_mapping_object = {
            "url_demo": {
                "@id": "http://www.hydra-cg.com/"
            },
            "prop_with_language": {
                "@language": "en",
                "@value": "A simple string"
            },
            "prop_with_type": {
                "@value": "5.5",
                "@type": "http://www.w3.org/2001/XMLSchema#decimal"
            },
            "str_prop": "A simple string"
        }
        url = urlparse(
            expand_template("http://*****:*****@patch('hydra_agent.agent.Session.get')
    @patch('hydra_agent.agent.Session.put')
    def test_edges(self, put_session_mock, embedded_get_mock):
        """Tests to check if all edges are being created properly
        :param put_session_mock: MagicMock object for patching session.put
        :param embedded_get_mock: MagicMock object for patching session.get
        """
        new_object = {
            "@type": "Drone",
            "DroneState": {
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "name": "Smart Drone",
            "model": "Hydra Drone",
            "MaxSpeed": "999",
            "Sensor": "Wind"
        }

        class_url = "http://*****:*****@context": "/api/contexts/State.jsonld",
            "@id": "/api/State/1",
            "@type": "State",
            "Battery": "sensor Ex",
            "Direction": "speed Ex",
            "DroneID": "sensor Ex",
            "Position": "model Ex",
            "SensorStatus": "sensor Ex",
            "Speed": "2"
        }
        drone_res = {
            "@context": "/api/contexts/Drone.jsonld",
            "@id": "/api/Drone/1",
            "@type": "Drone",
            "DroneState": {
                "@id": "/api/State/1",
                "@type": "State",
                "Battery": "C1WE92",
                "Direction": "Q9VV88",
                "DroneID": "6EBGT5",
                "Position": "A",
                "SensorStatus": "335Y8B",
                "Speed": "IZPSTE"
            },
            "MaxSpeed": "A3GZ37",
            "Sensor": "E7JD5Q",
            "model": "HB14CX",
            "name": "Priaysnhu"
        }
        fake_responses = [Mock(), Mock()]
        fake_responses[0].json.return_value = drone_res
        fake_responses[0].status_code = 200
        fake_responses[1].json.return_value = state_object
        fake_responses[1].status_code = 200
        # Mocking an object to be used for a property that has an embedded link
        embedded_get_mock.return_value.status_code = 200
        embedded_get_mock.side_effect = fake_responses
        response, new_object_url = self.agent.put(class_url, new_object)
        # Checking if Drone Class has an edge to the Drone Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'Drone' \
            RETURN type(r)"

        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[0][0], 'has_Drone')

        # Checking if State  has an edge to the State Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'State' \
            RETURN type(r)"

        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[0][0], 'has_State')

        # Checking if Drone Resource has an edge to the State Resource
        query = "MATCH (p)-[r]->() WHERE p.type = 'Drone' RETURN type(r)"
        query_result = self.redis_graph.query(query)
        self.assertEqual(query_result.result_set[1][0], 'has_State')