mirror of https://github.com/kcal-app/kcal.git
				
				
				
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace Tests\Feature\Console;
 | |
| 
 | |
| use App\Models\User;
 | |
| use Tests\TestCase;
 | |
| 
 | |
| class UserAddTest extends TestCase
 | |
| {
 | |
| 
 | |
|     public function testCanAddUserInteractively(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $user = User::factory()->makeOne();
 | |
|         $this->artisan('user:add')
 | |
|             ->expectsQuestion('Enter a username for the user', $user->username)
 | |
|             ->expectsQuestion('Enter a password for the user (leave blank for a random password)', 'password')
 | |
|             ->expectsQuestion('Re-type the password to confirm', 'password')
 | |
|             ->expectsQuestion('Enter a name for the user (optional)', $user->name)
 | |
|             ->assertExitCode(0);
 | |
|         /** @var \App\Models\User $new_user */
 | |
|         $new_user = User::whereUsername($user->username)->get()->first();
 | |
|         $this->assertEquals($user->username, $new_user->username);
 | |
|         $this->assertEquals($user->name, $new_user->name);
 | |
|     }
 | |
| 
 | |
|     public function testCanAddUserWithArguments(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $user = User::factory()->makeOne();
 | |
|         $parameters = [
 | |
|             'username' => $user->username,
 | |
|             'password' => 'password',
 | |
|             '--name' => $user->name,
 | |
|         ];
 | |
|         $this->artisan('user:add', $parameters)
 | |
|             ->assertExitCode(0);
 | |
|         /** @var \App\Models\User $new_user */
 | |
|         $new_user = User::whereUsername($user->username)->get()->first();
 | |
|         $this->assertEquals($user->username, $new_user->username);
 | |
|         $this->assertEquals($user->name, $new_user->name);
 | |
|     }
 | |
| 
 | |
|     public function testCanNotAddExistingUsername(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $user = User::factory()->createOne(['username' => 'test_user']);
 | |
|         $this->artisan('user:add', ['username' => $user->username])
 | |
|             ->expectsOutput("User `{$user->username}` already exists.")
 | |
|             ->assertExitCode(1);
 | |
|     }
 | |
| 
 | |
|     public function testCanNotLeaveUsernameBlank(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $this->artisan('user:add')
 | |
|             ->expectsQuestion('Enter a username for the user', NULL)
 | |
|             ->expectsOutput('Username is required.')
 | |
|             ->assertExitCode(1);
 | |
|     }
 | |
| 
 | |
|     public function testPasswordsMustMatch(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $this->artisan('user:add', ['username' => 'test_user'])
 | |
|             ->expectsQuestion('Enter a password for the user (leave blank for a random password)', 'password')
 | |
|             ->expectsQuestion('Re-type the password to confirm', 'password1')
 | |
|             ->expectsOutput('Passwords did not match.')
 | |
|             ->assertExitCode(1);
 | |
|     }
 | |
| 
 | |
|     public function testRandomPasswordCanBeGenerated(): void
 | |
|     {
 | |
|         /** @var \App\Models\User $user */
 | |
|         $this->artisan('user:add', ['username' => 'test_user', '--name' => 'Test User'])
 | |
|             ->expectsQuestion('Enter a password for the user (leave blank for a random password)', NULL)
 | |
|             ->expectsOutput('User `test_user` added!')
 | |
|             ->assertExitCode(0);
 | |
|     }
 | |
| 
 | |
| }
 |