From 116a45c9cbe5a70919b0dd18232952232e5b1546 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Dach?= Date: Thu, 14 Aug 2025 14:18:25 +0200 Subject: [PATCH] Add failing test --- .../Visual/Gameplay/TestScenePlayerLoader.cs | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs index c8b7ccc3d0..6ac82005a7 100644 --- a/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs +++ b/osu.Game.Tests/Visual/Gameplay/TestScenePlayerLoader.cs @@ -19,6 +19,10 @@ using osu.Framework.Utils; using osu.Game.Beatmaps; using osu.Game.Configuration; using osu.Game.Graphics.UserInterface; +using osu.Game.Online.API; +using osu.Game.Online.API.Requests; +using osu.Game.Online.API.Requests.Responses; +using osu.Game.Online.Leaderboards; using osu.Game.Overlays; using osu.Game.Overlays.Notifications; using osu.Game.Rulesets.Mods; @@ -64,6 +68,9 @@ namespace osu.Game.Tests.Visual.Gameplay [Cached(typeof(BatteryInfo))] private readonly LocalBatteryInfo batteryInfo = new LocalBatteryInfo(); + [Cached] + private readonly LeaderboardManager leaderboardManager; + private readonly ChangelogOverlay changelogOverlay; private double savedTrackVolume; @@ -74,6 +81,7 @@ namespace osu.Game.Tests.Visual.Gameplay { AddRange(new Drawable[] { + leaderboardManager = new LeaderboardManager(), notificationOverlay = new NotificationOverlay { Anchor = Anchor.TopRight, @@ -364,6 +372,45 @@ namespace osu.Game.Tests.Visual.Gameplay }, () => !volumeOverlay.IsMuted.Value && audioManager.Volume.Value == 0.5 && audioManager.VolumeTrack.Value == 0.5); } + [Test] + public void TestLeaderboardForciblyRefetchedOnRestart([Values] bool quickRestart) + { + int leaderboardRequestsHandled = 0; + AddStep("set up request handling", () => ((DummyAPIAccess)API).HandleRequest = req => + { + switch (req) + { + case GetScoresRequest getScores: + leaderboardRequestsHandled++; + getScores.TriggerSuccess(new APIScoresCollection { Scores = [] }); + return true; + + default: + return false; + } + }); + + AddStep("load player", () => resetPlayer(true)); + + AddUntilStep("wait for loader to become current", () => loader.IsCurrentScreen()); + AddUntilStep("wait for player to be current", () => player.IsCurrentScreen()); + AddAssert("leaderboard fetched once", () => leaderboardRequestsHandled, () => Is.EqualTo(1)); + + AddStep("restart player", () => + { + var lastPlayer = player; + player = null; + lastPlayer.Restart(quickRestart); + }); + + AddUntilStep("wait for player to be current", () => player.IsCurrentScreen()); + + if (quickRestart) + AddAssert("leaderboard not refetched", () => leaderboardRequestsHandled, () => Is.EqualTo(1)); + else + AddAssert("leaderboard fetched twice", () => leaderboardRequestsHandled, () => Is.EqualTo(2)); + } + /// /// Created for avoiding copy pasting code for the same steps. ///