2020-09-29 16:51:20 +02:00
|
|
|
import unittest
|
|
|
|
import time_series_visualizer
|
|
|
|
import matplotlib as mpl
|
|
|
|
|
|
|
|
class DataCleaningTestCase(unittest.TestCase):
|
|
|
|
def test_data_cleaning(self):
|
2020-10-09 07:48:41 +02:00
|
|
|
actual = int(time_series_visualizer.df.count(numeric_only=True))
|
2020-09-29 16:51:20 +02:00
|
|
|
expected = 1238
|
|
|
|
self.assertEqual(actual, expected, "Expected DataFrame count after cleaning to be 1238.")
|
|
|
|
|
|
|
|
class LinePlotTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.fig = time_series_visualizer.draw_line_plot()
|
|
|
|
self.ax = self.fig.axes[0]
|
|
|
|
|
|
|
|
def test_line_plot_title(self):
|
|
|
|
actual = self.ax.get_title()
|
|
|
|
expected = "Daily freeCodeCamp Forum Page Views 5/2016-12/2019"
|
|
|
|
self.assertEqual(actual, expected, "Expected line plot title to be 'Daily freeCodeCamp Forum Page Views 5/2016-12/2019'")
|
|
|
|
|
|
|
|
def test_line_plot_labels(self):
|
|
|
|
actual = self.ax.get_xlabel()
|
|
|
|
expected = "Date"
|
|
|
|
self.assertEqual(actual, expected, "Expected line plot xlabel to be 'Date'")
|
|
|
|
actual = self.ax.get_ylabel()
|
|
|
|
expected = "Page Views"
|
|
|
|
self.assertEqual(actual, expected, "Expected line plot ylabel to be 'Page Views'")
|
|
|
|
|
2021-07-15 02:16:11 +02:00
|
|
|
def test_line_plot_data_quantity(self):
|
2020-09-29 16:51:20 +02:00
|
|
|
actual = len(self.ax.lines[0].get_ydata())
|
|
|
|
expected = 1238
|
|
|
|
self.assertEqual(actual, expected, "Expected number of data points in line plot to be 1238.")
|
|
|
|
|
|
|
|
|
|
|
|
class BarPlotTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.fig = time_series_visualizer.draw_bar_plot()
|
|
|
|
self.ax = self.fig.axes[0]
|
|
|
|
|
|
|
|
def test_bar_plot_legend_labels(self):
|
|
|
|
actual = []
|
|
|
|
for label in self.ax.get_legend().get_texts():
|
|
|
|
actual.append(label.get_text())
|
|
|
|
expected = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
|
|
|
|
self.assertEqual(actual, expected, "Expected bar plot legend labels to be months of the year.")
|
|
|
|
|
|
|
|
def test_bar_plot_labels(self):
|
|
|
|
actual = self.ax.get_xlabel()
|
|
|
|
expected = "Years"
|
|
|
|
self.assertEqual(actual, expected, "Expected bar plot xlabel to be 'Years'")
|
|
|
|
actual = self.ax.get_ylabel()
|
|
|
|
expected = "Average Page Views"
|
|
|
|
self.assertEqual(actual, expected, "Expected bar plot ylabel to be 'Average Page Views'")
|
|
|
|
actual = []
|
|
|
|
for label in self.ax.get_xaxis().get_majorticklabels():
|
|
|
|
actual.append(label.get_text())
|
|
|
|
expected = ['2016', '2017', '2018', '2019']
|
|
|
|
self.assertEqual(actual, expected, "Expected bar plot secondary labels to be '2016', '2017', '2018', '2019'")
|
|
|
|
|
|
|
|
def test_bar_plot_number_of_bars(self):
|
|
|
|
actual = len([rect for rect in self.ax.get_children() if isinstance(rect, mpl.patches.Rectangle)])
|
|
|
|
expected = 49
|
|
|
|
self.assertEqual(actual, expected, "Expected a different number of bars in bar chart.")
|
|
|
|
|
|
|
|
|
|
|
|
class BoxPlotTestCase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
self.fig = time_series_visualizer.draw_box_plot()
|
|
|
|
self.ax1 = self.fig.axes[0]
|
|
|
|
self.ax2 = self.fig.axes[1]
|
|
|
|
|
|
|
|
def test_box_plot_number(self):
|
|
|
|
actual = len(self.fig.get_axes())
|
|
|
|
expected = 2
|
|
|
|
self.assertEqual(actual, expected, "Expected two box plots in figure.")
|
|
|
|
|
|
|
|
def test_box_plot_labels(self):
|
|
|
|
actual = self.ax1.get_xlabel()
|
|
|
|
expected = "Year"
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 1 xlabel to be 'Year'")
|
|
|
|
actual = self.ax1.get_ylabel()
|
|
|
|
expected = "Page Views"
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 1 ylabel to be 'Page Views'")
|
|
|
|
actual = self.ax2.get_xlabel()
|
|
|
|
expected = "Month"
|
2022-08-23 21:15:44 +02:00
|
|
|
self.assertEqual(actual, expected, "Expected box plot 2 xlabel to be 'Month'")
|
2020-09-29 16:51:20 +02:00
|
|
|
actual = self.ax2.get_ylabel()
|
|
|
|
expected = "Page Views"
|
2022-08-23 21:15:44 +02:00
|
|
|
self.assertEqual(actual, expected, "Expected box plot 2 ylabel to be 'Page Views'")
|
2020-09-29 16:51:20 +02:00
|
|
|
actual = []
|
|
|
|
for label in self.ax1.get_xaxis().get_majorticklabels():
|
|
|
|
actual.append(label.get_text())
|
|
|
|
expected = ['2016', '2017', '2018', '2019']
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 1 secondary labels to be '2016', '2017', '2018', '2019'")
|
|
|
|
actual = []
|
|
|
|
for label in self.ax2.get_xaxis().get_majorticklabels():
|
|
|
|
actual.append(label.get_text())
|
|
|
|
expected = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 2 secondary labels to be 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'")
|
|
|
|
actual = []
|
|
|
|
for label in self.ax1.get_yaxis().get_majorticklabels():
|
|
|
|
actual.append(label.get_text())
|
|
|
|
expected = ['0', '20000', '40000', '60000', '80000', '100000', '120000', '140000', '160000', '180000', '200000']
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 1 secondary labels to be '0', '20000', '40000', '60000', '80000', '100000', '120000', '140000', '160000', '180000', '200000'")
|
|
|
|
|
|
|
|
def test_box_plot_titles(self):
|
|
|
|
actual = self.ax1.get_title()
|
|
|
|
expected = "Year-wise Box Plot (Trend)"
|
|
|
|
self.assertEqual(actual, expected, "Expected box plot 1 title to be 'Year-wise Box Plot (Trend)'")
|
|
|
|
actual = self.ax2.get_title()
|
|
|
|
expected = "Month-wise Box Plot (Seasonality)"
|
2022-08-23 21:15:44 +02:00
|
|
|
self.assertEqual(actual, expected, "Expected box plot 2 title to be 'Month-wise Box Plot (Seasonality)'")
|
2020-09-29 16:51:20 +02:00
|
|
|
|
2021-07-15 02:16:11 +02:00
|
|
|
def test_box_plot_number_of_boxes(self):
|
2020-09-29 16:51:20 +02:00
|
|
|
actual = len(self.ax1.lines) / 6 # Every box has 6 lines
|
|
|
|
expected = 4
|
|
|
|
self.assertEqual(actual, expected, "Expected four boxes in box plot 1")
|
|
|
|
actual = len(self.ax2.lines) / 6 # Every box has 6 lines
|
|
|
|
expected = 12
|
|
|
|
self.assertEqual(actual, expected, "Expected 12 boxes in box plot 2")
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
unittest.main()
|