aboutsummaryrefslogtreecommitdiffstats
path: root/moon_manager/tests/unit_python/api/test_models.py
diff options
context:
space:
mode:
Diffstat (limited to 'moon_manager/tests/unit_python/api/test_models.py')
-rw-r--r--moon_manager/tests/unit_python/api/test_models.py468
1 files changed, 438 insertions, 30 deletions
diff --git a/moon_manager/tests/unit_python/api/test_models.py b/moon_manager/tests/unit_python/api/test_models.py
index 3c205d1d..569fe1b4 100644
--- a/moon_manager/tests/unit_python/api/test_models.py
+++ b/moon_manager/tests/unit_python/api/test_models.py
@@ -1,67 +1,475 @@
+# Software Name: MOON
+
+# Version: 5.4
+
+# SPDX-FileCopyrightText: Copyright (c) 2018-2020 Orange and its contributors
+# SPDX-License-Identifier: Apache-2.0
+
+# This software is distributed under the 'Apache License 2.0',
+# the text of which is available at 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+# or see the "LICENSE" file for more details.
+
+
import json
-import api.utilities as utilities
+import hug
+import pytest
+from moon_utilities import exceptions
+from helpers import data_builder as builder
+from helpers import policy_helper
+from helpers import model_helper
+from uuid import uuid4
+
+
+def get_models():
+ from moon_manager.api import models
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+
+ req = hug.test.get(models, "/models", headers=auth_headers)
+ models = req.data
+ return req, models
+
+
+def add_models(name, headers, data=None, ):
+ from moon_manager.api import models
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule()
+ if not data:
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=headers)
+ models = req.data
+ return req, models
+
+
+def update_model(name, model_id, headers):
+ from moon_manager.api import models
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule()
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ headers['Content-Type'] = 'application/json'
+ req = hug.test.patch(models, "/models/{}".format(model_id), body=json.dumps(data),
+ headers=headers)
+ if req.status == hug.HTTP_405:
+ return req
+ models = req.data
+ return req, models
+
+
+def add_model_without_meta_rules_ids(name, headers):
+ from moon_manager.api import models
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": []
+ }
+ headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=headers)
+ models = req.data
+ return req, models
-def get_models(client):
- req = client.get("/models")
- models = utilities.get_json(req.data)
+def add_model_with_empty_meta_rule_id(name, headers):
+ from moon_manager.api import models
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [""]
+ }
+ headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=headers)
+ models = req.data
return req, models
-def add_models(client, name):
+def update_model_without_meta_rules_ids(model_id, headers):
+ from moon_manager.api import models
+ name = "model_id" + uuid4().hex
data = {
"name": name,
"description": "description of {}".format(name),
- "meta_rules": ["meta_rule_id1", "meta_rule_id2"]
+ "meta_rules": []
}
- req = client.post("/models", data=json.dumps(data),
- headers={'Content-Type': 'application/json'})
- models = utilities.get_json(req.data)
+ headers['Content-Type'] = 'application/json'
+ req = hug.test.patch(models, "/models/{}".format(model_id), body=json.dumps(data),
+ headers=headers)
+ models = req.data
return req, models
-def delete_models(client, name):
- request, models = get_models(client)
+def delete_models(name, headers):
+ request, models = get_models()
for key, value in models['models'].items():
if value['name'] == name:
- req = client.delete("/models/{}".format(key))
+ from moon_manager.api import models
+ req = hug.test.delete(models, "/models/{}".format(key), headers=headers)
break
return req
-def delete_models_without_id(client):
- req = client.delete("/models/{}".format(""))
+def delete_models_without_id(headers):
+ from moon_manager.api import models
+ req = hug.test.delete(models, "/models/{}".format(""), headers=headers)
return req
+def clean_models(headers):
+ req, models = get_models()
+ for key, value in models['models'].items():
+ print(key)
+ print(value)
+ from moon_manager.api import models
+ hug.test.delete(models, "/models/{}".format(key), headers=headers)
+
+
+def test_delete_model_assigned_to_policy():
+ policy_name = "testuser" + uuid4().hex
+ req = model_helper.add_model(model_id="mls_model_id" + uuid4().hex)
+ model_id = list(req.keys())[0]
+ data = {
+ "name": policy_name,
+ "description": "description of {}".format(policy_name),
+ "model_id": model_id,
+ "genre": "genre"
+ }
+ from moon_manager.api import policy
+ from moon_manager.api import models
+ from moon_utilities.auth_functions import get_api_key_for_user
+ headers = {"X-Api-Key": get_api_key_for_user("admin"), 'Content-Type': 'application/json'}
+ hug.test.post(policy, "/policies", body=json.dumps(data), headers=headers)
+ with pytest.raises(exceptions.DeleteModelWithPolicy) as exception_info:
+ req = hug.test.delete(models, "/models/{}".format(model_id), headers={"X-Api-Key":
+ get_api_key_for_user("admin")})
+ assert "400: Model With Policy Error" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == '400: Model With Policy Error'
+
+
def test_get_models():
- client = utilities.register_client()
- req, models= get_models(client)
- assert req.status_code == 200
+ req, models = get_models()
+ assert req.status == hug.HTTP_200
assert isinstance(models, dict)
assert "models" in models
def test_add_models():
- client = utilities.register_client()
- req, models = add_models(client, "testuser")
- assert req.status_code == 200
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req, models = add_models("testuser", auth_headers)
+ assert req.status == hug.HTTP_200
assert isinstance(models, dict)
- value = list(models["models"].values())[0]
+ model_id = list(models["models"])[0]
assert "models" in models
- assert value['name'] == "testuser"
- assert value["description"] == "description of {}".format("testuser")
- assert value["meta_rules"][0] == "meta_rule_id1"
+ assert models['models'][model_id]['name'] == "testuser"
+ assert models['models'][model_id]["description"] == "description of {}".format("testuser")
+
+
+def test_add_models_with_meta_rule_has_blank_subject():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ name = "testuser1"
+ from moon_manager.api import models
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule(empty="subject")
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ auth_headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=auth_headers)
+ assert req.status == hug.HTTP_200
+
+
+def test_add_models_with_meta_rule_has_blank_object():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ name = "testuser1"
+ from moon_manager.api import models
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule(empty="object")
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ auth_headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=auth_headers)
+ assert req.status == hug.HTTP_200
+
+
+def test_add_models_with_meta_rule_has_blank_action():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ name = "testuser1"
+ from moon_manager.api import models
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule(empty="action")
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ auth_headers['Content-Type'] = 'application/json'
+ req = hug.test.post(models, "/models", body=json.dumps(data),
+ headers=auth_headers)
+ assert req.status == hug.HTTP_200
def test_delete_models():
- client = utilities.register_client()
- req = delete_models(client, "testuser")
- assert req.status_code == 200
+ name = uuid4().hex + "testuser"
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ add_models(name, auth_headers)
+ req = delete_models(name, headers=auth_headers)
+ assert req.status == hug.HTTP_200
+
+
+def test_update_models_with_assigned_policy():
+ from moon_manager.api import models
+ model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex)
+ model_id = list(model.keys())[0]
+ value = {
+ "name": "test_policy" + uuid4().hex,
+ "model_id": model_id,
+ "description": "test",
+ }
+ policy_helper.add_policies(value=value)
+ data = {
+ "name": "model_" + uuid4().hex,
+ "description": "description of model_2",
+ "meta_rules": []
+ }
+ from moon_utilities.auth_functions import get_api_key_for_user
+ headers = {"X-Api-Key": get_api_key_for_user("admin"), 'Content-Type': 'application/json'}
+ with pytest.raises(exceptions.DeleteModelWithPolicy) as exception_info:
+ req = hug.test.patch(models, "/models/{}".format(model_id), body=json.dumps(data),
+ headers=headers)
+ assert "400: Model With Policy Error" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == "400: Model With Policy Error"
+
+
+def test_update_models_with_no_assigned_policy():
+ from moon_manager.api import models
+ model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex)
+ model_id = list(model.keys())[0]
+ data = {
+ "name": "model_" + uuid4().hex,
+ "description": "description of model_2",
+ "meta_rules": []
+ }
+ from moon_utilities.auth_functions import get_api_key_for_user
+ headers = {"X-Api-Key": get_api_key_for_user("admin"), 'Content-Type': 'application/json'}
+ req = hug.test.patch(models, "/models/{}".format(model_id), body=json.dumps(data),
+ headers=headers)
+ assert req.status == hug.HTTP_200
+
+
+def test_update_models_without_meta_rule_key():
+ from moon_manager.api import models
+ model = model_helper.add_model(model_id="mls_model_id" + uuid4().hex)
+ model_id = list(model.keys())[0]
+
+ data = {
+ "name": "model_" + uuid4().hex,
+ "description": "description of model_2",
+ }
+ from moon_utilities.auth_functions import get_api_key_for_user
+ headers = {"X-Api-Key": get_api_key_for_user("admin"), 'Content-Type': 'application/json'}
+ with pytest.raises(exceptions.MetaRuleUnknown) as exception_info:
+ req = hug.test.patch(models, "/models/{}".format(model_id), body=json.dumps(data),
+ headers=headers)
+ assert "400: Meta Rule Unknown" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == "400: Meta Rule Unknown"
def test_delete_models_without_id():
- client = utilities.register_client()
- req = delete_models_without_id(client)
- assert req.status_code == 500
+ from moon_utilities.auth_functions import get_api_key_for_user
+ headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ req = delete_models_without_id(headers=headers)
+ assert req.status == hug.HTTP_405
+
+
+def test_add_model_with_empty_name():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ with pytest.raises(exceptions.ValidationContentError) as exception_info:
+ req, models = add_models("<br/>", headers=auth_headers)
+ assert "Key: 'name', [Forbidden characters in string]" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == "Key: 'name', [Forbidden characters in string]"
+
+
+def test_add_model_with_name_contain_space():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ with pytest.raises(exceptions.ValidationContentError) as exception_info:
+ req, models = add_models("test<br>user", headers=auth_headers)
+ assert "Key: 'name', [Forbidden characters in string]" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == "Key: 'name', [Forbidden characters in string]"
+
+
+def test_add_model_with_name_space():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ with pytest.raises(exceptions.ModelContentError) as exception_info:
+ req, models = add_models(" ", headers=auth_headers)
+ assert "400: Model Unknown" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == '400: Model Unknown'
+
+
+def test_add_model_with_empty_meta_rule_id():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ with pytest.raises(exceptions.MetaRuleUnknown) as exception_info:
+ req, meta_rules = add_model_with_empty_meta_rule_id("testuser", headers=auth_headers)
+ assert "400: Meta Rule Unknown" == str(exception_info.value)
+ # assert req.status == hug.HTTP_400
+ # assert req.data["message"] == '400: Meta Rule Unknown'
+
+def test_add_model_with_existed_name():
+ name = uuid4().hex
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req, models = add_models(name, headers=auth_headers)
+ assert req.status == hug.HTTP_200
+ with pytest.raises(exceptions.ModelExisting) as exception_info:
+ req, models = add_models(name, headers=auth_headers)
+ assert "409: Model Error" == str(exception_info.value)
+ # assert req.status == hug.HTTP_409
+ # assert req.data["message"] == '409: Model Error'
+
+
+def test_add_model_with_existed_meta_rules_list():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ name = uuid4().hex
+ subject_category_id, object_category_id, action_category_id, meta_rule_id = \
+ builder.create_new_meta_rule()
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ name = uuid4().hex
+ req, models = add_models(name=name, headers=auth_headers, data=data)
+ assert req.status == hug.HTTP_200
+ data = {
+ "name": name,
+ "description": "description of {}".format(name),
+ "meta_rules": [meta_rule_id]
+ }
+ with pytest.raises(exceptions.ModelExisting) as exception_info:
+ req, models = add_models(name=name, headers=auth_headers, data=data)
+ assert "409: Model Error" == str(exception_info.value)
+ # assert req.status == hug.HTTP_409
+ # assert req.data["message"] == '409: Model Error'
+
+
+def test_add_model_without_meta_rules():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req, meta_rules = add_model_without_meta_rules_ids("testuser", headers=auth_headers)
+ assert req.status == hug.HTTP_200
+
+
+def test_update_model():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req = add_models("testuser", headers=auth_headers)
+ model_id = list(req[1]['models'])[0]
+ req_update = update_model("testuser", model_id, headers=auth_headers)
+ assert req_update[0].status == hug.HTTP_200
+ model_id = list(req_update[1]["models"])[0]
+ assert req_update[1]["models"][model_id]["meta_rules"][0] is not None
+ delete_models("testuser", headers=auth_headers)
+
+
+def test_update_model_name_with_space():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req = add_models("testuser", headers=auth_headers)
+ model_id = list(req[1]['models'])[0]
+ with pytest.raises(exceptions.ModelContentError) as exception_info:
+ req_update = update_model(" ", model_id, headers=auth_headers)
+ assert "400: Model Unknown" == str(exception_info.value)
+ # assert req_update[0].status == hug.HTTP_400
+ # assert req_update[1]["message"] == '400: Model Unknown'
+
+
+def test_update_model_with_empty_name():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req = add_models("testuser", headers=auth_headers)
+ model_id = list(req[1]['models'])[0]
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ with pytest.raises(exceptions.ModelContentError) as exception_info:
+ req_update = update_model("", model_id, headers=auth_headers)
+ assert "400: Model Unknown" == str(exception_info.value)
+ # assert req_update[0].status == hug.HTTP_400
+ # assert req_update[1]['message'] == '400: Model Unknown'
+
+
+def test_update_meta_rules_without_id():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ clean_models(headers=auth_headers)
+ req_update = update_model("testuser", "", headers=auth_headers)
+ assert req_update.status == hug.HTTP_405
+
+
+def test_update_meta_rules_without_name():
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ with pytest.raises(exceptions.ValidationContentError) as exception_info:
+ req_update = update_model("<a></a>", "1234567", headers=auth_headers)
+ assert "Key: 'name', [Forbidden characters in string]" == str(exception_info.value)
+ # assert req_update[0].status == hug.HTTP_400
+ # assert req_update[0].data["message"] == "Key: 'name', [Forbidden characters in string]"
+
+
+def test_update_meta_rules_without_meta_rules():
+ value = {
+ "name": "mls_model_id" + uuid4().hex,
+ "description": "test",
+ "meta_rules": []
+ }
+ model = model_helper.add_model(value=value)
+ model_id = list(model.keys())[0]
+ from moon_utilities.auth_functions import get_api_key_for_user
+ auth_headers = {"X-Api-Key": get_api_key_for_user("admin")}
+ req_update = update_model_without_meta_rules_ids(model_id, headers=auth_headers)
+ assert req_update[0].status == hug.HTTP_200