Skip to content

Commit baef0d8

Browse files
authored
Merge pull request #11118 from bdach/preserve-failed-multi-scores
Always preserve multiplayer scores regardless of pass/fail
2 parents a91b2bd + b8159ef commit baef0d8

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

Diff for: app/Models/Multiplayer/ScoreLink.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ class ScoreLink extends Model
2828
public static function complete(ScoreToken $token, array $params): static
2929
{
3030
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]);
3233

3334
$playlistItem = $token->playlistItem;
3435
$requiredMods = array_column($playlistItem->required_mods, 'acronym');

Diff for: tests/Models/Multiplayer/ScoreLinkTest.php

+18
Original file line numberDiff line numberDiff line change
@@ -176,4 +176,22 @@ public function testUnexpectedModAcceptedIfAlwaysValidForSubmission()
176176
'user_id' => $scoreToken->user_id,
177177
]);
178178
}
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+
}
179197
}

0 commit comments

Comments
 (0)