Add registration the SMO's CRUD interface in IMS
[pti/o2.git] / tests / unit / test_ocloud.py
index 95bd9cd..95dd372 100644 (file)
@@ -13,8 +13,9 @@
 #  limitations under the License.
 
 import uuid
+from unittest.mock import MagicMock
 
-from o2ims.domain import ocloud
+from o2ims.domain import ocloud, subscription_obj
 from o2ims.domain import resource_type as rt
 from o2ims.views import ocloud_view
 from o2common.config import config
@@ -71,7 +72,7 @@ def test_new_resource():
     resource_type_id1 = str(uuid.uuid4())
     resource_pool_id1 = str(uuid.uuid4())
     resource1 = ocloud.Resource(
-        resource_id1, resource_type_id1, resource_pool_id1)
+        resource_id1, resource_type_id1, resource_pool_id1, 'resource1')
     assert resource_id1 is not None and resource1.resourceId == resource_id1
 
 
@@ -87,35 +88,48 @@ def test_new_deployment_manager():
 
 def test_new_subscription():
     subscription_id1 = str(uuid.uuid4())
-    subscription1 = ocloud.Subscription(
+    subscription1 = subscription_obj.Subscription(
         subscription_id1, "https://callback/uri/write/here")
     assert subscription_id1 is not None and\
         subscription1.subscriptionId == subscription_id1
 
 
+def test_new_registration():
+    registration_id1 = str(uuid.uuid4())
+    registration1 = subscription_obj.Registration(
+        registration_id1, "https://callback/uri/write/here")
+    assert registration_id1 is not None and\
+        registration1.registrationId == registration_id1
+
+
 def test_view_olcouds(mock_uow):
     session, uow = mock_uow
 
     ocloud1_UUID = str(uuid.uuid4)
-    session.return_value.execute.return_value = [
-        {"oCloudId": ocloud1_UUID}]
+    ocloud1 = MagicMock()
+    ocloud1.serialize.return_value = {
+        'oCloudId': ocloud1_UUID, 'name': 'ocloud1'}
+    session.return_value.query.return_value = [ocloud1]
 
     ocloud_list = ocloud_view.oclouds(uow)
-    assert str(ocloud_list[0].get("oCloudId")) == ocloud1_UUID
+    # assert str(ocloud_list[0].get("oCloudId")) == ocloud1_UUID
+    assert len(ocloud_list) == 1
 
 
 def test_view_olcoud_one(mock_uow):
     session, uow = mock_uow
 
     ocloud1_UUID = str(uuid.uuid4)
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     ocloud_res = ocloud_view.ocloud_one(ocloud1_UUID, uow)
     assert ocloud_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "oCloudId": ocloud1_UUID}
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "oCloudId": ocloud1_UUID}
 
     ocloud_res = ocloud_view.ocloud_one(ocloud1_UUID, uow)
     assert str(ocloud_res.get("oCloudId")) == ocloud1_UUID
@@ -125,9 +139,10 @@ def test_view_resource_types(mock_uow):
     session, uow = mock_uow
 
     resource_type_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value = [
-        {"resourceTypeId": resource_type_id1}
-    ]
+    restype1 = MagicMock()
+    restype1.serialize.return_value = {
+        "resourceTypeId": resource_type_id1}
+    session.return_value.query.return_value = [restype1]
 
     resource_type_list = ocloud_view.resource_types(uow)
     assert str(resource_type_list[0].get(
@@ -138,15 +153,17 @@ def test_view_resource_type_one(mock_uow):
     session, uow = mock_uow
 
     resource_type_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     resource_type_res = ocloud_view.resource_type_one(
         resource_type_id1, uow)
     assert resource_type_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "resourceTypeId": resource_type_id1}
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "resourceTypeId": resource_type_id1}
 
     resource_type_res = ocloud_view.resource_type_one(resource_type_id1, uow)
     assert str(resource_type_res.get("resourceTypeId")) == resource_type_id1
@@ -156,9 +173,10 @@ def test_view_resource_pools(mock_uow):
     session, uow = mock_uow
 
     resource_pool_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value = [
-        {"resourcePoolId": resource_pool_id1}
-    ]
+    respool1 = MagicMock()
+    respool1.serialize.return_value = {
+        "resourcePoolId": resource_pool_id1}
+    session.return_value.query.return_value = [respool1]
 
     resource_pool_list = ocloud_view.resource_pools(uow)
     assert str(resource_pool_list[0].get(
@@ -169,16 +187,18 @@ def test_view_resource_pool_one(mock_uow):
     session, uow = mock_uow
 
     resource_pool_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     resource_pool_res = ocloud_view.resource_pool_one(
         resource_pool_id1, uow)
     assert resource_pool_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "resourcePoolId": resource_pool_id1
-    }
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "resourcePoolId": resource_pool_id1
+        }
 
     resource_pool_res = ocloud_view.resource_pool_one(resource_pool_id1, uow)
     assert str(resource_pool_res.get("resourcePoolId")) == resource_pool_id1
@@ -189,10 +209,12 @@ def test_view_resources(mock_uow):
 
     resource_id1 = str(uuid.uuid4())
     resource_pool_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value = [{
+    res1 = MagicMock()
+    res1.serialize.return_value = {
         "resourceId": resource_id1,
         "resourcePoolId": resource_pool_id1
-    }]
+    }
+    session.return_value.query.return_value.filter_by.return_value = [res1]
 
     resource_list = ocloud_view.resources(resource_pool_id1, uow)
     assert str(resource_list[0].get("resourceId")) == resource_id1
@@ -204,16 +226,18 @@ def test_view_resource_one(mock_uow):
 
     resource_id1 = str(uuid.uuid4())
     resource_pool_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     resource_res = ocloud_view.resource_one(resource_id1, uow)
     assert resource_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "resourceId": resource_id1,
-        "resourcePoolId": resource_pool_id1
-    }
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "resourceId": resource_id1,
+            "resourcePoolId": resource_pool_id1
+        }
 
     resource_res = ocloud_view.resource_one(resource_id1, uow)
     assert str(resource_res.get("resourceId")) == resource_id1
@@ -223,9 +247,11 @@ def test_view_deployment_managers(mock_uow):
     session, uow = mock_uow
 
     deployment_manager_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value = [{
+    dm1 = MagicMock()
+    dm1.serialize.return_value = {
         "deploymentManagerId": deployment_manager_id1,
-    }]
+    }
+    session.return_value.query.return_value = [dm1]
 
     deployment_manager_list = ocloud_view.deployment_managers(uow)
     assert str(deployment_manager_list[0].get(
@@ -236,16 +262,18 @@ def test_view_deployment_manager_one(mock_uow):
     session, uow = mock_uow
 
     deployment_manager_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     deployment_manager_res = ocloud_view.deployment_manager_one(
         deployment_manager_id1, uow)
     assert deployment_manager_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "deploymentManagerId": deployment_manager_id1,
-    }
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "deploymentManagerId": deployment_manager_id1,
+        }
 
     deployment_manager_res = ocloud_view.deployment_manager_one(
         deployment_manager_id1, uow)
@@ -257,9 +285,11 @@ def test_view_subscriptions(mock_uow):
     session, uow = mock_uow
 
     subscription_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value = [{
+    sub1 = MagicMock()
+    sub1.serialize.return_value = {
         "subscriptionId": subscription_id1,
-    }]
+    }
+    session.return_value.query.return_value = [sub1]
 
     subscription_list = ocloud_view.subscriptions(uow)
     assert str(subscription_list[0].get(
@@ -270,16 +300,18 @@ def test_view_subscription_one(mock_uow):
     session, uow = mock_uow
 
     subscription_id1 = str(uuid.uuid4())
-    session.return_value.execute.return_value.first.return_value = None
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
 
     # Query return None
     subscription_res = ocloud_view.subscription_one(
         subscription_id1, uow)
     assert subscription_res is None
 
-    session.return_value.execute.return_value.first.return_value = {
-        "subscriptionId": subscription_id1,
-    }
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "subscriptionId": subscription_id1,
+        }
 
     subscription_res = ocloud_view.subscription_one(
         subscription_id1, uow)
@@ -287,9 +319,47 @@ def test_view_subscription_one(mock_uow):
         "subscriptionId")) == subscription_id1
 
 
+def test_view_registrations(mock_uow):
+    session, uow = mock_uow
+
+    registration_id1 = str(uuid.uuid4())
+    reg1 = MagicMock()
+    reg1.serialize.return_value = {
+        "registrationId": registration_id1,
+    }
+    session.return_value.query.return_value = [reg1]
+
+    registration_list = ocloud_view.registrations(uow)
+    assert str(registration_list[0].get(
+        "registrationId")) == registration_id1
+
+
+def test_view_registration_one(mock_uow):
+    session, uow = mock_uow
+
+    registration_id1 = str(uuid.uuid4())
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = None
+
+    # Query return None
+    registration_res = ocloud_view.registration_one(
+        registration_id1, uow)
+    assert registration_res is None
+
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize.return_value = {
+            "registrationId": registration_id1,
+        }
+
+    registration_res = ocloud_view.registration_one(
+        registration_id1, uow)
+    assert str(registration_res.get(
+        "registrationId")) == registration_id1
+
+
 def test_flask_get_list(mock_flask_uow):
     session, app = mock_flask_uow
-    session.return_value.execute.return_value = []
+    session.query.return_value = []
     apibase = config.get_o2ims_api_base()
 
     with app.test_client() as client:
@@ -312,10 +382,15 @@ def test_flask_get_list(mock_flask_uow):
         resp = client.get(apibase+"/subscriptions")
         assert resp.get_data() == b'[]\n'
 
+        resp = client.get(apibase+"/registrations")
+        assert resp.get_data() == b'[]\n'
+
 
 def test_flask_get_one(mock_flask_uow):
     session, app = mock_flask_uow
-    session.return_value.execute.return_value.first.return_value = None
+
+    session.return_value.query.return_value.filter_by.return_value.\
+        first.return_value = None
     apibase = config.get_o2ims_api_base()
 
     with app.test_client() as client:
@@ -346,6 +421,10 @@ def test_flask_get_one(mock_flask_uow):
         resp = client.get(apibase+"/subscriptions/"+subscription_id1)
         assert resp.status_code == 404
 
+        registration_id1 = str(uuid.uuid4())
+        resp = client.get(apibase+"/registrations/"+registration_id1)
+        assert resp.status_code == 404
+
 
 def test_flask_post(mock_flask_uow):
     session, app = mock_flask_uow
@@ -363,6 +442,13 @@ def test_flask_post(mock_flask_uow):
         assert resp.status_code == 201
         assert 'subscriptionId' in resp.get_json()
 
+        reg_callback = 'http://registration/callback/url'
+        resp = client.post(apibase+'/registrations', json={
+            'callback': reg_callback,
+        })
+        assert resp.status_code == 201
+        assert 'registrationId' in resp.get_json()
+
 
 def test_flask_delete(mock_flask_uow):
     session, app = mock_flask_uow
@@ -375,6 +461,10 @@ def test_flask_delete(mock_flask_uow):
         resp = client.delete(apibase+"/subscriptions/"+subscription_id1)
         assert resp.status_code == 204
 
+        registration_id1 = str(uuid.uuid4())
+        resp = client.delete(apibase+"/registrations/"+registration_id1)
+        assert resp.status_code == 204
+
 
 def test_flask_not_allowed(mock_flask_uow):
     _, app = mock_flask_uow
@@ -492,3 +582,22 @@ def test_flask_not_allowed(mock_flask_uow):
         assert resp.status == '405 METHOD NOT ALLOWED'
         resp = client.patch(uri)
         assert resp.status == '405 METHOD NOT ALLOWED'
+
+        # Testing registrations not support method
+        ##########################
+        uri = apibase + "/registrations"
+        resp = client.put(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'
+        resp = client.patch(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'
+        resp = client.delete(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'
+
+        subscription_id1 = str(uuid.uuid4())
+        uri = apibase + "/registrations/" + subscription_id1
+        resp = client.post(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'
+        resp = client.put(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'
+        resp = client.patch(uri)
+        assert resp.status == '405 METHOD NOT ALLOWED'