- 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.
95 lines
2.2 KiB
GDScript
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)
|