<?php namespace Tests\Feature\Http\Auth; use App\Models\User; use App\Facades\Settings; use Tests\FeatureTestCase; use Illuminate\Support\Facades\Config; class UserControllerTest extends FeatureTestCase { /** * @var \App\Models\User */ protected $user; private const NEW_USERNAME = 'Jane DOE'; private const NEW_EMAIL = 'janedoe@example.org'; private const PASSWORD = 'password'; /** * @test */ public function setUp(): void { parent::setUp(); $this->user = User::factory()->create(); } /** * @test */ public function test_update_user_returns_success() { $response = $this->actingAs($this->user, 'web-guard') ->json('PUT', '/user', [ 'name' => self::NEW_USERNAME, 'email' => self::NEW_EMAIL, 'password' => self::PASSWORD, ]) ->assertOk() ->assertExactJson([ 'name' => self::NEW_USERNAME, 'id' => $this->user->id, 'email' => self::NEW_EMAIL, ]); } /** * @test */ public function test_update_user_in_demo_mode_returns_unchanged_user() { Settings::set('isDemoApp', true); $response = $this->actingAs($this->user, 'web-guard') ->json('PUT', '/user', [ 'name' => self::NEW_USERNAME, 'email' => self::NEW_EMAIL, 'password' => self::PASSWORD, ]) ->assertOk() ->assertExactJson([ 'name' => $this->user->name, 'id' => $this->user->id, 'email' => $this->user->email, ]); } /** * @test */ public function test_update_user_passing_wrong_password_returns_bad_request() { $response = $this->actingAs($this->user, 'web-guard') ->json('PUT', '/user', [ 'name' => self::NEW_USERNAME, 'email' => self::NEW_EMAIL, 'password' => 'wrongPassword', ]) ->assertStatus(400); } /** * @test */ public function test_update_user_with_invalid_data_returns_validation_error() { $response = $this->actingAs($this->user, 'web-guard') ->json('PUT', '/user', [ 'name' => '', 'email' => '', 'password' => self::PASSWORD, ]) ->assertStatus(422); } /** * @test */ public function test_delete_user_returns_success() { $response = $this->actingAs($this->user, 'web-guard') ->json('DELETE', '/user', [ 'password' => self::PASSWORD, ]) ->assertNoContent(); } /** * @test */ public function test_delete_user_in_demo_mode_returns_unauthorized() { Config::set('2fauth.config.isDemoApp', true); Settings::set('isDemoApp', true); $response = $this->actingAs($this->user, 'web-guard') ->json('DELETE', '/user', [ 'password' => self::PASSWORD, ]) ->assertUnauthorized() ->assertJsonStructure([ 'message' ]); } /** * @test */ public function test_delete_user_passing_wrong_password_returns_bad_request() { $response = $this->actingAs($this->user, 'web-guard') ->json('DELETE', '/user', [ 'password' => 'wrongPassword', ]) ->assertStatus(400); } }