Files
MusicPlayer/tests/integration/test_settings_popup.gd
SansanandClaude Opus 5.5 a735c515bf
Build / test (push) Successful in 1m40s
Build / build (push) Successful in 1m28s
Add Short songs and a choice of how random songs are picked (#30, #51)
Short songs (#30): a quiz settings switch and a Seconds per song row (30 by
default, 10-120 in steps of 5), saved with the quiz settings. Only part of
each quiz song plays, from a random point 10-60% into it, picked once per song
so restart and repeat play the same part. The progress bar, time and seeking
stay within the part, a hidden beginning counts inside it, and its end counts
as the song ending (repeat, stop or go to the next song as set).

Random songs (#51): the low-played switch in Settings is now a Normal / Low
played / Classic choice, stored as Settings.random_mode and not saved.
fetch_random_song(mode) picks /music/rand, /music/rand/low or
/music/rand/classic.

Closes #30
Closes #51

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 21:21:20 +02:00

88 lines
2.9 KiB
GDScript

extends MainWindowTestSuite
## The statistics settings in the application Settings popup.
var _popup: SettingsPopup
func before_test() -> void:
await super()
_popup = _window.get_node("SettingsPopup")
func test_random_songs_choice_lists_the_three_modes() -> void:
var names: Array[String] = []
for index: int in _popup.random_mode_button.item_count:
names.append(_popup.random_mode_button.get_item_text(index))
assert_array(names).contains_exactly(["Normal", "Low played", "Classic"])
@warning_ignore("unused_parameter")
func test_random_songs_choice_changes_the_setting(mode: Settings.RandomMode,
test_parameters: Array = [[Settings.RandomMode.LOW_PLAYED],
[Settings.RandomMode.CLASSIC], [Settings.RandomMode.NORMAL]]) -> void:
_popup.open()
await _runner.simulate_frames(1)
_popup.random_mode_button.select(mode)
_popup.random_mode_button.item_selected.emit(mode)
assert_int(Settings.random_mode).is_equal(mode)
func test_random_songs_choice_shows_the_mode_in_use() -> void:
Settings.random_mode = Settings.RandomMode.CLASSIC
_popup.open()
assert_int(_popup.random_mode_button.selected).is_equal(Settings.RandomMode.CLASSIC)
func test_statistics_toggle_changes_the_setting() -> void:
Settings.add_to_stats = true
_popup.open()
await _runner.simulate_frames(1)
assert_bool(_popup.add_to_database_button.button_pressed).is_true()
await _click_at(_popup.add_to_database_button.get_global_rect().get_center())
assert_bool(Settings.add_to_stats).is_false()
func test_statistics_settings_are_not_saved_with_the_quiz_settings() -> void:
Settings.add_to_stats = false
Settings.random_mode = Settings.RandomMode.LOW_PLAYED
Settings.save_settings()
var saved: ConfigFile = ConfigFile.new()
assert_int(saved.load(Settings.saved_settings_path())).is_equal(OK)
assert_bool(saved.has_section_key("quiz", "add_to_stats")).is_false()
assert_bool(saved.has_section_key("quiz", "random_mode")).is_false()
assert_bool(saved.has_section_key("app", "random_mode")).is_false()
func test_popup_fits_its_rows_and_is_centred() -> void:
_popup.open()
await _runner.simulate_frames(1)
var panel: Rect2 = _popup.settings_panel.get_global_rect()
var rows: Control = _popup.settings_panel.get_node("VBoxContainer")
assert_bool(panel.encloses(rows.get_global_rect())).is_true()
# The rows' own height fits, so the last toggle is not squeezed or cut off
assert_float(rows.get_combined_minimum_size().y).is_less_equal(rows.size.y)
assert_vector(panel.get_center()).is_equal_approx(Vector2(960, 540), Vector2(1, 1))
func test_open_folder_button_shows_the_config_folder() -> void:
var shown: Array[String] = []
_popup.show_folder = func(dir: String) -> void: shown.append(dir)
_popup.open()
await _runner.simulate_frames(1)
await _click_at(_popup.open_config_folder_button.get_global_rect().get_center())
assert_array(shown).contains_exactly([Settings.config_dir()])
assert_bool(DirAccess.dir_exists_absolute(Settings.config_dir())).is_true()