summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/dashboard/tests/test_crud.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/dashboard/tests/test_crud.py')
-rw-r--r--src/pybind/mgr/dashboard/tests/test_crud.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/src/pybind/mgr/dashboard/tests/test_crud.py b/src/pybind/mgr/dashboard/tests/test_crud.py
new file mode 100644
index 000000000..a94dfad62
--- /dev/null
+++ b/src/pybind/mgr/dashboard/tests/test_crud.py
@@ -0,0 +1,68 @@
+# pylint: disable=C0102
+
+import json
+from typing import NamedTuple
+
+import pytest
+from jsonschema import validate
+
+from ..controllers._crud import ArrayHorizontalContainer, \
+ ArrayVerticalContainer, Form, FormField, HorizontalContainer, SecretStr, \
+ VerticalContainer, serialize
+
+
+def assertObjectEquals(a, b):
+ assert json.dumps(a) == json.dumps(b)
+
+
+class NamedTupleMock(NamedTuple):
+ foo: int
+ var: str
+
+
+class NamedTupleSecretMock(NamedTuple):
+ foo: int
+ var: str
+ key: SecretStr
+
+
+@pytest.mark.parametrize("inp,out", [
+ (["foo", "var"], ["foo", "var"]),
+ (NamedTupleMock(1, "test"), {"foo": 1, "var": "test"}),
+ (NamedTupleSecretMock(1, "test", "imaginethisisakey"), {"foo": 1, "var": "test",
+ "key": "***********"}),
+ ((1, 2, 3), [1, 2, 3]),
+ (set((1, 2, 3)), [1, 2, 3]),
+])
+def test_serialize(inp, out):
+ assertObjectEquals(serialize(inp), out)
+
+
+def test_schema():
+ form = Form(path='/cluster/user/create',
+ root_container=VerticalContainer('Create user', key='create_user', fields=[
+ FormField('User entity', key='user_entity', field_type=str),
+ ArrayHorizontalContainer('Capabilities', key='caps', fields=[
+ FormField('left', field_type=str, key='left'),
+ FormField('right', key='right', field_type=str)
+ ]),
+ ArrayVerticalContainer('ah', key='ah', fields=[
+ FormField('top', key='top', field_type=str),
+ FormField('bottom', key='bottom', field_type=str)
+ ]),
+ HorizontalContainer('oh', key='oh', fields=[
+ FormField('left', key='left', field_type=str),
+ FormField('right', key='right', field_type=str)
+ ]),
+ VerticalContainer('ov', key='ov', fields=[
+ FormField('top', key='top', field_type=str),
+ FormField('bottom', key='bottom', field_type=bool)
+ ]),
+ ]))
+ form_dict = form.to_dict()
+ schema = {'schema': form_dict['control_schema'], 'layout': form_dict['ui_schema']}
+ validate(instance={'user_entity': 'foo',
+ 'caps': [{'left': 'foo', 'right': 'foo2'}],
+ 'ah': [{'top': 'foo', 'bottom': 'foo2'}],
+ 'oh': {'left': 'foo', 'right': 'foo2'},
+ 'ov': {'top': 'foo', 'bottom': True}}, schema=schema['schema'])