Split now playing, the quiz buttons and song loading out of the quiz
NowPlaying, QuizToolbar and SongControls become their own scenes, the auto repeat switch moves into the music player scene, and downloading songs moves into a SongLoader node. The quiz only wires the parts together. Every node keeps its place on screen. Screenshots of every UI state are pixel-identical to before, the layout test still matches the original baseline, and each new part has its own tests.
This commit is contained in:
1 parent
bad4b3ad8b
commit
e94c75e84d
32 files changed
+822
-300
No files matched your search
@@ -0,0 +1,122 @@
|
||||
extends GdUnitTestSuite
|
||||
## Downloading songs into the Playlist ahead of time, against a fake server.
|
||||
|
||||
const SONG_INFO: Dictionary = {"SongNo": 0, "Soundtrack": "Chrono Trigger", "Song": "Corridors of Time"}
|
||||
|
||||
var _snapshot: AutoloadSnapshot
|
||||
var _server: FakeHttpTransport
|
||||
var _loader: SongLoader
|
||||
|
||||
|
||||
func before_test() -> void:
|
||||
_snapshot = AutoloadSnapshot.take([Settings, Playlist])
|
||||
Playlist.reset_playlist()
|
||||
Playlist.is_song_downloading = false
|
||||
Playlist.number_of_tracks_to_preload = 1
|
||||
Settings.use_low_played_mode = false
|
||||
_server = FakeHttpTransport.new().install()
|
||||
_server.respond_json("/music/list", [])
|
||||
_server.respond_bytes("/music/rand", FileAccess.get_file_as_bytes("res://tests/data/short.mp3"))
|
||||
_server.respond_bytes("/music/addQue", PackedByteArray())
|
||||
_server.respond_json("/music/info", SONG_INFO)
|
||||
_loader = auto_free(SongLoader.new())
|
||||
add_child(_loader)
|
||||
|
||||
|
||||
func after_test() -> void:
|
||||
_server.uninstall()
|
||||
_snapshot.restore()
|
||||
|
||||
|
||||
func test_load_song_list_adds_songs_already_played_on_the_server() -> void:
|
||||
_server.respond_json("/music/list", [
|
||||
{"SongNo": 0, "Soundtrack": "Chrono Trigger", "Song": "Corridors of Time"},
|
||||
])
|
||||
_server.respond_json("/music/info", {"SongNo": 1, "Soundtrack": "Final Fantasy VI", "Song": "Dancing Mad"})
|
||||
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_loader))
|
||||
|
||||
_loader.load_song_list()
|
||||
|
||||
await signals.is_emitted("song_list_loaded")
|
||||
var first: SongObject = Playlist.song_object_array[0]
|
||||
assert_str(first.soundtrack_title).is_equal("Chrono Trigger")
|
||||
assert_bool(first.has_played).is_true()
|
||||
assert_bool(first.is_answered).is_true()
|
||||
|
||||
|
||||
func test_load_song_list_then_preloads_a_new_song() -> void:
|
||||
_loader.load_song_list()
|
||||
|
||||
assert_int(_server.count("/music/rand")).is_equal(1)
|
||||
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
||||
|
||||
|
||||
func test_fetch_song_downloads_queues_and_adds_the_song() -> void:
|
||||
var signals: GdUnitSignalAssert = assert_signal(monitor_signals(_loader))
|
||||
|
||||
_loader.fetch_song()
|
||||
|
||||
await signals.is_emitted("song_added")
|
||||
assert_array(_server.requested_paths).contains_exactly(["/music/rand", "/music/addQue", "/music/info"])
|
||||
var song: SongObject = Playlist.song_object_array[0]
|
||||
assert_str(song.song_title).is_equal("Corridors of Time")
|
||||
assert_object(song.song).is_not_null()
|
||||
assert_bool(Playlist.is_song_downloading).is_false()
|
||||
|
||||
|
||||
func test_fetch_song_keeps_going_until_the_cache_is_full() -> void:
|
||||
Playlist.number_of_tracks_to_preload = 3
|
||||
|
||||
_loader.fetch_song()
|
||||
|
||||
assert_int(Playlist.song_object_array.size()).is_equal(3)
|
||||
assert_int(_server.count("/music/rand")).is_equal(3)
|
||||
|
||||
|
||||
func test_low_played_mode_uses_its_endpoint() -> void:
|
||||
Settings.use_low_played_mode = true
|
||||
_server.respond_bytes("/music/rand/low", FileAccess.get_file_as_bytes("res://tests/data/short.mp3"))
|
||||
|
||||
_loader.fetch_song()
|
||||
|
||||
assert_int(_server.count("/music/rand/low")).is_equal(1)
|
||||
assert_int(_server.count("/music/rand")).is_equal(0)
|
||||
|
||||
|
||||
func test_fetch_song_if_idle_does_nothing_while_downloading() -> void:
|
||||
Playlist.is_song_downloading = true
|
||||
|
||||
_loader.fetch_song_if_idle()
|
||||
|
||||
assert_int(_server.count("/music/rand")).is_equal(0)
|
||||
|
||||
|
||||
func test_fill_cache_does_nothing_when_the_cache_is_full() -> void:
|
||||
_loader.fetch_song()
|
||||
|
||||
_loader.fill_cache()
|
||||
|
||||
assert_int(_server.count("/music/rand")).is_equal(1)
|
||||
|
||||
|
||||
func test_fill_cache_downloads_after_the_cache_size_grows() -> void:
|
||||
_loader.fetch_song()
|
||||
Playlist.number_of_tracks_to_preload = 2
|
||||
|
||||
_loader.fill_cache()
|
||||
|
||||
assert_int(_server.count("/music/rand")).is_equal(2)
|
||||
|
||||
|
||||
func test_failed_step_is_retried_alone() -> void:
|
||||
_loader.retry_seconds = 0.05
|
||||
_server.fail_after("/music/info", 0)
|
||||
|
||||
_loader.fetch_song()
|
||||
assert_int(Playlist.song_object_array.size()).is_equal(0)
|
||||
_server.respond_json("/music/info", SONG_INFO)
|
||||
await get_tree().create_timer(0.2).timeout
|
||||
|
||||
assert_int(_server.count("/music/rand")).is_equal(1)
|
||||
assert_int(_server.count("/music/addQue")).is_equal(1)
|
||||
assert_int(Playlist.song_object_array.size()).is_equal(1)
|
||||
Reference in new issue
Block a user