Skip to content

Commit

Permalink
tests: added label in edge verification; added fill dump function
Browse files Browse the repository at this point in the history
  • Loading branch information
tsypuk committed Jul 29, 2023
1 parent 17083d8 commit 97e08e1
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 17 deletions.
13 changes: 10 additions & 3 deletions multicloud_diagrams/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,9 +140,10 @@ def get_node_template(self, node_type: str) -> dict:
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'].copy()

# green fill_color=#d5e8d4
# red fill_color=#f8cecc;"
# TODO cover with tests list
# TODO add snapshot function
def add_snapshot(self, table_id='', table_name='', fill_color='', snapshot: str = '', width="300"):
print('')

def add_list(self, table_id='', table_name='', fill_color='', rows=[], width="300"):
if not table_id:
table_id = table_name
Expand Down Expand Up @@ -396,6 +397,12 @@ def read_coords_from_file(self, file_name: str):
cords['y'] = mx_point.get('y')
self.prev_coords[neighbor.get('id')] = cords

def dump(self):
from xml.dom import minidom
rough_string = Et.tostring(self.mx_file, 'utf-8')
reparsed = minidom.parseString(rough_string)
print(reparsed.toprettyxml(indent=" "))

def export_to_file(self, file_path):
with open(file_path, 'wb') as file:
tree = Et.ElementTree(self.mx_file)
Expand Down
36 changes: 22 additions & 14 deletions tests/test_connections.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ def test_dynamo(self):
# when
mcd.add_vertex(id=func_arn, node_name='consumer_lambda', arn=func_arn, node_type='lambda_function', metadata=func_metadata)
mcd.add_vertex(id=sqs_arn, node_name='int-eu-live-events.fifo', arn=sqs_arn, node_type='sqs', metadata=sqs_metadata)
mcd.add_link(src_node_id=f'lambda_function:{func_arn}', dst_node_id=f'sqs:{sqs_arn}')
mcd.add_link(src_node_id=f'lambda_function:{func_arn}', dst_node_id=f'sqs:{sqs_arn}', action=['Action1, Action2'])

# then
expected_sqs = {
'id': 'vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo',
'parent': '1',
'style': 'sketch=0;outlineConnect=0;fontColor=#232F3E;gradientColor=#FF4F8B;gradientDirection=north;fillColor=#BC1356;strokeColor=#ffffff;'
'dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;',
'dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=left;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.sqs;',
'value': '<b>Name</b>: int-eu-live-events.fifo<BR><b>ARN</b>: '
'arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo<BR>-----------<BR><b>FifoQueue</b>: '
'TRUE',
Expand All @@ -45,6 +45,7 @@ def test_dynamo(self):
'arn:aws:lambda:eu-west-1:123456789012:function:consumer_lambda<BR>-----------<BR><b>CodeSize</b>: '
'1234<BR><b>Memory</b>: 128',
'vertex': '1'}

expected_connection = {
'edge': '2',
'id': 'edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer_lambda:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo',
Expand All @@ -53,11 +54,19 @@ def test_dynamo(self):
'style': 'endFill=0;endArrow=none;endArrow=none;',
'target': 'vertex:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo'}

expected_label = {
'connectable': '0',
'id': 'label:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer_lambda:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo',
'parent': 'edge:lambda_function:arn:aws:lambda:eu-west-1:123456789012:function:consumer_lambda:to:sqs:arn:aws:sqs:eu-west-1:123456789012:int-eu-live-events.fifo',
'style': 'edgeLabel;html=1;align=left;verticalAlign=middle;resizable=0;points=[];labelBackgroundColor=none;',
'value': 'Action1, Action2',
'vertex': '1'}

tree = Et.ElementTree(mcd.mx_file)
self.verify_mxfile_default(tree)

mx_cells = tree.findall("./*/*/*/")
self.assertEqual(5, len(mx_cells))
self.assertEqual(6, len(mx_cells))
self.verify_mx_cell(mx_cells[0], expected={'id': '0'})
self.verify_mx_cell(mx_cells[1], expected={'id': '1', 'parent': '0'})

Expand All @@ -72,28 +81,27 @@ def test_dynamo(self):
self.verify_mx_cell(mx_cells[2], expected_lambda)
self.verify_mx_cell(mx_cells[3], expected_sqs)
self.verify_mx_cell(mx_cells[4], expected_connection)
self.verify_mx_cell(mx_cells[5], expected_label)

# vertex lambda_function
children = mx_cells[2].findall("./*")
mx_geometry = children[0]
self.assertEqual(1, len(children))
self.assertEqual('mxGeometry', mx_geometry.tag)
self.assertEqual('geometry', mx_geometry.attrib['as'])

self.verify_mx_geometry(children)
self.assertEqual(self.supported_vertex['lambda_function']['height'], mx_geometry.attrib['height'])
self.assertEqual(self.supported_vertex['lambda_function']['width'], mx_geometry.attrib['width'])

# vertex sqs
children = mx_cells[3].findall("./*")
mx_geometry = children[0]
self.assertEqual(1, len(children))
self.assertEqual('mxGeometry', mx_geometry.tag)
self.assertEqual('geometry', mx_geometry.attrib['as'])
self.verify_mx_geometry(children)
self.assertEqual(self.supported_vertex['sqs']['height'], mx_geometry.attrib['height'])
self.assertEqual(self.supported_vertex['sqs']['width'], mx_geometry.attrib['width'])

# edge lambda_function-2-sqs
children = mx_cells[4].findall("./*")
mx_geometry = children[0]
self.assertEqual(1, len(children))
self.assertEqual('mxGeometry', mx_geometry.tag)
self.assertEqual('geometry', mx_geometry.attrib['as'])
self.verify_mx_geometry(mx_cells[4].findall("./*"))

# label
self.verify_mx_geometry(mx_cells[5].findall("./*"))

# mcd.dump()
32 changes: 32 additions & 0 deletions tests/test_list.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
from multicloud_diagrams import MultiCloudDiagrams

from utils.utils import TestUtilities
import xml.etree.ElementTree as Et


class TestMCDList(TestUtilities):

def test_list(self):
# given
table_name = 'prod-dynamo-table'
# table_arn = 'arn:aws:dynamodb:eu-west-1:123456789012:table/prod-dynamo-table'
mcd = MultiCloudDiagrams()
rows_keys = [
'First: row',
'Second: row'
]

# when
mcd.add_list(table_name=f'Schema:{table_name}', rows=rows_keys)
mcd.dump()
# then

tree = Et.ElementTree(mcd.mx_file)
self.verify_mxfile_default(tree)

mx_cells = tree.findall("./*/*/*/")
self.assertEqual(5, len(mx_cells))
self.verify_mx_cell(mx_cells[0], expected={'id': '0'})
self.verify_mx_cell(mx_cells[1], expected={'id': '1', 'parent': '0'})

# TODO finish test
6 changes: 6 additions & 0 deletions utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,3 +120,9 @@ def verify_layers(self, mx_cells, layers_count, mcd):
if id > 0:
expected_layer[id + 1] = f'L{id + 1}'
self.assertEqual(expected_layer, mcd.layers)

def verify_mx_geometry(self, children):
self.assertEqual(1, len(children))
mx_geometry = children[0]
self.assertEqual('mxGeometry', mx_geometry.tag)
self.assertEqual('geometry', mx_geometry.attrib['as'])

0 comments on commit 97e08e1

Please sign in to comment.