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); }); } }