extends MainWindowTestSuite ## The top bar tells the user when the server has a newer MusicPlayer release. var _top_bar: TopBar func before_test() -> void: await super() _top_bar = _window.get_node("TopBar") func test_no_message_when_this_is_the_newest_version() -> void: assert_bool(_top_bar.update_box.visible).is_false() assert_int(_server.count("/download")).is_equal(1) func test_newer_release_shows_a_message() -> void: _server.respond_json("/download", "99.0.0") _top_bar.check_for_update() assert_bool(_top_bar.update_button.is_visible_in_tree()).is_true() assert_str(_top_bar.update_button.text).is_equal("Version 99.0.0 is available") assert_str(_top_bar.update_button.tooltip_text).contains(Settings.version) func test_message_fits_between_the_tabs_and_the_buttons() -> void: _server.respond_json("/download", "99.10.10") _top_bar.check_for_update() await _runner.simulate_frames(1) var label: Rect2 = _top_bar.update_box.get_global_rect() var button: Button = _top_bar.update_button var text_width: float = button.get_theme_font(&"font").get_string_size(button.text, HORIZONTAL_ALIGNMENT_LEFT, -1, button.get_theme_font_size(&"font_size")).x assert_float(text_width).is_less_equal(label.size.x) assert_float(label.position.x).is_greater( (_top_bar.get_node("%StatisticsTab") as Control).get_global_rect().end.x) assert_float(label.end.x).is_less( (_top_bar.get_node("%SyncButton") as Control).get_global_rect().position.x) func test_message_stays_on_the_statistics_tab() -> void: _server.respond_json("/download", "99.0.0") _top_bar.check_for_update() _window.show_tab(&"statistics") assert_bool(_top_bar.update_button.is_visible_in_tree()).is_true() func test_server_change_checks_again() -> void: _server.respond_json("/download", "99.0.0") _quiz.on_server_changed() assert_bool(_top_bar.update_box.visible).is_true() func test_failed_check_shows_nothing() -> void: _server.respond_json("/download", "error", 502) _top_bar.check_for_update() assert_bool(_top_bar.update_box.visible).is_false() func test_version_comparison() -> void: assert_bool(TopBar.is_newer_version("2.0.1", "2.0.0")).is_true() assert_bool(TopBar.is_newer_version("1.10.0", "1.9.0")).is_true() assert_bool(TopBar.is_newer_version("v3.0", "2.9.9")).is_true() assert_bool(TopBar.is_newer_version("2.1", "2.0.5")).is_true() assert_bool(TopBar.is_newer_version("2.0.0", "2.0.0")).is_false() assert_bool(TopBar.is_newer_version("2.0", "2.0.0")).is_false() assert_bool(TopBar.is_newer_version("1.9.0", "2.0.0")).is_false() assert_bool(TopBar.is_newer_version("1.9.9", "1.10.0")).is_false() @warning_ignore("unused_parameter") func test_message_stays_clear_of_the_buttons_in_every_theme(theme_id: String, test_parameters: Array = [["classic"], ["original_web"], ["nord"], ["christmas"]]) -> void: Settings.apply_theme(theme_id) _server.respond_json("/download", "99.10.10") _top_bar.check_for_update() await _runner.simulate_frames(2) var message: Rect2 = _top_bar.update_box.get_global_rect() assert_float(message.end.x).is_less( (_top_bar.get_node("%SyncButton") as Control).get_global_rect().position.x) assert_float(message.position.x).is_greater( (_top_bar.get_node("%StatisticsTab") as Control).get_global_rect().end.x) Settings.apply_theme("classic")