@@ -1756,4 +1756,58 @@ public async Task TestUserRankingWhenBothUsersHaveSamePpAndUserBSubmitsHigherPpM
17561756 Assert . Equal ( 1 , userStatsAFinal ! . BestGlobalRank ) ;
17571757 Assert . Equal ( 1 , userStatsBFinal ! . BestGlobalRank ) ;
17581758 }
1759+
1760+ [ Theory ]
1761+ [ InlineData ( true ) ]
1762+ [ InlineData ( false ) ]
1763+ public async Task TestMedalNotAwardedWithDifficultyReducingMods ( bool hasNonEligibleMod )
1764+ {
1765+ // Arrange
1766+ var scoreService = Scope . ServiceProvider . GetRequiredService < Server . Services . ScoreService > ( ) ;
1767+
1768+ var ( session , user ) = await CreateTestSession ( ) ;
1769+
1770+ var ( replay , beatmapId ) = GetValidTestReplay ( ) ;
1771+
1772+ var score = replay . GetScore ( ) ;
1773+ score . BeatmapId = beatmapId ;
1774+ score . GameMode = GameMode . Standard ;
1775+ score . Mods = hasNonEligibleMod ? Mods . HalfTime : Mods . None ;
1776+
1777+ score . EnrichWithSessionData ( session ) ;
1778+
1779+ var beatmapSet = _mocker . Beatmap . GetRandomBeatmapSet ( ) ;
1780+ var beatmap = beatmapSet . Beatmaps . First ( ) ?? throw new Exception ( "Beatmap is null" ) ;
1781+ beatmap . EnrichWithScoreData ( score ) ;
1782+ beatmap . DifficultyRating = 1.5 ;
1783+
1784+ await _mocker . Beatmap . MockBeatmapSet ( beatmapSet ) ;
1785+
1786+ // Act
1787+ var resultString = await scoreService . SubmitScore (
1788+ session ,
1789+ score . ToScoreString ( user . Username ) ,
1790+ score . BeatmapHash ,
1791+ _mocker . GetRandomInteger ( ) ,
1792+ _mocker . GetRandomInteger ( ) ,
1793+ _mocker . GetRandomString ( ) ,
1794+ session . Attributes . UserHash ,
1795+ _replayService . GenerateReplayFormFile ( ) ,
1796+ null
1797+ ) ;
1798+
1799+ // Assert
1800+ Assert . DoesNotContain ( "error" , resultString ) ;
1801+
1802+ var userUnlockedMedals = await Database . Users . Medals . GetUserMedals ( session . UserId ) ;
1803+
1804+ if ( hasNonEligibleMod )
1805+ {
1806+ Assert . DoesNotContain ( userUnlockedMedals , m => m . MedalId == 1 ) ;
1807+ }
1808+ else
1809+ {
1810+ Assert . Contains ( userUnlockedMedals , m => m . MedalId == 1 ) ;
1811+ }
1812+ }
17591813}
0 commit comments