the browser-facing portion of osu!
at master 90 lines 2.7 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace Tests\Models\Multiplayer; 7 8use App\Exceptions\InvariantException; 9use App\Models\Beatmap; 10use App\Models\Multiplayer\PlaylistItem; 11use App\Models\Multiplayer\Room; 12use App\Models\User; 13use Tests\TestCase; 14 15class PlaylistItemTest extends TestCase 16{ 17 public static function rulesetsProvider() 18 { 19 return [ 20 'osu' => [0], 21 'taiko' => [1], 22 'fruits' => [2], 23 'mania' => [3], 24 ]; 25 } 26 27 /** 28 * @dataProvider rulesetsProvider 29 */ 30 public function testOsuBeatmapPlayableInAnyRuleset(int $rulesetId) 31 { 32 $beatmap = Beatmap::factory()->create([ 33 'playmode' => 0, 34 ]); 35 $room = Room::factory()->create(); 36 $user = User::factory()->create(); 37 $playlistItem = new PlaylistItem([ 38 'beatmap_id' => $beatmap->getKey(), 39 'ruleset_id' => $rulesetId, 40 'room_id' => $room->getKey(), 41 'owner_id' => $user->getKey(), 42 'required_mods' => [], 43 'allowed_mods' => [], 44 ]); 45 46 $this->expectNotToPerformAssertions(); 47 $playlistItem->save(); 48 } 49 50 public function testCatchBeatmapPlayableInCatchRuleset() 51 { 52 $beatmap = Beatmap::factory()->create([ 53 'playmode' => 2, 54 ]); 55 $room = Room::factory()->create(); 56 $user = User::factory()->create(); 57 $playlistItem = new PlaylistItem([ 58 'beatmap_id' => $beatmap->getKey(), 59 'ruleset_id' => 2, 60 'room_id' => $room->getKey(), 61 'owner_id' => $user->getKey(), 62 'required_mods' => [], 63 'allowed_mods' => [], 64 ]); 65 66 $this->expectNotToPerformAssertions(); 67 $playlistItem->save(); 68 } 69 70 public function testManiaBeatmapNotPlayableInOtherRulesets() 71 { 72 $beatmap = Beatmap::factory()->create([ 73 'playmode' => 3, 74 ]); 75 $room = Room::factory()->create(); 76 $user = User::factory()->create(); 77 $playlistItem = new PlaylistItem([ 78 'beatmap_id' => $beatmap->getKey(), 79 'ruleset_id' => 2, 80 'room_id' => $room->getKey(), 81 'owner_id' => $user->getKey(), 82 'required_mods' => [], 83 'allowed_mods' => [], 84 ]); 85 86 $this->expectException(InvariantException::class); 87 $this->expectExceptionMessageMatches('/^invalid ruleset_id for beatmap \d+$/'); 88 $playlistItem->save(); 89 } 90}