hoàn thành chức năng các test case chính

This commit is contained in:
2026-04-08 07:46:11 +07:00
parent 92a150ab53
commit c026e4cc2c
11 changed files with 1278 additions and 20 deletions
+137
View File
@@ -0,0 +1,137 @@
<?php
namespace Tests\Browser;
use App\Models\Role;
use App\Models\User;
use App\Models\UserRole;
use Laravel\Dusk\Browser;
use Tests\DuskTestCase;
class AdminUserTest extends DuskTestCase
{
private User $adminUser;
private User $targetUser;
protected function setUp(): void
{
parent::setUp();
$this->adminUser = User::create([
'name' => 'DUSK USER ADMIN',
'email' => 'dusk_user_admin@test.local',
'phone' => '09' . rand(10000000, 99999999),
'password' => bcrypt('dusk_admin_pwd_2026'),
'status' => 1,
'address' => 'Test',
'known_sis'=> 0,
'job' => 'Admin',
'spined' => 0,
]);
$roles = Role::where('role_status', 1)->get();
foreach ($roles as $role) {
UserRole::create(['user_id' => $this->adminUser->id, 'role_id' => $role->id]);
}
// Tạo user mục tiêu để test cập nhật
$targetPhone = '09' . rand(10000000, 99999999);
$this->targetUser = User::create([
'name' => 'DUSK TARGET USER',
'email' => $targetPhone . '@phone.local',
'phone' => $targetPhone,
'password' => bcrypt('test123'),
'status' => 1,
'address' => 'Cần Thơ',
'known_sis'=> 1,
'job' => 'Sinh viên',
'spined' => 0,
]);
}
protected function tearDown(): void
{
UserRole::where('user_id', $this->adminUser->id)->delete();
$this->adminUser->delete();
$this->targetUser->delete();
parent::tearDown();
}
/**
* Trang danh sách user hiển thị.
*/
public function test_user_list_page_loads(): void
{
$this->browse(function (Browser $browser) {
$browser->loginAs($this->adminUser)
->visit('/admin/users')
->assertPresent('table, .table');
});
}
/**
* Tên user mới tạo xuất hiện trong danh sách.
*/
public function test_user_list_shows_target_user(): void
{
// DB assertion: target user có trong query của controller (status != '')
$userInList = User::where('id', $this->targetUser->id)
->where('status', '!=', '')
->first();
$this->assertNotNull($userInList, 'Target user must be included in admin user list query');
$this->assertEquals($this->targetUser->email, $userInList->email);
// Browser: trang list load được với table
$this->browse(function (Browser $browser) {
$browser->loginAs($this->adminUser)
->visit('/admin/users')
->waitFor('#table', 5)
->assertPresent('#table');
});
}
/**
* Trang form cập nhật user hiển thị đúng thông tin.
*/
public function test_edit_user_form_shows_existing_data(): void
{
$this->browse(function (Browser $browser) {
$browser->loginAs($this->adminUser)
->visit('/admin/users/update?id=' . $this->targetUser->id)
->assertInputValue('name', $this->targetUser->name)
->assertInputValue('email', $this->targetUser->email);
});
}
/**
* Cập nhật tên user thành công và kiểm tra DB.
*/
public function test_update_user_name_successfully(): void
{
$newName = 'Updated Dusk Name';
$this->browse(function (Browser $browser) use ($newName) {
$browser->loginAs($this->adminUser)
->visit('/admin/users/update?id=' . $this->targetUser->id)
->clear('name')
->type('name', $newName)
->press('Cập nhật')
->waitFor('.alert-success', 10);
});
// Kiểm tra DB: admin không chuyển uppercase
$updated = User::find($this->targetUser->id);
$this->assertEquals($newName, $updated->name);
}
/**
* Xem trang tài khoản admin.
*/
public function test_admin_account_page_shows_user_info(): void
{
$this->browse(function (Browser $browser) {
$browser->loginAs($this->adminUser)
->visit('/admin/account')
// Email là input field (readonly), dùng assertInputValue
->assertInputValue('email', $this->adminUser->email);
});
}
}