123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- <?php
- namespace Tests\Feature\Http\Auth;
- use App\Facades\Settings;
- use App\Http\Controllers\Auth\RegisterController;
- use App\Http\Requests\UserStoreRequest;
- use App\Models\User;
- use Illuminate\Support\Facades\DB;
- use PHPUnit\Framework\Attributes\CoversClass;
- use Tests\FeatureTestCase;
- /**
- * RegisterControllerTest test class
- */
- #[CoversClass(RegisterController::class)]
- #[CoversClass(UserStoreRequest::class)]
- class RegisterControllerTest extends FeatureTestCase
- {
- private const USERNAME = 'john doe';
- private const EMAIL = 'johndoe@example.org';
- private const PASSWORD = 'password';
- /**
- * @test
- */
- public function setUp() : void
- {
- parent::setUp();
- }
- /**
- * @test
- */
- public function test_register_returns_success()
- {
- DB::table('users')->delete();
- $response = $this->json('POST', '/user', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ])
- ->assertCreated()
- ->assertJsonStructure([
- 'message',
- 'name',
- ])
- ->assertJsonFragment([
- 'name' => self::USERNAME,
- ]);
- $this->assertDatabaseHas('users', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- ]);
- }
- /**
- * @test
- */
- public function test_register_with_uppercased_email_returns_success()
- {
- DB::table('users')->delete();
- $response = $this->json('POST', '/user', [
- 'name' => self::USERNAME,
- 'email' => strtoupper(self::EMAIL),
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ])
- ->assertCreated()
- ->assertJsonStructure([
- 'message',
- 'name',
- ])
- ->assertJsonFragment([
- 'name' => self::USERNAME,
- ]);
- $this->assertDatabaseHas('users', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- ]);
- }
- /**
- * @test
- */
- public function test_register_with_invalid_data_returns_validation_error()
- {
- $response = $this->json('POST', '/user', [
- 'name' => null,
- 'email' => self::EMAIL,
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ])
- ->assertStatus(422);
- }
- /**
- * @test
- */
- public function test_register_first_user_only_as_admin()
- {
- $this->assertDatabaseCount('users', 0);
- $response = $this->json('POST', '/user', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ]);
- $this->assertDatabaseCount('users', 1);
- $this->assertDatabaseHas('users', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- 'is_admin' => true,
- ]);
- $response = $this->json('POST', '/user', [
- 'name' => 'jane',
- 'email' => 'jane@example.org',
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ]);
- $this->assertEquals(1, User::admins()->count());
- }
- /**
- * @test
- */
- public function test_register_is_forbidden_when_registration_is_disabled()
- {
- Settings::set('disableRegistration', true);
- $this->json('POST', '/user', [
- 'name' => self::USERNAME,
- 'email' => self::EMAIL,
- 'password' => self::PASSWORD,
- 'password_confirmation' => self::PASSWORD,
- ])
- ->assertStatus(403);
- }
- }
|