refactor

Change-Id: I833f751ab3f307f6996d0822bef7a749dc6f6d2f
diff --git a/test/test_grpc_models_accessor.py b/test/test_grpc_models_accessor.py
new file mode 100644
index 0000000..707b5ef
--- /dev/null
+++ b/test/test_grpc_models_accessor.py
@@ -0,0 +1,89 @@
+import unittest
+from mock import patch, MagicMock
+from grpc_client.models_accessor import GRPCModelsAccessor
+from grpc_client.resources import RESOURCES
+
+class FakeObj:
+    new = None
+    filter = None
+
+class FakeResource:
+    objects = FakeObj
+
+class FakeModel:
+    pass
+
+class FakeExistingModel:
+    pass
+
+mock_resources = {
+    'test-model': FakeResource
+}
+
+class GRPCModelsAccessor_Create_or_update_Test(unittest.TestCase):
+
+    def test_unkown_module(self):
+        """
+        [GRPCModelsAccessor] get_model_from_classname: If a model is not know by the grpc api, raise
+        """
+        data = {
+            "name": "test"
+        }
+        with self.assertRaises(Exception) as e:
+            GRPCModelsAccessor.get_model_from_classname('i-do-not-exists', data)
+        self.assertEqual(e.exception.message, "[XOS-TOSCA] The model your tring to create (name: test, class: i-do-not-exists) is not know by xos-core")
+
+    @patch.object(FakeResource.objects, "filter")
+    @patch.object(FakeResource.objects, "new", MagicMock(return_value=FakeModel))
+    def test_new_model(self, mock_filter):
+        """
+        [GRPCModelsAccessor] get_model_from_classname: should create a new model
+        """
+        data = {
+            "name": "test"
+        }
+        with patch.dict(RESOURCES, mock_resources, clear=True):
+            model = GRPCModelsAccessor.get_model_from_classname('test-model', data)
+            mock_filter.assert_called_with(name="test")
+            self.assertEqual(model, FakeModel)
+
+    @patch.object(FakeResource.objects, "filter", MagicMock(return_value=[FakeExistingModel]))
+    def test_existing_model(self):
+        """
+        [GRPCModelsAccessor] get_model_from_classname: should update an existing model
+        """
+        data = {
+            "name": "test"
+        }
+        with patch.dict(RESOURCES, mock_resources, clear=True):
+            model = GRPCModelsAccessor.get_model_from_classname('test-model', data)
+            self.assertEqual(model, FakeExistingModel)
+
+    @patch.object(FakeResource.objects, "filter", MagicMock(return_value=['a', 'b']))
+    def test_multiple_models(self):
+        """
+        [GRPCModelsAccessor] get_model_from_classname: should raise an exception if multiple instances are found
+        """
+        data = {
+            "name": "test"
+        }
+        with patch.dict(RESOURCES, mock_resources, clear=True):
+            with self.assertRaises(Exception) as e:
+                GRPCModelsAccessor.get_model_from_classname('test-model', data)
+            self.assertEqual(e.exception.message, "[XOS-Tosca] Model test has multiple instances, I can't handle it")
+
+    @patch.dict(RESOURCES, mock_resources, clear=True)
+    @patch.object(FakeResource.objects, "filter")
+    def _test_find_model_without_name_property(self, mock_filter):
+        """
+        [GRPCModelsAccessor] get_model_from_classname: should lookup a model by the first property
+        """
+        data = {
+            'foo': 'bar',
+            'something': 'else'
+        }
+        GRPCModelsAccessor.get_model_from_classname('test-model', data)
+        mock_filter.assert_called_with(foo="bar")
+
+if __name__ == '__main__':
+    unittest.main()
\ No newline at end of file
diff --git a/test/test_tosca_parser.py b/test/test_tosca_parser.py
index eb31ed1..9a369fe 100644
--- a/test/test_tosca_parser.py
+++ b/test/test_tosca_parser.py
@@ -1,74 +1,24 @@
-import sys, os
 import unittest
-from mock import patch, MagicMock
 from tosca.parser import TOSCA_Parser
 
-class FakeObj:
-    new = None
-    filter = None
+class TOSCA_Parser_Test(unittest.TestCase):
 
-class FakeResource:
-    objects = FakeObj
-
-class FakeModel:
-    save = None
-
-class TOSCA_Parser_Create_or_update_Test(unittest.TestCase):
-
-    @patch.object(FakeResource.objects, "filter")
-    @patch.object(FakeResource.objects, "new", MagicMock(return_value=FakeModel))
-    @patch.object(FakeModel, "save")
-    def test_new_model(self, mock_save, mock_filter):
+    def test_get_tosca_models_by_name(self):
         """
-        [TOSCA_Parser] create_or_update: should create a new model
+        [TOSCA_Parser] get_tosca_models_by_name: should extract models from the TOSCA recipe and store them in a dict
         """
-        data = {
-            "name": "test"
-        }
+        class FakeNode:
+            def __init__(self, name):
+                self.name = name
 
-        TOSCA_Parser.creat_or_update(FakeResource, data)
-        mock_filter.assert_called_with(name="test")
-        mock_save.assert_called_once()
+        class FakeTemplate:
+            nodetemplates = [
+                FakeNode('model1'),
+                FakeNode('model2')
+            ]
+            pass
 
-    @patch.object(FakeResource.objects, "filter", MagicMock(return_value=[FakeModel]))
-    @patch.object(FakeModel, "save")
-    def test_existing_model(self, mock_save):
-        """
-        [TOSCA_Parser] create_or_update: should update an existing model
-        """
-        data = {
-            "name": "test"
-        }
 
-        TOSCA_Parser.creat_or_update(FakeResource, data)
-        mock_save.assert_called_once()
-
-    @patch.object(FakeResource.objects, "filter", MagicMock(return_value=['a', 'b']))
-    def test_multiple_models(self):
-        """
-        [TOSCA_Parser] create_or_update: should raise an exception if multiple instances are found
-        """
-        data = {
-            "name": "test"
-        }
-        with self.assertRaises(Exception) as e:
-            TOSCA_Parser.creat_or_update(FakeResource, data)
-        self.assertEqual(e.exception.message, "[XOS-Tosca] Model test has multiple instances, I can't handle it")
-
-    @patch.object(FakeResource.objects, "new", MagicMock(return_value=FakeModel))
-    @patch.object(FakeResource.objects, "filter")
-    @patch.object(FakeModel, "save")
-    def test_find_model_without_name_property(self, mock_save, mock_filter):
-        """
-        [TOSCA_Parser] create_or_update: should lookup a model by the first property
-        """
-        data = {
-            'foo': 'bar',
-            'something': 'else'
-        }
-        TOSCA_Parser.creat_or_update(FakeResource, data)
-        mock_filter.assert_called_with(foo="bar")
-        mock_save.assert_called_once()
-
-if __name__ == '__main__':
-    unittest.main()
\ No newline at end of file
+        res = TOSCA_Parser.get_tosca_models_by_name(FakeTemplate)
+        self.assertIsInstance(res['model1'], FakeNode)
+        self.assertIsInstance(res['model2'], FakeNode)
\ No newline at end of file
diff --git a/test/tosca/test.yaml b/test/tosca/test.yaml
index 5f5d6e6..e5b9fbd 100644
--- a/test/tosca/test.yaml
+++ b/test/tosca/test.yaml
@@ -4,6 +4,7 @@
 
 imports:
    - custom_types/user.yaml
+   - custom_types/site.yaml
    - custom_types/xosguiextension.yaml
 
 topology_template:
@@ -16,14 +17,23 @@
         name: test
         files: /spa/extensions/test/vendor.js, /spa/extensions/test/app.js
 
-    xosadmin@opencord.org:
+    # Site
+    onlab:
+      type: tosca.nodes.Site
+      properties:
+        name: Open Networking Lab
+        site_url: http://onlab.us/
+        hosts_nodes: True
+
+    # User
+    test@opencord.org:
       type: tosca.nodes.User
       properties:
-        password: rk1UYDHZXbu6KVCMkhmV
-        firstname: XOS
-        lastname: Admin
-#        is_admin: True
-#      requirements:
-#        - site:
-#            node: some
-#            relationship: tosca.relationships.MemberOfSite
\ No newline at end of file
+        password: mypwd
+        firstname: User
+        lastname: Test
+        is_admin: True
+      requirements:
+        - site:
+            node: onlab
+            relationship: tosca.relationships.BelongsToOne
\ No newline at end of file