hoàn thành chức năng các test case chính
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Browser;
|
||||
|
||||
use App\Models\Prize;
|
||||
use App\Models\PrizeUser;
|
||||
use App\Models\Role;
|
||||
use App\Models\User;
|
||||
use App\Models\UserRole;
|
||||
use Laravel\Dusk\Browser;
|
||||
use Tests\DuskTestCase;
|
||||
|
||||
class AdminPrizeTest extends DuskTestCase
|
||||
{
|
||||
private User $adminUser;
|
||||
|
||||
protected function setUp(): void
|
||||
{
|
||||
parent::setUp();
|
||||
$this->adminUser = User::create([
|
||||
'name' => 'DUSK PRIZE ADMIN',
|
||||
'email' => 'dusk_prize_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]);
|
||||
}
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
UserRole::where('user_id', $this->adminUser->id)->delete();
|
||||
$this->adminUser->delete();
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang danh sách giải thưởng hiển thị đúng.
|
||||
*/
|
||||
public function test_prize_list_page_loads(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prizes')
|
||||
->assertPresent('table, .table');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang thêm mới giải thưởng hiển thị form.
|
||||
*/
|
||||
public function test_add_prize_form_loads(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prize/update?id=0')
|
||||
->assertPresent('input[name="prize_name"]')
|
||||
->assertPresent('input[name="prize_order"]')
|
||||
->assertPresent('select[name="prize_status"]');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit form thêm giải thưởng rỗng phải hiện lỗi.
|
||||
*/
|
||||
public function test_add_prize_with_empty_name_shows_error(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prize/update?id=0');
|
||||
// Strip HTML5 required nếu có, rồi submit để Server-side validation chạy
|
||||
$browser->script("document.querySelectorAll('input[required]').forEach(function(el){el.removeAttribute('required');})");
|
||||
$browser->press('Thêm mới')
|
||||
->pause(500)
|
||||
->assertPresent('.text-danger, .alert-danger, [class*="error"]');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Thêm mới giải thưởng thành công và kiểm tra DB.
|
||||
*/
|
||||
public function test_create_prize_successfully(): void
|
||||
{
|
||||
$prizeName = 'Dusk Test Prize ' . rand(1000, 9999);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($prizeName) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prize/update?id=0')
|
||||
->pause(500)
|
||||
->type('prize_name', $prizeName)
|
||||
->type('prize_number', '100')
|
||||
->type('prize_order', '99')
|
||||
->select('prize_status', '1')
|
||||
->press('Thêm mới')
|
||||
->waitFor('.alert-success', 10);
|
||||
});
|
||||
|
||||
// Kiểm tra DB
|
||||
$prize = Prize::where('prize_name', $prizeName)->first();
|
||||
$this->assertNotNull($prize, 'Giải thưởng phải được tạo trong DB');
|
||||
$this->assertEquals(1, $prize->prize_status);
|
||||
$this->assertEquals(100, $prize->prize_number);
|
||||
$this->assertEquals(99, $prize->prize_order);
|
||||
|
||||
// Dọn dẹp
|
||||
$prize->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Cập nhật tên giải thưởng thành công.
|
||||
*/
|
||||
public function test_update_prize_successfully(): void
|
||||
{
|
||||
// Tạo giải thưởng để cập nhật
|
||||
$prize = Prize::create([
|
||||
'prize_name' => 'Dusk Prize To Update',
|
||||
'prize_status' => 1,
|
||||
'prize_number' => 10,
|
||||
'prize_order' => 88,
|
||||
'user_id' => $this->adminUser->id,
|
||||
]);
|
||||
$newName = 'Dusk Prize Updated ' . rand(1000, 9999);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($prize, $newName) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prize/update?id=' . $prize->id)
|
||||
->clear('prize_name')
|
||||
->type('prize_name', $newName)
|
||||
->press('Cập nhật')
|
||||
->waitFor('.alert-success', 10);
|
||||
});
|
||||
|
||||
// Kiểm tra DB
|
||||
$updated = Prize::find($prize->id);
|
||||
$this->assertEquals($newName, $updated->prize_name);
|
||||
|
||||
$prize->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Xóa giải thưởng thành công.
|
||||
*/
|
||||
public function test_delete_prize_successfully(): void
|
||||
{
|
||||
$prize = Prize::create([
|
||||
'prize_name' => 'Dusk Prize To Delete',
|
||||
'prize_status' => 1,
|
||||
'prize_number' => 5,
|
||||
'prize_order' => 77,
|
||||
'user_id' => $this->adminUser->id,
|
||||
]);
|
||||
$prizeId = $prize->id;
|
||||
|
||||
$this->browse(function (Browser $browser) use ($prizeId) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prizes')
|
||||
->visit('/admin/prize/delete/' . $prizeId)
|
||||
->pause(1000); // redirect()->back() sau khi xóa
|
||||
});
|
||||
|
||||
// Kiểm tra DB: giải thưởng đã bị xóa
|
||||
$this->assertNull(Prize::find($prizeId), 'Giải thưởng phải bị xóa khỏi DB');
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang danh sách người trúng giải hiển thị.
|
||||
*/
|
||||
public function test_prize_winner_list_loads(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prizeuser')
|
||||
->assertPresent('table, .table');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang danh sách người trúng giải có ô lọc ngày.
|
||||
*/
|
||||
public function test_prize_winner_list_has_date_filter(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prizeuser')
|
||||
->assertPresent('#fromDateTime, #toDateTime');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Link export Excel hoạt động.
|
||||
*/
|
||||
public function test_prize_winner_export_link_present(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->loginAs($this->adminUser)
|
||||
->visit('/admin/prizeuser')
|
||||
->assertPresent('#excel_export');
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user