Skip to content

Commit

Permalink
feat: add tests for newly added charts
Browse files Browse the repository at this point in the history
  • Loading branch information
wu-vincent committed Dec 3, 2024
1 parent 929312b commit 8a857e6
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 5 deletions.
4 changes: 1 addition & 3 deletions src/endstone_bstats/_charts/simple_bar_chart.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

class SimpleBarChart(CustomChart):
def __init__(
self, chart_id: str, get_values: Callable[[], Dict[str, int] | None]
self, chart_id: str, get_values: Callable[[], Dict[str, int] | None]
) -> None:
"""
Class constructor.
Expand All @@ -31,7 +31,5 @@ def get_chart_data(self) -> dict | None:
return None

values = {key: [value] for key, value in map_values.items()}
if not values:
return None

return {"values": values}
53 changes: 53 additions & 0 deletions tests/test_advanced_bar_chart.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from unittest.mock import Mock

from endstone_bstats._charts.advanced_bar_chart import AdvancedBarChart


def test_get_chart_data_none():
"""Test that get_chart_data returns None when the callable returns None."""
callable_mock = Mock(return_value=None)
advanced_bar_chart = AdvancedBarChart("chart_id", callable_mock)

result = advanced_bar_chart.get_chart_data()
assert result is None


def test_get_chart_data_empty():
"""Test that get_chart_data returns None when the callable returns an empty dictionary."""
callable_mock = Mock(return_value={})
advanced_bar_chart = AdvancedBarChart("chart_id", callable_mock)

result = advanced_bar_chart.get_chart_data()
assert result is None


def test_get_chart_data_valid():
"""Test that get_chart_data processes and returns valid data correctly."""
data = {"Bar A": [10, 20], "Bar B": [15, 25], "Bar C": [30]}
callable_mock = Mock(return_value=data)
advanced_bar_chart = AdvancedBarChart("chart_id", callable_mock)

result = advanced_bar_chart.get_chart_data()
expected_result = {"values": {"Bar A": [10, 20], "Bar B": [15, 25], "Bar C": [30]}}
assert result == expected_result


def test_get_chart_data_some_empty_values():
"""Test that get_chart_data omits bars with empty lists."""
data = {"Bar A": [10, 20], "Bar B": [], "Bar C": [30]}
callable_mock = Mock(return_value=data)
advanced_bar_chart = AdvancedBarChart("chart_id", callable_mock)

result = advanced_bar_chart.get_chart_data()
expected_result = {"values": {"Bar A": [10, 20], "Bar C": [30]}}
assert result == expected_result


def test_get_chart_data_all_empty_values():
"""Test that get_chart_data returns None when all bars in the callable result have empty lists."""
data = {"Bar A": [], "Bar B": [], "Bar C": []}
callable_mock = Mock(return_value=data)
advanced_bar_chart = AdvancedBarChart("chart_id", callable_mock)

result = advanced_bar_chart.get_chart_data()
assert result is None
2 changes: 0 additions & 2 deletions tests/test_metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ def test_append_platform_data(
):
platform_data = {}

mocker.patch("os.cpu_count", return_value=4)
mocker.patch("platform.system", return_value=os_name)
mocker.patch("platform.release", return_value=release)
mocker.patch("platform.version", return_value=version)
Expand All @@ -70,7 +69,6 @@ def test_append_platform_data(
assert platform_data["osName"] == os_name_expected
assert platform_data["osVersion"] == os_version_expected
assert platform_data["osArch"] == "amd64"
assert platform_data["coreCount"] == 4


def test_append_service_data(metrics, plugin):
Expand Down
53 changes: 53 additions & 0 deletions tests/test_multi_line_chart.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
from unittest.mock import Mock

from endstone_bstats._charts.multi_line_chart import MultiLineChart


def test_get_chart_data_none():
"""Test that get_chart_data returns None when the callable returns None."""
callable_mock = Mock(return_value=None)
multi_line_chart = MultiLineChart("chart_id", callable_mock)

result = multi_line_chart.get_chart_data()
assert result is None


def test_get_chart_data_empty():
"""Test that get_chart_data returns None when the callable returns an empty dictionary."""
callable_mock = Mock(return_value={})
multi_line_chart = MultiLineChart("chart_id", callable_mock)

result = multi_line_chart.get_chart_data()
assert result is None


def test_get_chart_data_valid():
"""Test that get_chart_data processes and returns valid data correctly."""
data = {"Line A": 10, "Line B": 20, "Line C": 30}
callable_mock = Mock(return_value=data)
multi_line_chart = MultiLineChart("chart_id", callable_mock)

result = multi_line_chart.get_chart_data()
expected_result = {"values": {"Line A": 10, "Line B": 20, "Line C": 30}}
assert result == expected_result


def test_get_chart_data_some_zero_values():
"""Test that get_chart_data omits keys with zero values."""
data = {"Line A": 10, "Line B": 0, "Line C": 30}
callable_mock = Mock(return_value=data)
multi_line_chart = MultiLineChart("chart_id", callable_mock)

result = multi_line_chart.get_chart_data()
expected_result = {"values": {"Line A": 10, "Line C": 30}}
assert result == expected_result


def test_get_chart_data_all_zero_values():
"""Test that get_chart_data returns None when all values in the callable result are zero."""
data = {"Line A": 0, "Line B": 0, "Line C": 0}
callable_mock = Mock(return_value=data)
multi_line_chart = MultiLineChart("chart_id", callable_mock)

result = multi_line_chart.get_chart_data()
assert result is None
54 changes: 54 additions & 0 deletions tests/test_simple_bar_chart.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
from unittest.mock import Mock

from endstone_bstats._charts.simple_bar_chart import SimpleBarChart


def test_get_chart_data_none():
"""Test that get_chart_data returns None when the callable returns None."""
callable_mock = Mock(return_value=None)
simple_bar_chart = SimpleBarChart("chart_id", callable_mock)

result = simple_bar_chart.get_chart_data()
assert result is None


def test_get_chart_data_empty():
"""Test that get_chart_data returns None when the callable returns an empty dictionary."""
callable_mock = Mock(return_value={})
simple_bar_chart = SimpleBarChart("chart_id", callable_mock)

result = simple_bar_chart.get_chart_data()
assert result is None


def test_get_chart_data_valid():
"""Test that get_chart_data processes and returns valid data correctly."""
data = {"Bar A": 10, "Bar B": 20, "Bar C": 30}
callable_mock = Mock(return_value=data)
simple_bar_chart = SimpleBarChart("chart_id", callable_mock)

result = simple_bar_chart.get_chart_data()
expected_result = {"values": {"Bar A": [10], "Bar B": [20], "Bar C": [30]}}
assert result == expected_result


def test_get_chart_data_some_zero_values():
"""Test that get_chart_data includes zero values wrapped in a list."""
data = {"Bar A": 10, "Bar B": 0, "Bar C": 30}
callable_mock = Mock(return_value=data)
simple_bar_chart = SimpleBarChart("chart_id", callable_mock)

result = simple_bar_chart.get_chart_data()
expected_result = {"values": {"Bar A": [10], "Bar B": [0], "Bar C": [30]}}
assert result == expected_result


def test_get_chart_data_all_zero_values():
"""Test that get_chart_data includes bars with zero values wrapped in a list."""
data = {"Bar A": 0, "Bar B": 0, "Bar C": 0}
callable_mock = Mock(return_value=data)
simple_bar_chart = SimpleBarChart("chart_id", callable_mock)

result = simple_bar_chart.get_chart_data()
expected_result = {"values": {"Bar A": [0], "Bar B": [0], "Bar C": [0]}}
assert result == expected_result

0 comments on commit 8a857e6

Please sign in to comment.