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\Controllers;
9
10use App\Models\LegacyIrcKey;
11use App\Models\User;
12use Tests\TestCase;
13
14class LegacyIrcKeyControllerTest extends TestCase
15{
16 public function testDestroy(): void
17 {
18 $key = LegacyIrcKey::factory()->create();
19 $user = $key->user;
20
21 $this->expectCountChange(fn () => $user->legacyIrcKey()->count(), -1);
22
23 $this
24 ->actingAsVerified($user)
25 ->delete(route('legacy-irc-key.destroy'))
26 ->assertSuccessful();
27 }
28
29 public function testDestroyWithoutExisting(): void
30 {
31 $user = User::factory()->create();
32
33 $this->expectCountChange(fn () => $user->legacyIrcKey()->count(), 0);
34
35 $this
36 ->actingAsVerified($user)
37 ->delete(route('legacy-irc-key.destroy'))
38 ->assertSuccessful();
39 }
40
41 public function testDestroyGuest(): void
42 {
43 $this->delete(route('legacy-irc-key.destroy'))->assertStatus(401);
44 }
45
46 public function testStore(): void
47 {
48 $user = User::factory()->withPlays(100)->create();
49
50 $this->expectCountChange(fn () => $user->legacyIrcKey()->count(), 1);
51
52 $this
53 ->actingAsVerified($user)
54 ->post(route('legacy-irc-key.store'))
55 ->assertSuccessful();
56 }
57
58 public function testStoreNotEnoughPlaycount(): void
59 {
60 $user = User::factory()->withPlays(10)->create();
61
62 $this->expectCountChange(fn () => $user->legacyIrcKey()->count(), 0);
63
64 $this
65 ->actingAsVerified($user)
66 ->post(route('legacy-irc-key.store'))
67 ->assertStatus(403);
68 }
69
70 public function testStoreWithExisting(): void
71 {
72 $user = User::factory()->withPlays(100)->create();
73 $key = LegacyIrcKey::factory()->create(['user_id' => $user]);
74
75 $this->expectCountChange(fn () => $user->legacyIrcKey()->count(), 0);
76
77 $this
78 ->actingAsVerified($user)
79 ->post(route('legacy-irc-key.store'))
80 ->assertSuccessful();
81 }
82
83 public function testStoreGuest(): void
84 {
85 $this->post(route('legacy-irc-key.store'))->assertStatus(401);
86 }
87}