diff --git a/src/sakia/gui/graphs/explorer/controller.py b/src/sakia/gui/graphs/explorer/controller.py index 2c2a195272e3f71b9d83012892b77fb5616212a7..66796c785cb51f7586a945a6ff5ca850761f1ffc 100644 --- a/src/sakia/gui/graphs/explorer/controller.py +++ b/src/sakia/gui/graphs/explorer/controller.py @@ -5,6 +5,7 @@ from .model import ExplorerModel from ...search_user.controller import SearchUserController import asyncio + class ExplorerController(BaseGraphController): """ The homescreen view @@ -20,7 +21,9 @@ class ExplorerController(BaseGraphController): super().__init__(parent, view, model, password_asker) self.set_scene(view.scene()) self.reset() - self.view.button_go.clicked.connect(lambda checked: self.refresh()) + self.view.button_go.clicked.connect(self.start_exploration) + self.model.graph.graph_changed.connect(self.refresh) + self.model.graph.current_identity_changed.connect(self.view.update_current_identity) def center_on_identity(self, identity): """ @@ -30,6 +33,10 @@ class ExplorerController(BaseGraphController): """ asyncio.ensure_future(self.draw_graph(identity)) + def start_exploration(self): + self.model.graph.stop_exploration() + self.model.graph.start_exploration(self.model.identity, self.view.steps()) + @property def view(self) -> ExplorerView: return self._view @@ -59,12 +66,7 @@ class ExplorerController(BaseGraphController): :param sakia.core.registry.Identity identity: Center identity """ - await self.model.set_identity(identity) - self.model.graph.start_exploration(self.model.identity, self.view.steps()) - - # draw graph in qt scene - self.view.scene().clear() - self.view.update_wot(self.model.graph.nx_graph, self.model.identity) + self.view.update_wot(self.model.graph.nx_graph, identity) @once_at_a_time @asyncify @@ -72,7 +74,6 @@ class ExplorerController(BaseGraphController): """ Refresh graph scene to current metadata """ - self.model.graph.stop_exploration() await self.draw_graph(self.model.identity) self.view.update_wot(self.model.graph.nx_graph, self.model.identity) @@ -82,7 +83,10 @@ class ExplorerController(BaseGraphController): """ Reset graph scene to wallet identity """ + # draw graph in qt scene + self.view.scene().clear() self.view.reset_steps() maximum_steps = await self.model.maximum_steps() self.view.set_steps_max(maximum_steps) - await self.draw_graph(None) + await self.model.set_identity(None) + await self.draw_graph(self.model.identity) diff --git a/src/sakia/gui/graphs/explorer/model.py b/src/sakia/gui/graphs/explorer/model.py index 02879cd24cf95e6802a99739e1047ccfbadefc06..d7d4d4ff9765f6fafd64aaebe41f11ff4b63ec13 100644 --- a/src/sakia/gui/graphs/explorer/model.py +++ b/src/sakia/gui/graphs/explorer/model.py @@ -23,17 +23,17 @@ class ExplorerModel(BaseGraphModel): """ return self.explorer_graph - async def set_identity(self, identity=None): + async def set_identity(self, identity): """ Change current identity If identity is None, it defaults to account identity :param sakia.core.registry.Identity identity: the new identity to show :return: """ - identity_account = await self.account.identity(self.community) if identity: self.identity = identity else: + identity_account = await self.account.identity(self.community) self.identity = identity_account async def start_exploration(self, steps): diff --git a/src/sakia/gui/graphs/explorer/view.py b/src/sakia/gui/graphs/explorer/view.py index 207f953933e045d4e935a55085473aa5ddb9bc24..0d2ccb88f7e3f7c5d2f690f30352fae626009ce1 100644 --- a/src/sakia/gui/graphs/explorer/view.py +++ b/src/sakia/gui/graphs/explorer/view.py @@ -33,7 +33,7 @@ class ExplorerView(BaseGraphView, Ui_ExplorerWidget): def scene(self): """ Get the scene of the underlying graphics view - :return: + :rtype: sakia.gui.graphs.explorer.scene.ExplorerScene """ return self.graphics_view.scene() @@ -60,3 +60,18 @@ class ExplorerView(BaseGraphView, Ui_ExplorerWidget): """ # draw graph in qt scene self.scene().update_wot(nx_graph, identity, self.steps_slider.maximum()) + + async def draw_graph(self): + """ + Draw community graph centered on the identity + + :param sakia.core.registry.Identity identity: Center identity + """ + self.view.update_wot(self.model.graph.nx_graph, self.model.identity) + + def update_current_identity(self, pubkey): + """ + Change currently blinking identity + :param str pubkey: + """ + self.scene().update_current_identity(pubkey) diff --git a/src/sakia/gui/graphs/wot/view.py b/src/sakia/gui/graphs/wot/view.py index 75b61f644ff53cfceb8a6e5ab879f599388228b5..e4e404604c6c184641d6aa4440548be63e3cd1e2 100644 --- a/src/sakia/gui/graphs/wot/view.py +++ b/src/sakia/gui/graphs/wot/view.py @@ -46,4 +46,4 @@ class WotView(BaseGraphView, Ui_WotWidget): :param path: :return: """ - self.graphicsView.scene().update_path(nx_graph, path) + self.graphics_view.scene().update_path(nx_graph, path) diff --git a/src/sakia/tests/unit/gui/views/__init__.py b/src/sakia/tests/unit/gui/views/__init__.py deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/src/sakia/tests/unit/gui/views/test_base_edge.py b/src/sakia/tests/unit/gui/views/test_base_edge.py deleted file mode 100644 index f05353bd653e425dc05be4f841960b810d3e39f0..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_base_edge.py +++ /dev/null @@ -1,34 +0,0 @@ -import unittest -from PyQt5.QtCore import QLocale -from sakia.tests import QuamashTest -from sakia.gui.views.edges.base_edge import BaseEdge -from sakia.core.graph.constants import EdgeStatus - - -class TestBaseEdge(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_edge(self): - metadata = { - 'status': EdgeStatus.STRONG - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - edge = BaseEdge("A", "B", metadata, nx_pos) - self.assertEqual(edge.source, "A") - self.assertEqual(edge.destination, "B") - self.assertEqual(edge.destination_point.x(), 10) - self.assertEqual(edge.destination_point.y(), 20) - self.assertEqual(edge.source_point.x(), 0) - self.assertEqual(edge.source_point.y(), 5) - self.assertEqual(edge.status, EdgeStatus.STRONG) - - self.lp.run_until_complete(exec_test()) \ No newline at end of file diff --git a/src/sakia/tests/unit/gui/views/test_base_node.py b/src/sakia/tests/unit/gui/views/test_base_node.py deleted file mode 100644 index 3e2016837f242d1235d7658f932158a809e93606..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_base_node.py +++ /dev/null @@ -1,37 +0,0 @@ -import unittest -from PyQt5.QtCore import QLocale -from sakia.tests import QuamashTest -from sakia.gui.views.nodes.base_node import BaseNode -from sakia.core.graph.constants import NodeStatus - - -class TestBaseNode(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_edge(self): - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "UserA", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = BaseNode(("A", metadata), nx_pos) - self.assertEqual(node.id, "A") - self.assertEqual(node.metadata['status'], NodeStatus.NEUTRAL) - self.assertEqual(node.x(), 0) - self.assertEqual(node.y(), 5) - self.assertEqual(node.status_wallet, False) - self.assertEqual(node.status_member, True) - self.assertEqual(node.text, "UserA") - self.assertEqual(node.toolTip(), "UserA - TestTooltip") - - self.lp.run_until_complete(exec_test()) \ No newline at end of file diff --git a/src/sakia/tests/unit/gui/views/test_explorer_edge.py b/src/sakia/tests/unit/gui/views/test_explorer_edge.py deleted file mode 100644 index 5732190cbca2a56b3f0e6cfa14cf4eb520f3ccdd..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_explorer_edge.py +++ /dev/null @@ -1,76 +0,0 @@ -import unittest -from unittest.mock import patch -from PyQt5.QtCore import QLocale -from sakia.tests import QuamashTest -from sakia.gui.views.edges import ExplorerEdge -from sakia.core.graph.constants import EdgeStatus - - -class TestExplorerEdge(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_wot_edge(self): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - edge = ExplorerEdge("A", "B", metadata, nx_pos, 0, 0) - self.assertEqual(edge.source, "A") - self.assertEqual(edge.destination, "B") - self.assertAlmostEqual(edge.destination_point.x(), 10.0, delta=5) - self.assertAlmostEqual(edge.destination_point.y(), 20.0, delta=5) - self.assertAlmostEqual(edge.source_point.x(), 10.0, delta=5) - self.assertAlmostEqual(edge.source_point.y(), 20.0, delta=5) - self.assertEqual(edge.status, EdgeStatus.STRONG) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter') - @patch('PyQt5.QtWidgets.QWidget') - def test_paint(self, painter, widget): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - - async def exec_test(): - edge = ExplorerEdge("A", "B", metadata, nx_pos, 0, 1) - edge.paint(painter, 0, widget) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter') - @patch('PyQt5.QtWidgets.QWidget') - def test_bounding_rect(self, painter, widget): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - - async def exec_test(): - edge = ExplorerEdge("A", "B", metadata, nx_pos, 0, 0) - bounding_rect = edge.boundingRect() - self.assertAlmostEqual(bounding_rect.x(), 7.0, delta=5) - self.assertAlmostEqual(bounding_rect.y(), 17.0, delta=5) - self.assertAlmostEqual(bounding_rect.width(), 6.0, delta=5) - self.assertAlmostEqual(bounding_rect.height(), 6.0, delta=5) - - self.lp.run_until_complete(exec_test()) diff --git a/src/sakia/tests/unit/gui/views/test_explorer_node.py b/src/sakia/tests/unit/gui/views/test_explorer_node.py deleted file mode 100644 index a27c75e1cc1a7724f518af2ee3c0f352e00b7b1a..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_explorer_node.py +++ /dev/null @@ -1,80 +0,0 @@ -import unittest -from unittest.mock import patch -from PyQt5.QtCore import QLocale, QPointF -from PyQt5.QtGui import QPainter -from PyQt5.QtWidgets import QStyleOptionGraphicsItem, QWidget -from sakia.tests import QuamashTest -from sakia.gui.views.nodes import ExplorerNode -from sakia.core.graph.constants import NodeStatus - - -class TestExplorerNode(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_explorer_node(self): - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "UserA", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False) - self.assertEqual(node.id, "A") - self.assertEqual(node.metadata['status'], NodeStatus.NEUTRAL) - self.assertEqual(node.x(), 0) - self.assertEqual(node.y(), 0) - self.assertEqual(node.status_wallet, False) - self.assertEqual(node.status_member, True) - self.assertEqual(node.text, "UserA") - self.assertEqual(node.toolTip(), "UserA - TestTooltip") - - self.lp.run_until_complete(exec_test()) - - def test_paint(self): - painter = QPainter() - widget = QWidget() - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "UserA", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False) - node.paint(painter, QStyleOptionGraphicsItem(), widget) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter', spec=QPainter) - @patch('PyQt5.QtWidgets.QWidget') - def test_bounding_rect(self, painter, widget): - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "A", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = ExplorerNode(("A", metadata), QPointF(0, 0), nx_pos, 0, 1, False) - bounding_rect = node.boundingRect() - self.assertAlmostEqual(bounding_rect.x(), -0.5, delta=15) - self.assertAlmostEqual(bounding_rect.y(), -0.5, delta=15) - self.assertAlmostEqual(bounding_rect.width(), 19.59375, delta=15) - self.assertAlmostEqual(bounding_rect.height(), 37.0, delta=15) - - self.lp.run_until_complete(exec_test()) diff --git a/src/sakia/tests/unit/gui/views/test_explorer_scene.py b/src/sakia/tests/unit/gui/views/test_explorer_scene.py deleted file mode 100644 index 7ba890170be0b25a011347b4d1a7973b3cddd3da..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_explorer_scene.py +++ /dev/null @@ -1,181 +0,0 @@ -import unittest -import networkx -import math -from unittest.mock import patch, Mock -from sakia.tests import QuamashTest -from sakia.gui.views.scenes import ExplorerScene -from sakia.core.graph.constants import NodeStatus - - -class TestExplorerScene(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - self.identities_uids = ['A', 'B', 'C', 'D', 'E'] - self.identities_pubkeys = ['pbkA', 'pbkB', 'pbkC', 'pbkD', 'pbkE'] - self.certifications = [('pbkA', 'pbkB'), - ('pbkB', 'pbkC'), - ('pbkD', 'pbkA'), - ('pbkA', 'pbkE')] - # Graph : - # A -> B -> C - # <- D - # -> E - self.identity_status = [NodeStatus.SELECTED, NodeStatus.NEUTRAL, NodeStatus.NEUTRAL, - NodeStatus.OUT, NodeStatus.NEUTRAL] - self.test_graph = networkx.MultiDiGraph() - self.test_graph.add_nodes_from(self.identities_pubkeys) - self.test_graph.add_edges_from(self.certifications) - for index, node in enumerate(self.test_graph.nodes(data=True)): - node[1]['text'] = self.identities_uids[index] - node[1]['tooltip'] = self.identities_pubkeys[index] - node[1]['status'] = self.identity_status[index] - - def tearDown(self): - self.tearDownQuamash() - - def test_init_layout(self): - data_layout = ExplorerScene._init_layout(self.test_graph) - for pubkey in self.identities_pubkeys: - self.assertEqual(data_layout[pubkey]['theta'], None) - self.assertEqual(data_layout[pubkey]['scenter'], 25) - self.assertEqual(data_layout[pubkey]['nchild'], 0) - self.assertEqual(data_layout[pubkey]['sparent'], None) - self.assertEqual(data_layout[pubkey]['stsize'], 0.0) - self.assertEqual(data_layout[pubkey]['span'], 0.0) - - def test_set_parent_nodes(self): - data_layout = ExplorerScene._init_layout(self.test_graph) - ExplorerScene._set_parent_nodes(self.test_graph, data_layout, 'pbkA') - self.assertEqual(data_layout['pbkA']['scenter'], 0) - self.assertEqual(data_layout['pbkB']['scenter'], 1) - self.assertEqual(data_layout['pbkC']['scenter'], 2) - self.assertEqual(data_layout['pbkD']['scenter'], 1) - self.assertEqual(data_layout['pbkE']['scenter'], 1) - - self.assertEqual(data_layout['pbkA']['sparent'], None) - self.assertEqual(data_layout['pbkB']['sparent'], 'pbkA') - self.assertEqual(data_layout['pbkC']['sparent'], 'pbkB') - self.assertEqual(data_layout['pbkD']['sparent'], 'pbkA') - self.assertEqual(data_layout['pbkE']['scenter'], 1) - - self.assertEqual(data_layout['pbkA']['nchild'], 3) - self.assertEqual(data_layout['pbkB']['nchild'], 1) - self.assertEqual(data_layout['pbkC']['nchild'], 0) - self.assertEqual(data_layout['pbkD']['nchild'], 0) - self.assertEqual(data_layout['pbkE']['nchild'], 0) - - def test_set_subtree_size(self): - data_layout = ExplorerScene._init_layout(self.test_graph) - - data_layout['pbkA']['sparent'] = None - data_layout['pbkB']['sparent'] = 'pbkA' - data_layout['pbkC']['sparent'] = 'pbkB' - data_layout['pbkD']['sparent'] = 'pbkA' - data_layout['pbkE']['sparent'] = 'pbkA' - - data_layout['pbkA']['nchild'] = 2 - data_layout['pbkB']['nchild'] = 1 - data_layout['pbkC']['nchild'] = 0 - data_layout['pbkD']['nchild'] = 0 - data_layout['pbkE']['nchild'] = 0 - - ExplorerScene._set_subtree_size(self.test_graph, data_layout) - self.assertAlmostEqual(data_layout['pbkA']['stsize'], 3.0) - self.assertAlmostEqual(data_layout['pbkB']['stsize'], 1.0) - self.assertAlmostEqual(data_layout['pbkC']['stsize'], 1.0) - self.assertAlmostEqual(data_layout['pbkD']['stsize'], 1.0) - self.assertAlmostEqual(data_layout['pbkE']['stsize'], 1.0) - - def test_set_subtree_span(self): - data_layout = ExplorerScene._init_layout(self.test_graph) - - data_layout['pbkA']['sparent'] = None - data_layout['pbkB']['sparent'] = 'pbkA' - data_layout['pbkC']['sparent'] = 'pbkB' - data_layout['pbkD']['sparent'] = 'pbkA' - data_layout['pbkE']['sparent'] = 'pbkA' - - data_layout['pbkA']['nchild'] = 2 - data_layout['pbkB']['nchild'] = 1 - data_layout['pbkC']['nchild'] = 0 - data_layout['pbkD']['nchild'] = 0 - data_layout['pbkE']['nchild'] = 0 - - data_layout['pbkA']['stsize'] = 3.0 - data_layout['pbkB']['stsize'] = 1.0 - data_layout['pbkC']['stsize'] = 1.0 - data_layout['pbkD']['stsize'] = 1.0 - data_layout['pbkE']['stsize'] = 1.0 - - data_layout['pbkA']['span'] = 2 * math.pi - - ExplorerScene._set_subtree_spans(self.test_graph, data_layout, 'pbkA') - self.assertAlmostEqual(data_layout['pbkA']['span'], 2 * math.pi) - self.assertAlmostEqual(data_layout['pbkB']['span'], 2 / 3 * math.pi) - self.assertAlmostEqual(data_layout['pbkC']['span'], 2 / 3 * math.pi) - self.assertAlmostEqual(data_layout['pbkD']['span'], 2 / 3 * math.pi) - self.assertAlmostEqual(data_layout['pbkE']['span'], 2 / 3 * math.pi) - - @patch('networkx.MultiDiGraph') - def test_set_subtree_position(self, mock_graph): - # We mock the edges generator to ensure the order in which they appear - undirected = Mock('networkx.MultiDiGraph') - undirected.edges = Mock(return_value=self.certifications) - mock_graph.to_undirected = Mock(return_value=undirected) - data_layout = {} - - for pubkey in self.identities_pubkeys: - data_layout[pubkey] = { - 'theta': None - } - - data_layout['pbkA']['sparent'] = None - data_layout['pbkB']['sparent'] = 'pbkA' - data_layout['pbkC']['sparent'] = 'pbkB' - data_layout['pbkD']['sparent'] = 'pbkA' - data_layout['pbkE']['sparent'] = 'pbkA' - - data_layout['pbkA']['nchild'] = 2 - data_layout['pbkB']['nchild'] = 1 - data_layout['pbkC']['nchild'] = 0 - data_layout['pbkD']['nchild'] = 0 - data_layout['pbkE']['nchild'] = 0 - - data_layout['pbkA']['span'] = 2 * math.pi - data_layout['pbkB']['span'] = 2 / 3 * math.pi - data_layout['pbkC']['span'] = 2 / 3 * math.pi - data_layout['pbkD']['span'] = 2 / 3 * math.pi - data_layout['pbkE']['span'] = 2 / 3 * math.pi - - data_layout['pbkA']['theta'] = 0.0 - ExplorerScene._set_positions(mock_graph, data_layout, 'pbkA') - self.assertAlmostEqual(data_layout['pbkA']['theta'], 0.0) - self.assertAlmostEqual(data_layout['pbkB']['theta'], 1 / 3 * math.pi) - self.assertAlmostEqual(data_layout['pbkC']['theta'], 1 / 3 * math.pi) - self.assertAlmostEqual(data_layout['pbkD']['theta'], math.pi) - self.assertAlmostEqual(data_layout['pbkE']['theta'], 5 / 3 * math.pi) - - @patch('networkx.MultiDiGraph') - @patch('networkx.MultiGraph') - @patch('networkx.shortest_path_length', return_value={'pbkA': 0, 'pbkB': 1, 'pbkC': 2, 'pbkD': 1, 'pbkE': 1}) - def test_twopi_layout(self, mock_graph, mock_undirected, mock_paths): - # We mock the edges generator to ensure the order in which they appear - mock_graph.edges = Mock(return_value=self.certifications) - mock_graph.nodes = Mock(return_value=self.identities_pubkeys) - mock_graph.to_undirected = Mock(return_value=mock_undirected) - mock_undirected.nodes = Mock(return_value=self.identities_pubkeys) - mock_undirected.edges = Mock(return_value=self.certifications) - - pos = ExplorerScene.twopi_layout(mock_graph, 'pbkA') - - self.assertAlmostEqual(pos['pbkA'][0], 1 * math.cos(0.0) * 100) - self.assertAlmostEqual(pos['pbkB'][0], 2 * math.cos(1 / 3 * math.pi) * 100) - self.assertAlmostEqual(pos['pbkC'][0], 3 * math.cos(1 / 3 * math.pi) * 100) - self.assertAlmostEqual(pos['pbkD'][0], 2 * math.cos(math.pi) * 100) - self.assertAlmostEqual(pos['pbkE'][0], 2 * math.cos(5 / 3 * math.pi) * 100) - - self.assertAlmostEqual(pos['pbkA'][1], 1 * math.sin(0.0) * 100) - self.assertAlmostEqual(pos['pbkB'][1], 2 * math.sin(1 / 3 * math.pi) * 100) - self.assertAlmostEqual(pos['pbkC'][1], 3 * math.sin(1 / 3 * math.pi) * 100) - self.assertAlmostEqual(pos['pbkD'][1], 2 * math.sin(math.pi) * 100) - self.assertAlmostEqual(pos['pbkE'][1], 2 * math.sin(5 / 3 * math.pi) * 100) \ No newline at end of file diff --git a/src/sakia/tests/unit/gui/views/test_wot_edge.py b/src/sakia/tests/unit/gui/views/test_wot_edge.py deleted file mode 100644 index 6c0632b97e15f9e5eace680549297129cec79ba9..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_wot_edge.py +++ /dev/null @@ -1,76 +0,0 @@ -import unittest -from unittest.mock import patch -from PyQt5.QtCore import QLocale -from sakia.tests import QuamashTest -from sakia.gui.views.edges import WotEdge -from sakia.core.graph.constants import EdgeStatus - - -class TestWotEdge(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_wot_edge(self): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - edge = WotEdge("A", "B", metadata, nx_pos) - self.assertEqual(edge.source, "A") - self.assertEqual(edge.destination, "B") - self.assertEqual(edge.destination_point.x(), 10) - self.assertEqual(edge.destination_point.y(), 20) - self.assertEqual(edge.source_point.x(), 0) - self.assertEqual(edge.source_point.y(), 5) - self.assertEqual(edge.status, EdgeStatus.STRONG) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter') - @patch('PyQt5.QtWidgets.QWidget') - def test_paint(self, painter, widget): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - - async def exec_test(): - edge = WotEdge("A", "B", metadata, nx_pos) - edge.paint(painter, 0, widget) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter') - @patch('PyQt5.QtWidgets.QWidget') - def test_bounding_rect(self, painter, widget): - metadata = { - 'status': EdgeStatus.STRONG, - 'confirmation_text': "0/6" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - - async def exec_test(): - edge = WotEdge("A", "B", metadata, nx_pos) - bounding_rect = edge.boundingRect() - self.assertAlmostEqual(bounding_rect.x(), -3.0, delta=5) - self.assertAlmostEqual(bounding_rect.y(), 2.0, delta=5) - self.assertAlmostEqual(bounding_rect.width(), 16.0, delta=5) - self.assertAlmostEqual(bounding_rect.height(), 21.0, delta=5) - - self.lp.run_until_complete(exec_test()) diff --git a/src/sakia/tests/unit/gui/views/test_wot_node.py b/src/sakia/tests/unit/gui/views/test_wot_node.py deleted file mode 100644 index 9577447d7408b2b06cdc323781bc56919c1e5ff7..0000000000000000000000000000000000000000 --- a/src/sakia/tests/unit/gui/views/test_wot_node.py +++ /dev/null @@ -1,80 +0,0 @@ -import unittest -from unittest.mock import patch -from PyQt5.QtCore import QLocale -from PyQt5.QtGui import QPainter -from PyQt5.QtWidgets import QStyleOptionGraphicsItem, QWidget -from sakia.tests import QuamashTest -from sakia.gui.views.nodes import WotNode -from sakia.core.graph.constants import NodeStatus - - -class TestWotNode(unittest.TestCase, QuamashTest): - def setUp(self): - self.setUpQuamash() - QLocale.setDefault(QLocale("en_GB")) - - def tearDown(self): - self.tearDownQuamash() - - def test_create_wot_node(self): - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "UserA", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = WotNode(("A", metadata), nx_pos) - self.assertEqual(node.id, "A") - self.assertEqual(node.metadata['status'], NodeStatus.NEUTRAL) - self.assertEqual(node.x(), 0) - self.assertEqual(node.y(), 5) - self.assertEqual(node.status_wallet, False) - self.assertEqual(node.status_member, True) - self.assertEqual(node.text, "UserA") - self.assertEqual(node.toolTip(), "UserA - TestTooltip") - - self.lp.run_until_complete(exec_test()) - - def test_paint(self): - painter = QPainter() - widget = QWidget() - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "UserA", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = WotNode(("A", metadata), nx_pos) - node.paint(painter, QStyleOptionGraphicsItem(), widget) - - self.lp.run_until_complete(exec_test()) - - @patch('PyQt5.QtGui.QPainter', spec=QPainter) - @patch('PyQt5.QtWidgets.QWidget') - def test_bounding_rect(self, painter, widget): - metadata = { - 'status': NodeStatus.NEUTRAL, - 'text': "A", - 'tooltip': "TestTooltip" - } - nx_pos = { - "A": (0, 5), - "B": (10, 20) - } - async def exec_test(): - node = WotNode(("A", metadata), nx_pos) - bounding_rect = node.boundingRect() - self.assertAlmostEqual(bounding_rect.x(), -0.5, delta=1) - self.assertAlmostEqual(bounding_rect.y(), -0.5, delta=1) - self.assertAlmostEqual(bounding_rect.width(), 19.59375, delta=15) - self.assertAlmostEqual(bounding_rect.height(), 37.0, delta=15) - - self.lp.run_until_complete(exec_test())