Skip to content

Commit

Permalink
tests: cover default drawio; small refactoring
Browse files Browse the repository at this point in the history
* chore: added tests; code cleanup after analysis
* tests: drawio preambula verification
* tests: drawio diagram
* tests: drawio mxgraphmodel
* tests: drawio root
* tests: drawio mxcell
  • Loading branch information
tsypuk committed Jul 27, 2023
1 parent c98c2ba commit ac357f4
Show file tree
Hide file tree
Showing 4 changed files with 113 additions and 5 deletions.
10 changes: 5 additions & 5 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ def __init__(self):
path = pkgutil.get_data(__package__, f'providers/{provider}.json')
supported_vertex.update(json.loads(path.decode("utf-8")))

def get_vertex_metadata(self, node_type: str) -> object:
def get_vertex_metadata(self, node_type: str) -> dict:
if node_type in self.supported_vertex:
return self.supported_vertex[node_type]
else:
logging.warn(
logging.warning(
f'No such nodeType: {node_type} in the Library (using default fallback icon Info). Please contact maintainer to add it, or provide MergeRequest')
return self.supported_vertex['fallback_vertex']

@staticmethod
def stringify_dict(metadata: dict) -> str:
if metadata != '':
if metadata:
# return '<BR>-----------<BR>' + '<BR>'.join([f'<b>{k.capitalize()}</b>: {v}' for k, v in metadata.items()])
return '<BR>-----------<BR>' + '<BR>'.join([f'<b>{k}</b>: {v}' for k, v in metadata.items()])
else:
Expand Down Expand Up @@ -115,13 +115,13 @@ def add_list(self, table_id='', table_name='', fill_color='', rows=[], width="30
# Position Vertex based on X,Y cords
self.update_vertex_coords_width_height_from_prev_version(mx_geometry, f'vertex:{table_id}:row:{index}')

def add_service(self, id: str, node_name: str, arn: str, metadata='', node_enum=Services):
def add_service(self, id: str, node_name: str, arn: str, metadata={}, node_enum=Services):
# Type checking
if not isinstance(node_enum, Services):
raise TypeError('node_enum must be an instance of AWS,OnPrem Enum')
self.add_vertex(id, node_name, arn, metadata, node_enum.value)

def add_vertex(self, id: str, node_name: str, arn: str, metadata='', node_type=''):
def add_vertex(self, id: str, node_name: str, arn: str, metadata: dict = {}, node_type=''):

# check that there is no such vertex already
exist = False
Expand Down
Empty file removed tests/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions tests/test___init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,21 @@ def test__build_vertex_id_approach_3_dst(self):
result = mcd._build_vertex_id(vertex_details=self.vertex_details, edge=edge, src_dst_marker='dst')
# then
self.assertEqual('iam_policy:arn:aws:iam::123456789:policy/prod-dynamo-policy', result)

def test_stringify_dict(self):
# given
mcd = MultiCloudDiagrams()
metadata = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
# when
result = mcd.stringify_dict(metadata)
# then
self.assertEqual('<BR>-----------<BR><b>key1</b>: value1<BR><b>key2</b>: value2<BR><b>key3</b>: value3', result)

def test_stringify_dict_empty(self):
# given
mcd = MultiCloudDiagrams()
metadata = {}
# when
result = mcd.stringify_dict(metadata)
# then
self.assertEqual('', result)
90 changes: 90 additions & 0 deletions tests/test_mcd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
from unittest import TestCase

from multicloud_diagrams import MultiCloudDiagrams
import xml.etree.ElementTree as et


class TestMultiCloudDiagramsDefaultDrawIO(TestCase):

def test_drawio_preambula(self):
# given
mcd = MultiCloudDiagrams()

# when
tree = et.ElementTree(mcd.mxfile)
roots = tree.findall(".")
root = roots[0]

# then
self.assertEqual(1, len(roots))
self.assertEqual('mxfile', root.tag)
self.assertEqual('multicloud-diagrams', root.attrib['host'])
self.assertEqual('PIP package multicloud-diagrams. Generate resources in draw.io compatible format for Cloud infrastructure. Copyrights @ Roman Tsypuk 2023. MIT license.',
root.attrib['agent'])
self.assertEqual('MultiCloud', root.attrib['type'])

def test_diagram(self):
# given
mcd = MultiCloudDiagrams()

# when
tree = et.ElementTree(mcd.mxfile)
diagrams = tree.findall("./")
diagram = diagrams[0]

# then
self.assertEqual(1, len(diagrams))
self.assertEqual('diagram', diagram.tag)
self.assertEqual('diagram_1', diagram.attrib['id'])
self.assertEqual('AWS components', diagram.attrib['name'])

def test_mx_graph_model(self):
# given
mcd = MultiCloudDiagrams()

# when
tree = et.ElementTree(mcd.mxfile)
# ./diagram/
mx_graph_models = tree.findall("/*/")
mx_graph_model = mx_graph_models[0]

# then
self.assertEqual(1, len(mx_graph_models))
self.assertEqual('mxGraphModel', mx_graph_model.tag)
expected = {'dx': '1015', 'dy': '661', 'grid': '1', 'gridSize': '10', 'guides': '1', 'tooltips': '1', 'connect': '1', 'arrows': '1', 'fold': '1', 'page': '1', 'pageScale': '1',
'pageWidth': '850', 'pageHeight': '1100', 'math': '0', 'shadow': '0'}
self.assertEqual(expected, mx_graph_model.attrib)

def test_root(self):
# given
mcd = MultiCloudDiagrams()

# when
tree = et.ElementTree(mcd.mxfile)
# ./diagram/mxGraphModel/root
roots = tree.findall("./*/*/*")
root = roots[0]

# then
self.assertEqual(1, len(roots))
self.assertEqual('root', root.tag)
expected = {}
self.assertEqual(expected, root.attrib)

def test_mx_cell(self):
# given
mcd = MultiCloudDiagrams()

# when
tree = et.ElementTree(mcd.mxfile)
# ./diagram/mxGraphModel/root/mxCell
mxcells = tree.findall("./*/*/*/*")

# then
self.assertEqual(2, len(mxcells))
self.verify_mx_cell(mxcells[0], expected={'id': '0'})
self.verify_mx_cell(mxcells[1], expected={'id': '1', 'parent': '0'})

def verify_mx_cell(self, mx_cell, expected):
self.assertEqual('mxCell', mx_cell.tag)
self.assertEqual(expected, mx_cell.attrib)

0 comments on commit ac357f4

Please sign in to comment.