/
evo
/
docviz
Обзор
Документация
Войти
/
evo
/
docviz
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
tests/Unit/UserModelTest.php
150 строк
5 KB
evo
Checkout for tests
08 фев 2026, 09:59
Верифицирован
08 фев 2026, 09:59
ccd7e85
Код
Авторство
О чём код?
<?php namespace Tests\Unit; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\Schema; use Tests\TestCase; class UserModelTest extends TestCase { use RefreshDatabase; public function test_users_table_has_expected_columns(): void { $this->assertTrue(Schema::hasColumns('users', [ 'id', 'name', 'email', 'email_verified_at', 'password', 'about', 'avatar', 'gender', 'birth_date', 'role', 'banned_until', 'remember_token', 'created_at', 'updated_at', ])); } public function test_user_fillable_contains_profile_fields(): void { $fillable = (new User())->getFillable(); $this->assertContains('name', $fillable); $this->assertContains('email', $fillable); $this->assertContains('password', $fillable); $this->assertContains('about', $fillable); $this->assertContains('avatar', $fillable); $this->assertContains('gender', $fillable); $this->assertContains('birth_date', $fillable); $this->assertContains('role', $fillable); $this->assertContains('banned_until', $fillable); } public function test_user_casts_include_expected_types(): void { $casts = (new User())->getCasts(); $this->assertSame('datetime', $casts['email_verified_at']); $this->assertSame('hashed', $casts['password']); $this->assertSame('datetime', $casts['banned_until']); } public function test_user_factory_persists_profile_fields(): void { $bannedUntil = now()->addDay(); $birthDate = now()->subYears(30); $user = User::factory()->create([ 'about' => 'About me', 'avatar' => 'avatars/test.png', 'gender' => 'male', 'birth_date' => $birthDate, 'role' => 'admin', 'banned_until' => $bannedUntil, ]); $user->refresh(); $this->assertDatabaseHas('users', [ 'id' => $user->id, 'about' => 'About me', 'avatar' => 'avatars/test.png', 'gender' => 'male', 'role' => 'admin', ]); $this->assertSame( $bannedUntil->toDateTimeString(), $user->banned_until?->toDateTimeString() ); $this->assertSame($birthDate->format('Y-m-d'), $user->birth_date->format('Y-m-d')); } public function test_user_age_attribute_calculated_from_birth_date(): void { $birthDate = now()->subYears(25); $user = User::factory()->create(['birth_date' => $birthDate]); $this->assertSame(25, $user->age); } public function test_user_age_attribute_returns_null_when_no_birth_date(): void { $user = User::factory()->create(['birth_date' => null]); $this->assertNull($user->age); } public function test_user_relationships(): void { $user = User::factory()->create(); $this->assertInstanceOf(\Illuminate\Database\Eloquent\Relations\HasMany::class, $user->media()); $this->assertInstanceOf(\Illuminate\Database\Eloquent\Relations\HasMany::class, $user->createdCategories()); $this->assertInstanceOf(\Illuminate\Database\Eloquent\Relations\HasMany::class, $user->createdPages()); $this->assertInstanceOf(\Illuminate\Database\Eloquent\Relations\HasMany::class, $user->appeals()); } public function test_user_has_role_trait_methods(): void { $admin = User::factory()->admin()->create(); $moderator = User::factory()->moderator()->create(); $editor = User::factory()->editor()->create(); $user = User::factory()->user()->create(); $this->assertTrue($admin->hasRole('admin')); $this->assertTrue($admin->hasRole(['admin', 'moderator'])); $this->assertTrue($admin->isAdmin()); $this->assertTrue($moderator->isModerator()); $this->assertTrue($admin->isEditor()); $this->assertTrue($editor->isEditor()); $this->assertTrue($user->isUser()); } public function test_user_is_primary_admin(): void { $firstUser = User::factory()->create(); $secondUser = User::factory()->create(); $this->assertTrue($firstUser->isPrimaryAdmin()); $this->assertFalse($secondUser->isPrimaryAdmin()); } public function test_user_is_banned(): void { $bannedUser = User::factory()->create([ 'role' => 'banned', 'banned_until' => now()->addDay(), ]); $unbannedUser = User::factory()->user()->create(); $this->assertTrue($bannedUser->isBanned()); $this->assertFalse($unbannedUser->isBanned()); } }