hoàn thành chức năng các test case chính
This commit is contained in:
+162
-10
@@ -2,13 +2,15 @@
|
||||
|
||||
namespace Tests\Browser;
|
||||
|
||||
use App\Models\PrizeUser;
|
||||
use App\Models\User;
|
||||
use Laravel\Dusk\Browser;
|
||||
use Tests\DuskTestCase;
|
||||
|
||||
class GamePageTest extends DuskTestCase
|
||||
{
|
||||
/**
|
||||
* Trang game hiển thị đúng khi chưa đăng nhập.
|
||||
* Trang game tải được khi chưa đăng nhập.
|
||||
*/
|
||||
public function test_game_page_loads_when_guest(): void
|
||||
{
|
||||
@@ -19,35 +21,185 @@ class GamePageTest extends DuskTestCase
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang chủ (/) redirect về game.
|
||||
* URL gốc (/) redirect về /game.
|
||||
*/
|
||||
public function test_root_redirects_to_game(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/')
|
||||
->assertPathIs('/game');
|
||||
->assertPresent('#wheelCanvas'); // / và /game cùng render game
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Trang game hiển thị vòng quay may mắn.
|
||||
* Vòng quay (canvas) hiển thị trên trang game.
|
||||
*/
|
||||
public function test_game_page_shows_lucky_wheel(): void
|
||||
public function test_game_page_shows_lucky_wheel_canvas(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/game')
|
||||
->assertPresent('#wheel, canvas, .wheel, [id*="wheel"], [class*="wheel"]');
|
||||
->assertPresent('#wheelCanvas');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Popup luật chơi có thể tải được.
|
||||
* Nút quay hiển thị trên trang game.
|
||||
*/
|
||||
public function test_game_rule_endpoint_returns_content(): void
|
||||
public function test_spin_button_is_present(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/game/rule')
|
||||
->assertSee('luật');
|
||||
$browser->visit('/game')
|
||||
->assertPresent('#spinButton');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Banner "Thể lệ tham dự" hiển thị.
|
||||
*/
|
||||
public function test_game_rule_ribbon_is_present(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/game')
|
||||
->assertPresent('#game_rule');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Khi guest vào /game, hiển thị thông báo yêu cầu đăng nhập.
|
||||
*/
|
||||
public function test_guest_sees_login_prompt_on_game(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/logout')
|
||||
->visit('/game')
|
||||
->assertPresent('.alert_wheel_spin')
|
||||
->assertPresent('a[href*="login"]');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Khi đã đăng nhập và chưa quay, nút quay ở trạng thái sẵn sàng.
|
||||
*/
|
||||
public function test_logged_in_user_can_see_spin_button_enabled(): void
|
||||
{
|
||||
$phone = '09' . rand(10000000, 99999999);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($phone) {
|
||||
$browser->visit('/logout')
|
||||
->visit('/login')
|
||||
->pause(300)
|
||||
->type('name', 'Spin Test User')
|
||||
->type('phone', $phone)
|
||||
->type('address', 'TP.HCM')
|
||||
->radio('known_sis', '1')
|
||||
->type('job', 'Kỹ sư')
|
||||
->press('Gửi thông tin')
|
||||
->waitForText('thành công', 10)
|
||||
->assertPathIs('/game')
|
||||
->assertAttribute('#spinButton', 'data-check', 'true');
|
||||
});
|
||||
|
||||
User::where('phone', $phone)->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Khi đã quay rồi (spined=1), nút quay bị khóa.
|
||||
*/
|
||||
public function test_already_spined_user_sees_spin_button_disabled(): void
|
||||
{
|
||||
$phone = '09' . rand(10000000, 99999999);
|
||||
|
||||
// Tạo user với spined=1
|
||||
$user = User::create([
|
||||
'name' => 'SPINED USER',
|
||||
'phone' => $phone,
|
||||
'email' => $phone . '@phone.local',
|
||||
'password' => bcrypt('test123'),
|
||||
'address' => 'Cần Thơ',
|
||||
'known_sis' => 1,
|
||||
'job' => 'Kỹ sư',
|
||||
'status' => 1,
|
||||
'spined' => 1,
|
||||
]);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($user) {
|
||||
$browser->visit('/logout')
|
||||
->loginAs($user)
|
||||
->visit('/game')
|
||||
->assertAttribute('#spinButton', 'data-check', 'false');
|
||||
});
|
||||
|
||||
$user->delete();
|
||||
}
|
||||
|
||||
/**
|
||||
* Popup luật chơi tải nội dung.
|
||||
*/
|
||||
public function test_game_rule_popup_loads(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/logout')
|
||||
->visit('/game')
|
||||
->pause(500);
|
||||
|
||||
// Dismiss alerts che button rồi click bằng JS
|
||||
$browser->script("document.querySelectorAll('.alert').forEach(el => el.remove())");
|
||||
$browser->script("document.getElementById('game_rule').click()");
|
||||
|
||||
$browser->pause(800)
|
||||
->assertPresent('#gamerule');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* API /game/rule trả về nội dung HTML.
|
||||
*/
|
||||
public function test_game_rule_api_returns_html(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
// /game/rule được gọi qua AJAX, trả về fragment HTML không có <body>
|
||||
$browser->visit('/game/rule')
|
||||
->assertSourceHas('class='); // snippet HTML luon co class=
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* API /checkspined trả lỗi khi chưa đăng nhập.
|
||||
*/
|
||||
public function test_checkspined_returns_error_for_guest(): void
|
||||
{
|
||||
$this->browse(function (Browser $browser) {
|
||||
$browser->visit('/logout')
|
||||
->visit('/checkspined')
|
||||
->assertSee('error');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* API /checkspined trả spined=0 khi đăng nhập user mới.
|
||||
*/
|
||||
public function test_checkspined_returns_zero_for_new_user(): void
|
||||
{
|
||||
$phone = '09' . rand(10000000, 99999999);
|
||||
$user = User::create([
|
||||
'name' => 'CHECK SPINED USER',
|
||||
'phone' => $phone,
|
||||
'email' => $phone . '@phone.local',
|
||||
'password' => bcrypt('test123'),
|
||||
'address' => 'Cần Thơ',
|
||||
'known_sis' => 0,
|
||||
'job' => 'Sinh viên',
|
||||
'status' => 1,
|
||||
'spined' => 0,
|
||||
]);
|
||||
|
||||
$this->browse(function (Browser $browser) use ($user) {
|
||||
$browser->visit('/logout')
|
||||
->loginAs($user)
|
||||
->visit('/checkspined')
|
||||
->assertSee('"spined":0');
|
||||
});
|
||||
|
||||
$user->delete();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user