/ src / analysis / plotting / tests / test_plotter.py
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)