mirror of https://github.com/veops/cmdb.git
test: add ci_type test cases
This commit is contained in:
parent
00f4eeb90d
commit
362122952b
|
@ -21,7 +21,7 @@ class CMDBTestClient(FlaskClient):
|
||||||
headers.setdefault("User-Agent", "py.test")
|
headers.setdefault("User-Agent", "py.test")
|
||||||
kwargs["headers"] = headers
|
kwargs["headers"] = headers
|
||||||
|
|
||||||
json_data = kwargs.pop("json")
|
json_data = kwargs.pop("json", None)
|
||||||
if json_data is not None:
|
if json_data is not None:
|
||||||
kwargs["data"] = json.dumps(json_data)
|
kwargs["data"] = json.dumps(json_data)
|
||||||
if not kwargs.get("content_type"):
|
if not kwargs.get("content_type"):
|
||||||
|
@ -49,6 +49,7 @@ def app():
|
||||||
_app.config['SECRET_KEY'] = CMDBTestClient.TEST_APP_SECRET
|
_app.config['SECRET_KEY'] = CMDBTestClient.TEST_APP_SECRET
|
||||||
_app.test_client_class = CMDBTestClient
|
_app.test_client_class = CMDBTestClient
|
||||||
_app.response_class = CMDBTestResponse
|
_app.response_class = CMDBTestResponse
|
||||||
|
|
||||||
ctx = _app.test_request_context()
|
ctx = _app.test_request_context()
|
||||||
ctx.push()
|
ctx.push()
|
||||||
yield _app
|
yield _app
|
||||||
|
@ -99,7 +100,6 @@ def clean_db():
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
if not User.get_by(email="test@xx.com"):
|
if not User.get_by(email="test@xx.com"):
|
||||||
print("hello world xxxxx")
|
|
||||||
u = User.create(
|
u = User.create(
|
||||||
flush=True,
|
flush=True,
|
||||||
username="test",
|
username="test",
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""provide some sample data in database"""
|
||||||
|
import uuid
|
||||||
|
import random
|
||||||
|
|
||||||
|
from api.models.cmdb import Attribute, CIType, CITypeAttributeGroup, CITypeAttribute
|
||||||
|
|
||||||
|
|
||||||
|
def init_attributes(num=1):
|
||||||
|
attrs = []
|
||||||
|
for i in range(num):
|
||||||
|
attrs.append(Attribute.create(
|
||||||
|
name=uuid.uuid4().hex[:8],
|
||||||
|
alias=uuid.uuid4().hex[:8],
|
||||||
|
value_type=str(random.randint(0, 100) % 7)
|
||||||
|
))
|
||||||
|
return attrs
|
||||||
|
|
||||||
|
|
||||||
|
def init_ci_types(num=1):
|
||||||
|
attrs = init_attributes(num)
|
||||||
|
|
||||||
|
ci_types = []
|
||||||
|
for i in range(num):
|
||||||
|
ci_type = CIType.create(
|
||||||
|
name=uuid.uuid4().hex[:8],
|
||||||
|
alias=uuid.uuid4().hex[:8],
|
||||||
|
unique_id=attrs[i].id
|
||||||
|
)
|
||||||
|
CITypeAttribute.create(
|
||||||
|
type_id=ci_type.id,
|
||||||
|
attr_id=attrs[i].id,
|
||||||
|
)
|
||||||
|
ci_types.append(ci_type)
|
||||||
|
|
||||||
|
return ci_types
|
||||||
|
|
||||||
|
|
||||||
|
def init_attribute_groups(num=1):
|
||||||
|
ci_types = init_ci_types(num)
|
||||||
|
|
||||||
|
ags = []
|
||||||
|
for i in range(num):
|
||||||
|
ags.append(CITypeAttributeGroup.create(
|
||||||
|
name=uuid.uuid4().hex[:8],
|
||||||
|
type_id=ci_types[i].id,
|
||||||
|
order=i
|
||||||
|
))
|
||||||
|
return ags
|
|
@ -1,6 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from api.models.cmdb import Attribute
|
from api.models.cmdb import Attribute
|
||||||
|
|
||||||
|
from tests.sample import init_attributes
|
||||||
|
|
||||||
|
|
||||||
def test_create_attribute(session, client):
|
def test_create_attribute(session, client):
|
||||||
url = "/api/v0.1/attributes"
|
url = "/api/v0.1/attributes"
|
||||||
|
@ -16,7 +18,7 @@ def test_create_attribute(session, client):
|
||||||
assert resp.status_code == 200
|
assert resp.status_code == 200
|
||||||
assert resp.json["attr_id"]
|
assert resp.json["attr_id"]
|
||||||
|
|
||||||
# check there is a ci_types in database
|
# check there is a attribute in database
|
||||||
attr_id = resp.json["attr_id"]
|
attr_id = resp.json["attr_id"]
|
||||||
attr_ins = Attribute.get_by_id(attr_id)
|
attr_ins = Attribute.get_by_id(attr_id)
|
||||||
assert attr_ins.id == attr_id
|
assert attr_ins.id == attr_id
|
||||||
|
@ -24,3 +26,34 @@ def test_create_attribute(session, client):
|
||||||
assert attr_ins.alias == "区域"
|
assert attr_ins.alias == "区域"
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_attribute(session, client):
|
||||||
|
attr_ins = init_attributes(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/attributes/" + str(attr_ins.id)
|
||||||
|
payload = {
|
||||||
|
"name": "update",
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.put(url, json=payload)
|
||||||
|
|
||||||
|
# check resp status code and content
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert resp.json["attr_id"] == attr_ins.id
|
||||||
|
|
||||||
|
# check attribute updated in database
|
||||||
|
attr_ins = Attribute.get_by_id(attr_ins.id)
|
||||||
|
assert attr_ins.name == "update"
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_attribute(session, client):
|
||||||
|
attr_ins = init_attributes(1)[0]
|
||||||
|
url = "/api/v0.1/attributes/" + str(attr_ins.id)
|
||||||
|
|
||||||
|
resp = client.delete(url)
|
||||||
|
|
||||||
|
assert resp.status_code == 200
|
||||||
|
# attr should be soft delete
|
||||||
|
attr_ins = Attribute.get_by_id(attr_ins.id)
|
||||||
|
assert attr_ins.deleted is True
|
||||||
|
assert attr_ins.deleted_at
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
|
||||||
class TestCI:
|
|
||||||
|
|
||||||
def test_ci_search_only_type_query(self, app):
|
|
||||||
with app.test_client() as c:
|
|
||||||
rv = c.get('/api/v0.1/ci/s?q=_type:server', json={})
|
|
||||||
json_data = rv.get_json()
|
|
||||||
assert type(json_data.get("result")) is list
|
|
||||||
|
|
|
@ -1 +1,167 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from api.models.cmdb import (
|
||||||
|
CIType, CITypeAttribute,
|
||||||
|
Attribute, CITypeAttributeGroup,
|
||||||
|
CITypeAttributeGroupItem)
|
||||||
|
|
||||||
|
from tests.sample import (
|
||||||
|
init_attributes, init_ci_types,
|
||||||
|
init_attribute_groups)
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_ci_type(session, client):
|
||||||
|
attr = init_attributes(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types"
|
||||||
|
payload = {
|
||||||
|
"name": "test",
|
||||||
|
"alias": "测试",
|
||||||
|
"unique_key": attr.id
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.post(url, json=payload)
|
||||||
|
|
||||||
|
# check resp status code and content
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert resp.json["type_id"]
|
||||||
|
|
||||||
|
# check there is a attribute in database
|
||||||
|
type_id = resp.json["type_id"]
|
||||||
|
ci_type_ins = CIType.get_by_id(type_id)
|
||||||
|
assert ci_type_ins.id == type_id
|
||||||
|
assert ci_type_ins.name == "test"
|
||||||
|
assert ci_type_ins.alias == "测试"
|
||||||
|
assert ci_type_ins.unique_id == attr.id
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_ci_type(session, client):
|
||||||
|
ci_type_ins = init_ci_types(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types/" + str(ci_type_ins.id)
|
||||||
|
payload = {
|
||||||
|
"name": "update",
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.put(url, json=payload)
|
||||||
|
|
||||||
|
# check resp status code and content
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert resp.json["type_id"] == ci_type_ins.id
|
||||||
|
|
||||||
|
# check ci_type updated in database
|
||||||
|
ci_type_ins = CIType.get_by_id(ci_type_ins.id)
|
||||||
|
assert ci_type_ins.name == "update"
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_ci_type(session, client):
|
||||||
|
ci_type_ins = init_ci_types(1)[0]
|
||||||
|
url = "/api/v0.1/ci_types/" + str(ci_type_ins.id)
|
||||||
|
|
||||||
|
resp = client.delete(url)
|
||||||
|
|
||||||
|
assert resp.status_code == 200
|
||||||
|
# attr should be soft delete
|
||||||
|
ci_type_ins = CIType.get_by_id(ci_type_ins.id)
|
||||||
|
assert ci_type_ins.deleted is True
|
||||||
|
assert ci_type_ins.deleted_at
|
||||||
|
|
||||||
|
|
||||||
|
def test_bind_attributes_ci_type(session, client):
|
||||||
|
attrs = init_attributes(3)
|
||||||
|
ci_type = init_ci_types(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types/{}/attributes".format(ci_type.id)
|
||||||
|
payload = {
|
||||||
|
"attr_id": [str(x.id) for x in attrs]
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.post(url, json=payload)
|
||||||
|
|
||||||
|
# check resp status code and content
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert len(resp.json["attributes"]) == len(attrs)
|
||||||
|
|
||||||
|
# check ci_type has 4 attributes
|
||||||
|
ci_type_attribute_ids = [x.attr_id for x in CITypeAttribute.query.filter_by(type_id=ci_type.id).all()]
|
||||||
|
for attr in attrs:
|
||||||
|
assert attr.id in ci_type_attribute_ids
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_attributes_ci_type(session, client):
|
||||||
|
ci_type = init_ci_types(1)[0]
|
||||||
|
url = "/api/v0.1/ci_types/{}/attributes".format(ci_type.name)
|
||||||
|
|
||||||
|
resp = client.get(url)
|
||||||
|
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert len(resp.json["attributes"]) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_attributes_ci_type(session, client):
|
||||||
|
ci_type = init_ci_types(1)[0]
|
||||||
|
attr = Attribute.query.first()
|
||||||
|
url = "/api/v0.1/ci_types/{}/attributes".format(ci_type.id)
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"attributes": [
|
||||||
|
{"attr_id": attr.id, "default_show": False, "is_required": True}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
resp = client.put(url, json=payload)
|
||||||
|
assert resp.status_code == 200
|
||||||
|
|
||||||
|
ci_type_attr_ins = CITypeAttribute.query.filter_by(type_id=ci_type.id).first()
|
||||||
|
assert ci_type_attr_ins
|
||||||
|
assert ci_type_attr_ins.is_required is True
|
||||||
|
assert ci_type_attr_ins.default_show is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_create_attribute_group_ci_type(session, client):
|
||||||
|
ci_type = init_ci_types(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types/{}/attribute_groups".format(ci_type.id)
|
||||||
|
payload = {
|
||||||
|
"name": "A",
|
||||||
|
"order": 100,
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.post(url, json=payload)
|
||||||
|
|
||||||
|
# check resp status code and content
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert resp.json["group_id"]
|
||||||
|
|
||||||
|
ins = CITypeAttributeGroup.query.filter_by(type_id=ci_type.id).first()
|
||||||
|
assert ins
|
||||||
|
assert ins.id == resp.json["group_id"]
|
||||||
|
assert ins.name == "A"
|
||||||
|
assert ins.order == 100
|
||||||
|
|
||||||
|
|
||||||
|
def test_update_attribute_group_ci_type(session, client):
|
||||||
|
attribute_groups = init_attribute_groups(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types/attribute_groups/{}".format(attribute_groups.id)
|
||||||
|
payload = {
|
||||||
|
"attributes": [x.id for x in Attribute.query.all()]
|
||||||
|
}
|
||||||
|
|
||||||
|
resp = client.put(url, json=payload)
|
||||||
|
assert resp.status_code == 200
|
||||||
|
assert resp.json["group_id"]
|
||||||
|
|
||||||
|
ag_items = CITypeAttributeGroupItem.query.filter_by(group_id=attribute_groups.id).all()
|
||||||
|
for a in Attribute.query.all():
|
||||||
|
assert a.id in [x.attr_id for x in ag_items]
|
||||||
|
|
||||||
|
|
||||||
|
def test_delete_attribute_group_ci_type(session, client):
|
||||||
|
attribute_groups = init_attribute_groups(1)[0]
|
||||||
|
|
||||||
|
url = "/api/v0.1/ci_types/attribute_groups/{}".format(attribute_groups.id)
|
||||||
|
resp = client.delete(url)
|
||||||
|
|
||||||
|
assert resp.status_code == 200
|
||||||
|
attribute_group_ins = CITypeAttributeGroup.query.filter_by(id=attribute_groups.id).first()
|
||||||
|
assert attribute_group_ins.deleted is True
|
||||||
|
assert attribute_group_ins.deleted_at
|
||||||
|
|
Loading…
Reference in New Issue