. */ namespace Database\Factories; use Illuminate\Support\Str; use Illuminate\Database\Eloquent\Factories\Factory; use Awobaz\Compoships\Database\Eloquent\Factories\ComposhipsFactory; use App\Account; use App\AccountCreationToken; use App\Http\Controllers\Account\AuthenticateController as WebAuthenticateController; use App\Space; class AccountFactory extends Factory { use ComposhipsFactory; protected $model = Account::class; public function definition() { $domain = Space::count() == 0 ? Space::factory()->create() : Space::first(); return [ 'username' => $this->faker->username, 'display_name' => $this->faker->name, 'domain' => $domain->domain, 'user_agent' => $this->faker->userAgent, 'confirmation_key' => Str::random(WebAuthenticateController::$emailCodeSize), 'ip_address' => $this->faker->ipv4, 'created_at' => $this->faker->dateTimeBetween('-1 year'), 'dtmf_protocol' => array_rand(Account::$dtmfProtocols), 'activated' => true, 'admin' => false ]; } public function fromSpace(Space $space) { return $this->state(fn (array $attributes) => [ 'domain' => $space->domain ]); } public function admin() { return $this->state(fn (array $attributes) => [ 'admin' => true, ]); } public function superAdmin() { return $this->state(function (array $attributes) { $space = Space::where('domain', $attributes['domain'])->first(); $space->super = true; $space->save(); return [ 'admin' => true, ]; }); } public function deactivated() { return $this->state(fn (array $attributes) => [ 'activated' => false, ]); } public function withEmail() { return $this->state(fn (array $attributes) => [ 'email' => $this->faker->email, ]); } public function withConsumedAccountCreationToken() { return $this->state(fn (array $attributes) => [])->afterCreating(function (Account $account) { $accountCreationToken = new AccountCreationToken; $accountCreationToken->token = 'test_token'; $accountCreationToken->account_id = $account->id; $accountCreationToken->used = true; $accountCreationToken->save(); }); } }