the browser-facing portion of osu!

Merge pull request #11118 from bdach/preserve-failed-multi-scores

Always preserve multiplayer scores regardless of pass/fail

authored by Edho Arief and committed by GitHub baef0d8d a91b2bd1

+20 -1
+2 -1
app/Models/Multiplayer/ScoreLink.php
··· 28 28 public static function complete(ScoreToken $token, array $params): static 29 29 { 30 30 return \DB::transaction(function () use ($params, $token) { 31 - $score = Score::createFromJsonOrExplode($params); 31 + // multiplayer scores are always preserved. 32 + $score = Score::createFromJsonOrExplode([...$params, 'preserve' => true]); 32 33 33 34 $playlistItem = $token->playlistItem; 34 35 $requiredMods = array_column($playlistItem->required_mods, 'acronym');
+18
tests/Models/Multiplayer/ScoreLinkTest.php
··· 176 176 'user_id' => $scoreToken->user_id, 177 177 ]); 178 178 } 179 + 180 + public function testFailedMultiplayerScoresArePreserved() 181 + { 182 + $playlistItem = PlaylistItem::factory()->create(); 183 + $scoreToken = ScoreToken::factory()->create([ 184 + 'beatmap_id' => $playlistItem->beatmap_id, 185 + 'playlist_item_id' => $playlistItem, 186 + ]); 187 + 188 + $scoreLink = ScoreLink::complete($scoreToken, [ 189 + ...static::$commonScoreParams, 190 + 'beatmap_id' => $playlistItem->beatmap_id, 191 + 'ruleset_id' => $playlistItem->ruleset_id, 192 + 'user_id' => $scoreToken->user_id, 193 + 'passed' => false, 194 + ]); 195 + $this->assertTrue($scoreLink->score->preserve); 196 + } 179 197 }