68 lines
1.8 KiB
PHP
68 lines
1.8 KiB
PHP
<?php
|
||
|
||
namespace Database\Factories;
|
||
|
||
use App\Models\User;
|
||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||
use Illuminate\Support\Facades\Hash;
|
||
use Illuminate\Support\Str;
|
||
|
||
/**
|
||
* @extends Factory<User>
|
||
*/
|
||
class UserFactory extends Factory
|
||
{
|
||
/**
|
||
* The current password being used by the factory.
|
||
*/
|
||
protected static ?string $password;
|
||
|
||
/**
|
||
* Define the model's default state.
|
||
*
|
||
* @return array<string, mixed>
|
||
*/
|
||
public function definition(): array
|
||
{
|
||
return [
|
||
'name' => fake()->name(),
|
||
'email' => fake()->unique()->safeEmail(),
|
||
'email_verified_at' => now(),
|
||
'password' => static::$password ??= Hash::make('password'),
|
||
'password_changed_at' => now(),
|
||
'remember_token' => Str::random(10),
|
||
];
|
||
}
|
||
|
||
/**
|
||
* Indicate that the model's email address should be unverified.
|
||
*/
|
||
public function unverified(): static
|
||
{
|
||
return $this->state(fn (array $attributes) => [
|
||
'email_verified_at' => null,
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* Пользователь с истёкшим сроком действия пароля (для тестов ИАФ.3).
|
||
*/
|
||
public function passwordExpired(): static
|
||
{
|
||
return $this->state(fn (array $attributes) => [
|
||
'password_changed_at' => now()->subDays((int) config('security.password.max_age_days') + 1),
|
||
]);
|
||
}
|
||
|
||
/**
|
||
* Пользователь с подтверждённым вторым фактором (для тестов ИАФ.4).
|
||
*/
|
||
public function withMfa(): static
|
||
{
|
||
return $this->state(fn (array $attributes) => [
|
||
'mfa_secret' => 'JBSWY3DPEHPK3PXP',
|
||
'mfa_confirmed_at' => now(),
|
||
]);
|
||
}
|
||
}
|