Files
MusicPlayer/tests/unit/test_settings.gd
T
Sansan 4a275e6a88 Add GdUnit4 testing framework with comprehensive test coverage
- Add GdUnit4 v6.2.1 framework in addons/gdUnit4/
- Create test directory structure (tests/unit/, tests/integration/, tests/mocks/)
- Add unit tests for MusicPlayer.gd (8 tests)
- Add unit tests for MainWindow.gd (15+ tests)
- Add unit tests for Settings.gd (5 tests)
- Add unit tests for Playlist.gd (11 tests)
- Add integration tests for full flow (10+ tests)
- Add MockHTTPRequest for HTTP request mocking
- Add TestHelpers with utility functions
- Add Gitea Actions CI workflow (.gitea/workflows/test.yml)
- Add .runsettings for GdUnit4 CLI configuration
- Add run_tests.sh for convenient test execution
- Add TESTING.md with comprehensive documentation
- Add TESTING_PLAN.md with implementation details
- Update .gitignore for test artifacts
- Enable GdUnit4 plugin in project.godot

Features:
- Test button functionality (play, pause, search, sync, etc.)
- Mock REST API requests to server
- Test complete application flows
- Run tests in CI (headless mode)
- Run tests in GUI for visual feedback
- JUnit XML and HTML test reports

Generated by OpenCode AI assistant.
2026-10-01 20:55:09 +02:00

95 lines
2.2 KiB
GDScript

class_name SettingsTest
extends GdUnitTestSuite
func test_make_request2_calls_callback_on_success():
var callback_called = false
var received_data = null
var callback = func(data):
callback_called = true
received_data = data
# Mock the HTTP request behavior
var original_make_request = Settings.make_request2
Settings.make_request2 = func(address: String, func_name: Callable, expect_data: bool) -> void:
if expect_data:
func_name.call([{"SongNo": 1, "Soundtrack": "Test", "Song": "Test Song"}])
else:
func_name.call()
Settings.make_request2("/music/list", callback, true)
assert_true(callback_called)
assert_eq(received_data[0].SongNo, 1)
# Restore original
Settings.make_request2 = original_make_request
func test_make_request2_handles_error_response():
var error_called = false
var callback = func(data):
# This shouldn't be called for error responses
pass
# Mock error response
var original_make_request = Settings.make_request2
Settings.make_request2 = func(address: String, func_name: Callable, expect_data: bool) -> void:
# Simulate error by not calling the callback
pass
Settings.make_request2("/music/error", callback, true)
# Restore and verify callback wasn't called with data
Settings.make_request2 = original_make_request
assert_false(error_called)
func test_make_request3_does_not_expect_data():
var callback_called = false
var callback = func():
callback_called = true
var original_make_request = Settings.make_request3
Settings.make_request3 = func(address: String) -> void:
callback.call()
Settings.make_request3("/music/reset")
assert_true(callback_called)
Settings.make_request3 = original_make_request
func test_delete_children_removes_all():
var node = Node.new()
var child1 = Node.new()
var child2 = Node.new()
node.add_child(child1)
node.add_child(child2)
assert_eq(node.get_child_count(), 2)
Settings.delete_children(node)
assert_eq(node.get_child_count(), 0)
func test_delete_player_children_removes_all():
var node = Node.new()
var player1 = Player.new()
var player2 = Player.new()
node.add_child(player1)
node.add_child(player2)
assert_eq(node.get_child_count(), 2)
Settings.delete_player_children(node)
assert_eq(node.get_child_count(), 0)