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
6declare(strict_types=1);
7
8namespace Tests\Jobs;
9
10use App\Jobs\BeatmapsetDelete;
11use App\Models\Beatmapset;
12use App\Models\Event;
13use App\Models\Forum\Topic;
14use App\Models\Log;
15use App\Models\User;
16use Tests\TestCase;
17
18class BeatmapsetDeleteTest extends TestCase
19{
20 public function testBeatmapsetDeletedByOwner(): void
21 {
22 $owner = User::factory()->create();
23 $topic = Topic::factory()->create();
24 $beatmapset = Beatmapset::factory()->create([
25 'thread_id' => $topic,
26 'user_id' => $owner,
27 'approved' => Beatmapset::STATES['pending'],
28 ]);
29
30 $this->expectCountChange(fn () => Event::count(), 1);
31 $this->expectCountChange(
32 fn () => Log::where('log_operation', 'LOG_BEATMAPSET_DELETE')->count(),
33 0,
34 );
35
36 (new BeatmapsetDelete($beatmapset, $owner))->handle();
37
38 $beatmapset->refresh();
39 $topic->refresh();
40
41 $this->assertTrue($beatmapset->trashed());
42 $this->assertTrue($topic->trashed());
43 }
44
45 public function testBeatmapsetDeletedByAnotherUser(): void
46 {
47 $moderator = User::factory()->create();
48 $owner = User::factory()->create();
49 $topic = Topic::factory()->create();
50 $beatmapset = Beatmapset::factory()->create([
51 'thread_id' => $topic,
52 'user_id' => $owner,
53 'approved' => Beatmapset::STATES['pending'],
54 ]);
55
56 $this->expectCountChange(fn () => Event::count(), 0);
57 $this->expectCountChange(
58 fn () => Log::where('log_operation', 'LOG_BEATMAPSET_DELETE')->count(),
59 1,
60 );
61
62 (new BeatmapsetDelete($beatmapset, $moderator))->handle();
63
64 $beatmapset->refresh();
65 $topic->refresh();
66
67 $this->assertTrue($beatmapset->trashed());
68 $this->assertTrue($topic->trashed());
69 }
70}