Move registration API to configuration
[pti/o2.git] / tests / unit / test_provision.py
diff --git a/tests/unit/test_provision.py b/tests/unit/test_provision.py
new file mode 100644 (file)
index 0000000..3585802
--- /dev/null
@@ -0,0 +1,147 @@
+# Copyright (C) 2021 Wind River Systems, Inc.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+import uuid
+from unittest.mock import MagicMock
+
+from o2ims.domain import configuration_obj
+from o2ims.views import provision_view
+from o2common.config import config
+
+
+def test_new_smo_endpoint():
+    configuration_id1 = str(uuid.uuid4())
+    configuration1 = configuration_obj.Configuration(
+        configuration_id1, "https://callback/uri/write/here",
+        "SMO")
+    assert configuration_id1 is not None and\
+        configuration1.configurationId == configuration_id1
+
+
+def test_view_smo_endpoint(mock_uow):
+    session, uow = mock_uow
+
+    configuration_id1 = str(uuid.uuid4())
+    conf1 = MagicMock()
+    conf1.serialize_smo.return_value = {
+        "configurationId": configuration_id1,
+    }
+    session.return_value.query.return_value = [conf1]
+
+    configuration_list = provision_view.configurations(uow)
+    assert str(configuration_list[0].get(
+        "configurationId")) == configuration_id1
+
+
+def test_view_smo_endpoint_one(mock_uow):
+    session, uow = mock_uow
+
+    configuration_id1 = str(uuid.uuid4())
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize_smo.return_value = None
+
+    # Query return None
+    configuration_res = provision_view.configuration_one(
+        configuration_id1, uow)
+    assert configuration_res is None
+
+    session.return_value.query.return_value.filter_by.return_value.first.\
+        return_value.serialize_smo.return_value = {
+            "configurationId": configuration_id1,
+        }
+
+    configuration_res = provision_view.configuration_one(
+        configuration_id1, uow)
+    assert str(configuration_res.get(
+        "configurationId")) == configuration_id1
+
+
+def test_flask_get_list(mock_flask_uow):
+    session, app = mock_flask_uow
+    session.query.return_value = []
+    apibase = config.get_provision_api_base()
+
+    with app.test_client() as client:
+        # Get list and return empty list
+        ##########################
+        resp = client.get(apibase+"/smo-endpoint")
+        assert resp.get_data() == b'[]\n'
+
+
+def test_flask_get_one(mock_flask_uow):
+    session, app = mock_flask_uow
+
+    session.return_value.query.return_value.filter_by.return_value.\
+        first.return_value = None
+    apibase = config.get_provision_api_base()
+
+    with app.test_client() as client:
+        # Get one and return 404
+        ###########################
+        configuration_id1 = str(uuid.uuid4())
+        resp = client.get(apibase+"/smo-endpoint/"+configuration_id1)
+        assert resp.status_code == 404
+
+
+def test_flask_post(mock_flask_uow):
+    session, app = mock_flask_uow
+    apibase = config.get_provision_api_base()
+
+    with app.test_client() as client:
+        session.return_value.execute.return_value = []
+
+        conf_callback = 'http://registration/callback/url'
+        resp = client.post(apibase+'/smo-endpoint', json={
+            'endpoint': conf_callback
+        })
+        assert resp.status_code == 201
+        assert 'configurationId' in resp.get_json()
+
+
+def test_flask_delete(mock_flask_uow):
+    session, app = mock_flask_uow
+    apibase = config.get_provision_api_base()
+
+    with app.test_client() as client:
+        session.return_value.execute.return_value.first.return_value = {}
+
+        configuration_id1 = str(uuid.uuid4())
+        resp = client.delete(apibase+"/smo-endpoint/"+configuration_id1)
+        assert resp.status_code == 204
+
+
+def test_flask_not_allowed(mock_flask_uow):
+    _, app = mock_flask_uow
+    apibase = config.get_provision_api_base()
+
+    with app.test_client() as client:
+
+        # Testing SMO endpoint not support method
+        ##########################
+        uri = apibase + "/smo-endpoint"
+        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'
+
+        configuration_id1 = str(uuid.uuid4())
+        uri = apibase + "/smo-endpoint/" + configuration_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'