Covers a cache size above 1: songs are preloaded until the setting is reached, playing a song tops the cache up again, and the cache keeps filling after a failed download once the server answers again.
161 lines
5.7 KiB
GDScript
161 lines
5.7 KiB
GDScript
extends MainWindowTestSuite
|
|
## Main window flows: startup, playing songs and resetting.
|
|
|
|
|
|
func test_startup_loads_soundtracks_and_preloads_a_song() -> void:
|
|
assert_int(_server.count("/music/list")).is_equal(1)
|
|
assert_int(_server.count("/music/all")).is_equal(1)
|
|
assert_array(_server.requested_paths).contains(["/music/rand", "/music/addQue", "/music/info"])
|
|
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
|
assert_bool((_window.get_node("NextButton") as Button).disabled).is_false()
|
|
|
|
|
|
func test_low_played_mode_fetches_from_low_played_endpoint() -> void:
|
|
Settings.use_low_played_mode = true
|
|
_server.respond_bytes(
|
|
"/music/rand/low", FileAccess.get_file_as_bytes("res://tests/data/short.mp3"))
|
|
|
|
_runner.invoke("fetch_song")
|
|
|
|
assert_int(_server.count("/music/rand/low")).is_equal(1)
|
|
|
|
|
|
func test_next_plays_preloaded_song_and_fetches_another() -> void:
|
|
_next_song_is(SONG_INFO[1])
|
|
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
assert_int(Playlist.currently_playing_song).is_equal(0)
|
|
assert_bool(Playlist.song_object_array[0].has_played).is_true()
|
|
assert_int(Playlist.song_object_array.size()).is_equal(2)
|
|
assert_int(_server.count("/music/rand")).is_equal(2)
|
|
|
|
|
|
func test_title_is_hidden_until_answer_is_shown() -> void:
|
|
var soundtrack_label: Label = _window.get_node("VBoxContainer/SoundtrackLabel")
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
assert_str(soundtrack_label.text).is_equal("????????")
|
|
|
|
_press("ShowAnswerButton")
|
|
|
|
assert_str(soundtrack_label.text).is_equal("Chrono Trigger")
|
|
assert_int(_server.count("/music/played?song=0")).is_equal(1)
|
|
|
|
|
|
func test_reset_playlist_clears_server_and_preloads_again() -> void:
|
|
_press("NextButton")
|
|
await _runner.simulate_frames(2)
|
|
|
|
_press("ResetPlaylistButton")
|
|
|
|
assert_int(_server.count("/music/reset")).is_equal(1)
|
|
assert_int(Playlist.currently_playing_song).is_equal(-1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
|
assert_bool(Playlist.song_object_array[0].has_played).is_false()
|
|
|
|
|
|
func test_reset_points_sets_all_scores_to_zero() -> void:
|
|
_add_player("Crono").add_point()
|
|
_add_player("Marle").add_point()
|
|
|
|
_press("ResetPointsButton")
|
|
|
|
assert_int(Settings.player_array[0].player_score).is_equal(0)
|
|
assert_int(Settings.player_array[1].player_score).is_equal(0)
|
|
|
|
|
|
func test_cannot_add_more_than_max_players() -> void:
|
|
for i: int in Settings.MAX_NUMBER_OF_PLAYERS + 1:
|
|
_add_player("Player %d" % i)
|
|
|
|
assert_int(Settings.player_array.size()).is_equal(Settings.MAX_NUMBER_OF_PLAYERS)
|
|
|
|
|
|
func test_cannot_add_player_without_name() -> void:
|
|
_add_player("")
|
|
|
|
assert_array(Settings.player_array).is_empty()
|
|
|
|
|
|
func test_failed_song_download_is_retried_until_the_server_answers() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
var songs_before: int = Playlist.song_object_array.size()
|
|
var mp3: PackedByteArray = FileAccess.get_file_as_bytes("res://tests/data/short.mp3")
|
|
_server.respond_bytes("/music/rand", PackedByteArray(), 503)
|
|
var rand_requests_before: int = _server.count("/music/rand")
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(200)
|
|
|
|
assert_int(_server.count("/music/rand") - rand_requests_before).is_greater(1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before)
|
|
assert_bool(Playlist.is_song_downloading).is_true()
|
|
|
|
_server.respond_bytes("/music/rand", mp3)
|
|
await await_millis(200)
|
|
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before + 1)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_failed_song_info_retries_only_that_step() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
var songs_before: int = Playlist.song_object_array.size()
|
|
_server.respond_bytes("/music/info", PackedByteArray(), 503)
|
|
var rand_before: int = _server.count("/music/rand")
|
|
var queue_before: int = _server.count("/music/addQue")
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(200)
|
|
_next_song_is(SONG_INFO[1])
|
|
await await_millis(200)
|
|
|
|
# The song was downloaded and queued once; only the info request was repeated
|
|
assert_int(_server.count("/music/rand") - rand_before).is_equal(1)
|
|
assert_int(_server.count("/music/addQue") - queue_before).is_equal(1)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(songs_before + 1)
|
|
assert_str(Playlist.song_object_array.back().song_title).is_equal("Dancing Mad")
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_preloads_as_many_songs_as_the_cache_setting() -> void:
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
|
|
_runner.invoke("fetch_song")
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|
|
|
|
|
|
func test_playing_a_song_tops_the_cache_up_again() -> void:
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
_runner.invoke("fetch_song")
|
|
|
|
await _play_first_song()
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_int(Playlist.song_object_array.size()).is_equal(4)
|
|
|
|
|
|
func test_cache_keeps_filling_after_a_failed_download() -> void:
|
|
_window.song_fetch_retry_seconds = 0.05
|
|
Playlist.number_of_tracks_to_preload = 3
|
|
var mp3: PackedByteArray = FileAccess.get_file_as_bytes("res://tests/data/short.mp3")
|
|
# One more download works, then the server stops answering
|
|
_server.fail_after("/music/rand", 1)
|
|
|
|
_runner.invoke("fetch_song")
|
|
await await_millis(150)
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(2)
|
|
assert_bool(Playlist.is_song_downloading).is_true()
|
|
|
|
_server.respond_bytes("/music/rand", mp3)
|
|
await await_millis(150)
|
|
|
|
assert_int(Playlist.get_preloaded_songs()).is_equal(3)
|
|
assert_bool(Playlist.is_song_downloading).is_false()
|