test_plotter.py
1 # Python Imports 2 import unittest 3 from unittest.mock import MagicMock, patch 4 5 import pandas as pd 6 7 # Project Imports 8 from src.plotting.metrics_plotter import MetricsPlotter 9 10 11 class TestPlotter(unittest.TestCase): 12 13 def test_create_plots(self): 14 config = {"plot1": {}, "plot2": {}} 15 plotter = MetricsPlotter(config) 16 17 plotter._create_plot = MagicMock() 18 plotter.create_plots() 19 self.assertEqual(plotter._create_plot.call_count, 2) 20 21 def test__create_plot(self): 22 plotter = MetricsPlotter({}) 23 plotter._create_subplot_paths_group = MagicMock() 24 plotter._insert_data_in_axs = MagicMock() 25 plotter._save_plot = MagicMock() 26 27 plotter._create_plot("", {"data": [0]}) 28 self.assertEqual(plotter._create_subplot_paths_group.call_count, 1) 29 self.assertEqual(plotter._insert_data_in_axs.call_count, 1) 30 self.assertEqual(plotter._save_plot.call_count, 1) 31 32 @patch("src.plotting.plotter.DataFileHandler.add_dataframes_from_folders_as_mean") 33 @patch("src.plotting.plotter.DataHandler.prepare_dataframe_for_boxplot") 34 def test__insert_data_in_axs(self, mock_data_file_handler, mock_data_handler): 35 plotter = MetricsPlotter({}) 36 plotter._add_subplot_df_to_axs = MagicMock() 37 plotter._insert_data_in_axs([["path1"], ["path2"]], [0], {"data": ["data1"]}) 38 39 self.assertEqual(mock_data_file_handler.call_count, 2) 40 self.assertEqual(mock_data_handler.call_count, 2) 41 self.assertEqual(plotter._add_subplot_df_to_axs.call_count, 2) 42 43 def test__save_plot(self): 44 plotter = MetricsPlotter({}) 45 with patch("matplotlib.pyplot.tight_layout") as mock_tight_layout: 46 with patch("matplotlib.pyplot.savefig") as mock_savefig: 47 with patch("matplotlib.pyplot.show") as mock_show: 48 plotter._save_plot("plot_name") 49 self.assertEqual(mock_tight_layout.call_count, 1) 50 self.assertEqual(mock_savefig.call_count, 1) 51 self.assertEqual(mock_show.call_count, 1) 52 53 def test__add_subplot_df_to_axs(self): 54 plotter = MetricsPlotter({}) 55 56 with patch("seaborn.boxplot") as mock_boxplot: 57 with patch("src.plotting.plotter.Plotter._add_median_labels") as mock_add_median_labels: 58 mock_boxplot.return_value = MagicMock() 59 plotter._add_subplot_df_to_axs( 60 pd.DataFrame(), 61 0, 62 [0], 63 {"data": ["data1"], "xlabel_name": "test", "ylabel_name": "test", "scale-x": 1}, 64 ) 65 self.assertEqual(mock_boxplot.return_value.set.call_count, 1) 66 self.assertEqual(mock_boxplot.return_value.yaxis.set_major_formatter.call_count, 1) 67 self.assertEqual(mock_boxplot.return_value.set_title.call_count, 1) 68 self.assertEqual(mock_boxplot.return_value.tick_params.call_count, 1) 69 self.assertEqual(mock_boxplot.return_value.xaxis.set_tick_params.call_count, 1) 70 self.assertEqual(mock_add_median_labels.call_count, 1) 71 72 def test_create_subplot_paths_group(self): 73 plotter = MetricsPlotter({}) 74 plot_specs = { 75 "folder": ["test/nwaku/", "test/nwaku0.26/"], 76 "data": ["libp2p-in", "libp2p-out"], 77 } 78 79 result = plotter._create_subplot_paths_group(plot_specs) 80 expected = [ 81 ["test/nwaku/libp2p-in", "test/nwaku0.26/libp2p-in"], 82 ["test/nwaku/libp2p-out", "test/nwaku0.26/libp2p-out"], 83 ] 84 85 self.assertEqual(result, expected)