2019-06-27 11:40:22 +09:00
// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the MIT Licence.
2019-01-24 17:43:03 +09:00
// See the LICENCE file in the repository root for full licence text.
2018-04-13 18:19:50 +09:00
using NUnit.Framework ;
using osu.Framework.Allocation ;
using osu.Game.Beatmaps ;
using osu.Game.Overlays ;
2018-04-18 16:04:02 +09:00
using osu.Game.Overlays.BeatmapSet ;
2018-04-13 18:19:50 +09:00
using osu.Game.Rulesets ;
2019-02-05 19:32:33 +03:00
using System ;
using System.Collections.Generic ;
using System.Linq ;
2021-10-20 18:43:48 +09:00
using osu.Game.Online.API.Requests.Responses ;
2021-11-04 18:02:44 +09:00
using APIUser = osu . Game . Online . API . Requests . Responses . APIUser ;
2018-04-13 18:19:50 +09:00
2019-03-25 01:02:36 +09:00
namespace osu.Game.Tests.Visual.Online
2018-04-13 18:19:50 +09:00
{
[TestFixture]
2019-05-14 22:37:25 +03:00
public class TestSceneBeatmapSetOverlay : OsuTestScene
2018-04-13 18:19:50 +09:00
{
2019-06-26 22:42:34 +03:00
private readonly TestBeatmapSetOverlay overlay ;
2018-04-13 18:19:50 +09:00
2019-09-13 17:15:33 +09:00
protected override bool UseOnlineAPI = > true ;
2019-07-31 22:44:44 +03:00
2021-09-09 19:36:47 +09:00
private int nextBeatmapSetId = 1 ;
2019-05-14 22:37:25 +03:00
public TestSceneBeatmapSetOverlay ( )
2018-04-13 18:19:50 +09:00
{
2019-06-26 22:42:34 +03:00
Add ( overlay = new TestBeatmapSetOverlay ( ) ) ;
2018-04-13 18:19:50 +09:00
}
2019-10-04 17:57:39 +03:00
[Resolved]
2021-12-03 18:14:44 +09:00
private IRulesetStore rulesets { get ; set ; }
2018-04-13 18:19:50 +09:00
2019-06-13 18:14:57 +09:00
[Test]
public void TestLoading ( )
{
2018-04-18 16:04:02 +09:00
AddStep ( @"show loading" , ( ) = > overlay . ShowBeatmapSet ( null ) ) ;
2019-06-13 18:14:57 +09:00
}
2018-04-18 16:04:02 +09:00
2019-06-13 18:14:57 +09:00
[Test]
public void TestOnline ( )
{
2018-04-18 16:04:02 +09:00
AddStep ( @"show online" , ( ) = > overlay . FetchAndShowBeatmapSet ( 55 ) ) ;
2019-06-13 18:14:57 +09:00
}
2018-04-18 16:04:02 +09:00
2019-06-13 18:14:57 +09:00
[Test]
public void TestLocalBeatmaps ( )
{
2018-04-13 18:19:50 +09:00
AddStep ( @"show first" , ( ) = >
{
2021-10-29 17:58:46 +09:00
overlay . ShowBeatmapSet ( new APIBeatmapSet
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
OnlineID = 1235 ,
Title = @"an awesome beatmap" ,
Artist = @"naru narusegawa" ,
Source = @"hinata sou" ,
Tags = @"test tag tag more tag" ,
2021-11-04 18:02:44 +09:00
Author = new APIUser
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
Username = @"BanchoBot" ,
Id = 3 ,
2018-04-13 18:19:50 +09:00
} ,
2021-10-29 17:58:46 +09:00
Preview = @"https://b.ppy.sh/preview/12345.mp3" ,
PlayCount = 123 ,
FavouriteCount = 456 ,
Submitted = DateTime . Now ,
Ranked = DateTime . Now ,
BPM = 111 ,
HasVideo = true ,
Ratings = Enumerable . Range ( 0 , 11 ) . ToArray ( ) ,
HasStoryboard = true ,
Covers = new BeatmapSetOnlineCovers ( ) ,
2021-11-04 16:44:05 +09:00
Beatmaps = new [ ]
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
new APIBeatmap
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
StarRating = 9.99 ,
DifficultyName = @"TEST" ,
2019-07-07 20:25:36 +03:00
Length = 456000 ,
2021-10-29 17:58:46 +09:00
RulesetID = 3 ,
CircleSize = 1 ,
DrainRate = 2.3f ,
OverallDifficulty = 4.5f ,
ApproachRate = 6 ,
CircleCount = 111 ,
SliderCount = 12 ,
PlayCount = 222 ,
PassCount = 21 ,
FailTimes = new APIFailTimes
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
Fails = Enumerable . Range ( 1 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
2018-04-13 18:19:50 +09:00
} ,
} ,
} ,
2019-06-27 12:00:31 +09:00
} ) ;
2018-04-13 18:19:50 +09:00
} ) ;
2019-06-26 05:17:28 +03:00
2019-06-19 03:37:08 +03:00
downloadAssert ( true ) ;
2019-08-23 18:31:53 +03:00
AddStep ( "show many difficulties" , ( ) = > overlay . ShowBeatmapSet ( createManyDifficultiesBeatmapSet ( ) ) ) ;
downloadAssert ( true ) ;
2019-06-26 05:01:29 +03:00
}
2019-06-19 03:37:08 +03:00
2019-06-26 05:01:29 +03:00
[Test]
2019-06-27 07:48:57 +03:00
public void TestAvailability ( )
2019-06-26 05:01:29 +03:00
{
AddStep ( @"show undownloadable" , ( ) = >
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
var set = getBeatmapSet ( ) ;
set . Availability = new BeatmapSetOnlineAvailability
2018-04-13 18:19:50 +09:00
{
2021-10-29 17:58:46 +09:00
DownloadDisabled = true ,
ExternalLink = "https://osu.ppy.sh" ,
} ;
overlay . ShowBeatmapSet ( set ) ;
2018-04-13 18:19:50 +09:00
} ) ;
2019-06-26 05:17:28 +03:00
2019-06-25 03:21:55 +03:00
downloadAssert ( false ) ;
2019-06-13 18:14:57 +09:00
}
2019-06-12 20:42:52 +03:00
2019-10-04 17:57:39 +03:00
[Test]
public void TestMultipleRulesets ( )
{
AddStep ( "show multiple rulesets beatmap" , ( ) = >
{
2021-10-29 17:58:46 +09:00
var beatmaps = new List < APIBeatmap > ( ) ;
2019-10-04 17:57:39 +03:00
foreach ( var ruleset in rulesets . AvailableRulesets . Skip ( 1 ) )
{
2021-10-29 17:58:46 +09:00
beatmaps . Add ( new APIBeatmap
2019-10-04 17:57:39 +03:00
{
2021-10-29 17:58:46 +09:00
DifficultyName = ruleset . Name ,
RulesetID = ruleset . OnlineID ,
FailTimes = new APIFailTimes
2019-10-04 17:57:39 +03:00
{
2021-10-29 17:58:46 +09:00
Fails = Enumerable . Range ( 1 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( i = > i % 12 - 6 ) . ToArray ( ) ,
} ,
2019-10-04 17:57:39 +03:00
} ) ;
}
2021-10-29 17:58:46 +09:00
var set = getBeatmapSet ( ) ;
2021-11-04 16:44:05 +09:00
set . Beatmaps = beatmaps . ToArray ( ) ;
2021-10-29 17:58:46 +09:00
overlay . ShowBeatmapSet ( set ) ;
2019-10-04 17:57:39 +03:00
} ) ;
2021-10-29 17:58:46 +09:00
AddAssert ( "shown beatmaps of current ruleset" , ( ) = > overlay . Header . HeaderContent . Picker . Difficulties . All ( b = > b . Beatmap . Ruleset . OnlineID = = overlay . Header . RulesetSelector . Current . Value . OnlineID ) ) ;
2021-01-20 04:56:46 +03:00
AddAssert ( "left-most beatmap selected" , ( ) = > overlay . Header . HeaderContent . Picker . Difficulties . First ( ) . State = = BeatmapPicker . DifficultySelectorState . Selected ) ;
2019-10-04 17:57:39 +03:00
}
2021-01-13 11:57:29 +03:00
[Test]
public void TestExplicitBeatmap ( )
{
AddStep ( "show explicit map" , ( ) = >
{
2021-09-09 12:39:40 +09:00
var beatmapSet = getBeatmapSet ( ) ;
2021-10-29 17:58:46 +09:00
beatmapSet . HasExplicitContent = true ;
2021-01-13 11:57:29 +03:00
overlay . ShowBeatmapSet ( beatmapSet ) ;
} ) ;
}
2021-09-08 13:27:45 +09:00
[Test]
public void TestFeaturedBeatmap ( )
{
AddStep ( "show featured map" , ( ) = >
{
2021-09-09 12:39:40 +09:00
var beatmapSet = getBeatmapSet ( ) ;
2021-10-29 17:58:46 +09:00
beatmapSet . TrackId = 1 ;
2021-09-08 13:27:45 +09:00
overlay . ShowBeatmapSet ( beatmapSet ) ;
} ) ;
}
2019-06-13 18:14:57 +09:00
[Test]
public void TestHide ( )
{
2018-04-13 18:19:50 +09:00
AddStep ( @"hide" , overlay . Hide ) ;
2019-06-13 18:14:57 +09:00
}
[Test]
public void TestShowWithNoReload ( )
{
2018-04-13 18:19:50 +09:00
AddStep ( @"show without reload" , overlay . Show ) ;
}
2019-06-25 03:21:55 +03:00
2021-10-29 17:58:46 +09:00
private APIBeatmapSet createManyDifficultiesBeatmapSet ( )
2019-08-23 18:31:53 +03:00
{
2021-10-29 17:58:46 +09:00
var set = getBeatmapSet ( ) ;
var beatmaps = new List < APIBeatmap > ( ) ;
2019-08-23 18:31:53 +03:00
for ( int i = 1 ; i < 41 ; i + + )
{
2021-10-29 17:58:46 +09:00
beatmaps . Add ( new APIBeatmap
2019-08-23 18:31:53 +03:00
{
2021-10-29 17:58:46 +09:00
OnlineID = i * 10 ,
DifficultyName = $"Test #{i}" ,
2021-11-22 14:26:24 +09:00
RulesetID = Ruleset . Value . OnlineID ,
2021-10-29 17:58:46 +09:00
StarRating = 2 + i * 0.1 ,
OverallDifficulty = 3.5f ,
FailTimes = new APIFailTimes
2019-08-23 18:31:53 +03:00
{
2021-10-29 17:58:46 +09:00
Fails = Enumerable . Range ( 1 , 100 ) . Select ( j = > j % 12 - 6 ) . ToArray ( ) ,
Retries = Enumerable . Range ( - 2 , 100 ) . Select ( j = > j % 12 - 6 ) . ToArray ( ) ,
2019-08-23 18:31:53 +03:00
} ,
} ) ;
}
2021-11-04 16:44:05 +09:00
set . Beatmaps = beatmaps . ToArray ( ) ;
2021-10-29 17:58:46 +09:00
return set ;
2019-08-23 18:31:53 +03:00
}
2021-10-29 17:58:46 +09:00
private APIBeatmapSet getBeatmapSet ( )
2021-09-09 12:39:40 +09:00
{
2021-10-29 17:58:46 +09:00
var beatmapSet = CreateAPIBeatmapSet ( Ruleset . Value ) ;
2021-09-09 19:36:47 +09:00
// Make sure the overlay is reloaded (see `BeatmapSetInfo.Equals`).
2021-10-29 17:58:46 +09:00
beatmapSet . OnlineID = nextBeatmapSetId + + ;
2021-09-09 12:39:40 +09:00
return beatmapSet ;
}
2019-06-25 03:21:55 +03:00
private void downloadAssert ( bool shown )
{
2021-01-20 04:56:46 +03:00
AddAssert ( $"is download button {(shown ? " shown " : " hidden ")}" , ( ) = > overlay . Header . HeaderContent . DownloadButtonsVisible = = shown ) ;
2019-06-26 22:42:34 +03:00
}
private class TestBeatmapSetOverlay : BeatmapSetOverlay
{
2021-01-19 01:34:37 +03:00
public new BeatmapSetHeader Header = > base . Header ;
2019-06-25 03:21:55 +03:00
}
2018-04-13 18:19:50 +09:00
}
}