Files
semantica/tests/visualization/test_visualization.py
T
Luan Taraschi c5d382ee81 test(visualization): isolate optional dependency mocks (#897)
* test(visualization): isolate optional dependency mocks

* test(visualization): stop requiring Plotly in unit tests

Removing the global sys.modules stubs left the tests that patch
`...go.Bar`, or call a visualizer, with nothing standing in for the
module level `px` and `go` aliases. Those are None when Plotly is
missing, so patch resolution and _check_dependencies() both failed.

Add a helper that substitutes a double only for the aliases that are
None, leaving the real module in place when Plotly is installed.

---------
2026-08-20 17:58:20 +05:00

68 lines
3.0 KiB
Python

import unittest
from unittest.mock import MagicMock, patch
from semantica.visualization.kg_visualizer import KGVisualizer
from semantica.visualization.ontology_visualizer import OntologyVisualizer
from semantica.visualization.utils.color_schemes import ColorScheme
class TestVisualization(unittest.TestCase):
def setUp(self):
self.mock_logger = MagicMock()
self.mock_tracker = MagicMock()
self.logger_patcher = patch('semantica.visualization.kg_visualizer.get_logger', return_value=self.mock_logger)
self.tracker_patcher = patch('semantica.visualization.kg_visualizer.get_progress_tracker', return_value=self.mock_tracker)
self.logger_patcher_ov = patch('semantica.visualization.ontology_visualizer.get_logger', return_value=self.mock_logger)
self.tracker_patcher_ov = patch('semantica.visualization.ontology_visualizer.get_progress_tracker', return_value=self.mock_tracker)
self.logger_patcher.start()
self.tracker_patcher.start()
self.logger_patcher_ov.start()
self.tracker_patcher_ov.start()
def tearDown(self):
self.logger_patcher.stop()
self.tracker_patcher.stop()
self.logger_patcher_ov.stop()
self.tracker_patcher_ov.stop()
def test_kg_visualizer_initialization(self):
viz = KGVisualizer(layout="force", color_scheme="default")
self.assertIsInstance(viz, KGVisualizer)
self.assertEqual(viz.layout_type, "force")
self.assertEqual(viz.color_scheme, ColorScheme.DEFAULT)
def test_ontology_visualizer_initialization(self):
viz = OntologyVisualizer(color_scheme="default")
self.assertIsInstance(viz, OntologyVisualizer)
self.assertEqual(viz.color_scheme, ColorScheme.DEFAULT)
@patch('semantica.visualization.kg_visualizer.ForceDirectedLayout')
@patch('semantica.visualization.kg_visualizer.HierarchicalLayout')
@patch('semantica.visualization.kg_visualizer.CircularLayout')
def test_kg_visualizer_layouts_init(self, mock_circ, mock_hier, mock_force):
viz = KGVisualizer()
mock_force.assert_called()
mock_hier.assert_called()
mock_circ.assert_called()
# We can add more specific tests if we know the methods.
# Since we mocked the heavy libraries, we can try calling visualize methods
# provided we mock the internal data processing or if they handle empty data gracefully.
def test_kg_visualizer_methods_existence(self):
viz = KGVisualizer()
self.assertTrue(hasattr(viz, 'visualize_network'))
# Add other methods based on file reading:
# visualize_communities, visualize_centrality, visualize_entity_types, visualize_relationship_matrix
def test_ontology_visualizer_methods_existence(self):
viz = OntologyVisualizer()
self.assertTrue(hasattr(viz, 'visualize_hierarchy'))
# visualize_properties, visualize_structure, visualize_class_property_matrix, visualize_metrics, visualize_semantic_model
if __name__ == '__main__':
unittest.main()