Skip to content

Commit

Permalink
✅ Update test cases for SignalRGBClient and CLI
Browse files Browse the repository at this point in the history
Modify tests to reflect recent changes in models and API responses

- Update EffectPreset model usage in test_get_effect_presets
- Remove 'name' field from EffectPreset assertions
- Add 'id' field to EffectPresetList in mock response
- Update CLI command paths in test cases
- Adjust assertions for new CLI output format
  • Loading branch information
hyperb1iss committed Aug 20, 2024
1 parent 54186f6 commit 76851de
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 38 deletions.
151 changes: 118 additions & 33 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from unittest.mock import patch
from signalrgb.cli import app
from signalrgb.client import SignalRGBException
from signalrgb.model import Effect, Attributes, Links
from signalrgb.model import Effect, Attributes, EffectPreset, Links


@pytest.fixture
Expand Down Expand Up @@ -34,11 +34,12 @@ def test_list_effects(runner, mock_client):
]
mock_client.return_value.get_effects.return_value = mock_effects

result = runner.invoke(app, ["list-effects"])
result = runner.invoke(app, ["effect", "list"])
assert result.exit_code == 0
assert "Effect 1" in result.output
assert "Effect 2" in result.output
assert "Total effects: 2" in result.output
assert "effect1" in result.output
assert "effect2" in result.output


def test_get_effect(runner, mock_client):
Expand All @@ -58,14 +59,17 @@ def test_get_effect(runner, mock_client):
links=Links(apply="/api/v1/effects/effect1/apply"),
)
mock_client.return_value.get_effect_by_name.return_value = mock_effect
mock_client.return_value.get_current_effect.return_value = mock_effect

result = runner.invoke(app, ["get-effect", "Test Effect"])
result = runner.invoke(app, ["effect"])
assert result.exit_code == 0
assert "Test Effect" in result.output
assert "Test Publisher" in result.output
assert "Test Description" in result.output
assert "param1" in result.output
assert "value1" in result.output
assert "Uses Audio: ✅" in result.output
assert "Uses Video: ❌" in result.output
assert "Uses Input: ✅" in result.output
assert "Uses Meters: ❌" in result.output


def test_current_effect(runner, mock_client):
Expand All @@ -76,7 +80,6 @@ def test_current_effect(runner, mock_client):
name="Current Effect",
publisher="Test Publisher",
description="Test Description",
image="test_image.png",
uses_audio=True,
uses_video=False,
uses_input=True,
Expand All @@ -87,98 +90,180 @@ def test_current_effect(runner, mock_client):

# Configure the mock to return the actual Effect object
mock_client.return_value.get_current_effect.return_value = mock_effect
mock_client.return_value.current_effect = mock_effect

result = runner.invoke(app, ["current-effect"])
result = runner.invoke(app, ["effect"])
assert result.exit_code == 0
assert "Current Effect" in result.output
assert "effect1" in result.output
assert "Test Publisher" in result.output
assert "Test Description" in result.output
assert "test_image.png" in result.output
assert "Uses Audio: True" in result.output
assert "Uses Video: False" in result.output
assert "Uses Input: True" in result.output
assert "Uses Meters: False" in result.output
assert "Uses Audio: ✅" in result.output
assert "Uses Video: ❌" in result.output
assert "Uses Input: ✅" in result.output
assert "Uses Meters: ❌" in result.output


def test_apply_effect(runner, mock_client):
result = runner.invoke(app, ["apply-effect", "Test Effect"])
result = runner.invoke(app, ["effect", "apply", "Test Effect"])
assert result.exit_code == 0
assert "Successfully applied effect: Test Effect" in result.output
assert "Applied effect: Test Effect" in result.output


def test_search_effects(runner, mock_client):
mock_effects = [
Effect(
id="effect1",
type="lighting",
attributes=Attributes(name="Test Effect 1"),
attributes=Attributes(name="Test Effect 1", description="Description 1"),
links=Links(),
),
Effect(
id="effect2",
type="lighting",
attributes=Attributes(name="Test Effect 2"),
attributes=Attributes(name="Test Effect 2", description="Description 2"),
links=Links(),
),
Effect(
id="effect3",
type="lighting",
attributes=Attributes(name="Another Effect"),
attributes=Attributes(name="Another Effect", description="Description 3"),
links=Links(),
),
]
mock_client.return_value.get_effects.return_value = mock_effects

result = runner.invoke(app, ["search-effects", "Test"])
result = runner.invoke(app, ["effect", "search", "Test"])
assert result.exit_code == 0
assert "Test Effect 1" in result.output
assert "Test Effect 2" in result.output
assert "Another Effect" not in result.output
assert "Found 2 matching effects" in result.output
assert "Description 1" in result.output
assert "Description 2" in result.output


def test_brightness(runner, mock_client):
mock_client.return_value.brightness = 50

result = runner.invoke(app, ["brightness", "50"])
result = runner.invoke(app, ["canvas", "brightness", "50"])
assert result.exit_code == 0
assert "Brightness set to: 50" in result.output
assert "Set brightness to: 50%" in result.output

result = runner.invoke(app, ["brightness"])
result = runner.invoke(app, ["canvas", "brightness"])
assert result.exit_code == 0
assert "Current brightness: 50" in result.output
assert "Current brightness: 50%" in result.output


def test_enable(runner, mock_client):
mock_client.return_value.enabled = True

result = runner.invoke(app, ["enable"])
result = runner.invoke(app, ["canvas", "enable"])
assert result.exit_code == 0
assert "Canvas enabled successfully" in result.output
assert "Canvas ✅ enabled" in result.output


def test_disable(runner, mock_client):
mock_client.return_value.enabled = False

result = runner.invoke(app, ["disable"])
result = runner.invoke(app, ["canvas", "disable"])
assert result.exit_code == 0
assert "Canvas disabled successfully" in result.output
assert "Canvas ❌ disabled" in result.output


def test_error_handling(runner, mock_client):
mock_client.return_value.get_effects.side_effect = SignalRGBException("Test error")

result = runner.invoke(app, ["list-effects"])
result = runner.invoke(app, ["effect", "list"])
assert result.exit_code == 1
assert "Error: Test error" in result.output


def test_version(runner):
result = runner.invoke(app, ["--version"])
def test_main_callback(runner, mock_client):
result = runner.invoke(app, ["--help"])
assert result.exit_code == 0
assert "SignalRGB CLI" in result.output


# Additional tests for new features


def test_next_effect(runner, mock_client):
mock_effect = Effect(
id="next_effect",
type="lighting",
attributes=Attributes(name="Next Effect"),
links=Links(),
)
mock_client.return_value.apply_next_effect.return_value = mock_effect

result = runner.invoke(app, ["effect", "next"])
assert result.exit_code == 0
assert "Applied next effect: Next Effect" in result.output


def test_previous_effect(runner, mock_client):
mock_effect = Effect(
id="previous_effect",
type="lighting",
attributes=Attributes(name="Previous Effect"),
links=Links(),
)
mock_client.return_value.apply_previous_effect.return_value = mock_effect

result = runner.invoke(app, ["effect", "previous"])
assert result.exit_code == 0
assert "Applied previous effect: Previous Effect" in result.output


def test_random_effect(runner, mock_client):
mock_effect = Effect(
id="random_effect",
type="lighting",
attributes=Attributes(name="Random Effect"),
links=Links(),
)
mock_client.return_value.apply_random_effect.return_value = mock_effect

result = runner.invoke(app, ["effect", "random"])
assert result.exit_code == 0
assert "Applied random effect: Random Effect" in result.output


def test_refresh_effects(runner, mock_client):
result = runner.invoke(app, ["effect", "refresh"])
assert result.exit_code == 0
assert "Effects cache refreshed" in result.output


def test_list_presets(runner, mock_client):
mock_presets = [
EffectPreset(id="preset1", type="preset"),
EffectPreset(id="preset2", type="preset"),
]
mock_client.return_value.get_current_effect.return_value = Effect(
id="current_effect",
type="lighting",
attributes=Attributes(name="Current Effect"),
links=Links(),
)
mock_client.return_value.get_effect_presets.return_value = mock_presets

result = runner.invoke(app, ["preset", "list"])
assert result.exit_code == 0
assert "preset1" in result.output
assert "preset2" in result.output


def test_apply_preset(runner, mock_client):
mock_client.return_value.get_current_effect.return_value = Effect(
id="current_effect",
type="lighting",
attributes=Attributes(name="Current Effect"),
links=Links(),
)

result = runner.invoke(app, ["preset", "apply", "preset1"])
assert result.exit_code == 0
assert "SignalRGB CLI version:" in result.output
assert "Applied preset 'preset1' to effect 'Current Effect'" in result.output


# Add more tests as needed
10 changes: 5 additions & 5 deletions tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -738,15 +738,15 @@ def test_get_effect_presets(self, mock_request):
"""Test getting presets for a specific effect."""
mock_response = Mock()
presets = [
EffectPreset(id="preset1", type="preset", name="Preset 1"),
EffectPreset(id="preset2", type="preset", name="Preset 2"),
EffectPreset(id="preset1", type="preset"),
EffectPreset(id="preset2", type="preset"),
]
response = EffectPresetListResponse(
api_version="1.0",
id=1,
method="GET",
status="ok",
data=EffectPresetList(items=presets),
data=EffectPresetList(id="effect1", items=presets),
)
mock_response.json.return_value = response.to_dict()
mock_request.return_value = mock_response
Expand All @@ -755,8 +755,8 @@ def test_get_effect_presets(self, mock_request):
self.assertEqual(len(result), 2)
self.assertEqual(result[0].id, "preset1")
self.assertEqual(result[1].id, "preset2")
self.assertEqual(result[0].name, "Preset 1")
self.assertEqual(result[1].name, "Preset 2")
self.assertEqual(result[0].type, "preset")
self.assertEqual(result[1].type, "preset")

@patch("requests.Session.request")
def test_apply_effect_preset(self, mock_request):
Expand Down

0 comments on commit 76851de

Please sign in to comment.