hoàn thành 58 test case
This commit is contained in:
+89
-5
@@ -488,6 +488,8 @@ FILE 11: tests/Browser/AdminEdgeCaseTest.php (3 tests)
|
||||
--------------------------------------------------------------------------------
|
||||
Chuẩn bị chung: Tạo adminUser với đầy đủ roles trong DB.
|
||||
Dọn dẹp chung: Xóa UserRole, adminUser khỏi DB; xóa prize test nếu còn sót.
|
||||
Chuẩn bị chung: Tạo adminUser với đầy đủ roles trong DB.
|
||||
Dọn dẹp chung: Xóa UserRole, adminUser khỏi DB; xóa prize test nếu còn sót.
|
||||
|
||||
[TC-55] test_prize_number_cannot_be_negative
|
||||
Mô tả : Nhập prize_number âm (-5) vào form thêm giải thưởng phải bị
|
||||
@@ -534,14 +536,94 @@ Dọn dẹp chung: Xóa UserRole, adminUser khỏi DB; xóa prize test nếu cò
|
||||
Lưu ý : Không dùng actingAs()->get(exportRoute) vì excel.blade.php gọi exit()
|
||||
sau khi xuất file — điều này sẽ terminate PHPUnit process.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
FILE 12: tests/Browser/BulkWorkflowTest.php (1 test)
|
||||
--------------------------------------------------------------------------------
|
||||
Chuẩn bị chung: Tạo adminUser (đầy đủ roles), tạo prize có prize_number=2000,
|
||||
tạo file Excel tạm chứa 1000 bản ghi người dùng bằng PhpSpreadsheet.
|
||||
Dọn dẹp chung: Xóa 1000 users + PrizeUser (theo chunk 200), xóa admin, prize, file Excel.
|
||||
|
||||
[TC-58] test_1000_users_full_workflow_from_excel
|
||||
Mô tả : Kiểm tra toàn bộ workflow hệ thống (end-to-end) với 1000 người dùng
|
||||
được cung cấp từ file Excel — từ import dữ liệu đến quay số đến
|
||||
xác nhận trên giao diện admin.
|
||||
Luồng :
|
||||
[A] Đọc file Excel → Xác nhận file có đúng 1001 dòng (1 header + 1000 data).
|
||||
[B] Bulk-import 1000 users vào DB (đọc từng ô Excel, insert theo chunk 100).
|
||||
[C] Simulate 1000 lượt quay số (bulk insert prize_users + update spined=1).
|
||||
[D] 1 lượt quay thực qua HTTP POST /updateprizeuser để kiểm tra API layer.
|
||||
[E] Browser: Admin mở /admin/users → bảng #table hiển thị.
|
||||
Browser: Admin mở /admin/prizeuser → bảng + bộ lọc ngày + nút export hiển thị.
|
||||
[F] Browser: Xác nhận href của #excel_export chứa "prizeuser/export";
|
||||
PHP route('admin/prizeuser/export') trả URL hợp lệ.
|
||||
|
||||
Chi tiết từng bước:
|
||||
|
||||
[A] Tạo & Đọc Excel:
|
||||
Chuẩn bị: generateTestExcel() dùng PhpOffice\PhpSpreadsheet tạo file .xlsx
|
||||
với 6 cột: STT | HỌ TÊN | SỐ ĐIỆN THOẠI | ĐỊA CHỈ | NGHỀ NGHIỆP | NGUỒN BIẾT SIS.
|
||||
Phone dùng dải riêng 0900000001..0900001000 (tránh đụng dữ liệu thật).
|
||||
Bước : XlsxReader::load() → getHighestDataRow() = 1001.
|
||||
Kết quả : File Excel hợp lệ, đọc được 1001 dòng.
|
||||
|
||||
[B] Bulk-import 1000 users:
|
||||
Bước : Đọc từng row (2..1001) → lấy phone, name (mb_strtoupper), address,
|
||||
job, known_sis → build $importBatch[].
|
||||
DB::table('users')->insert() theo chunk 100.
|
||||
Lấy IDs: User::whereIn('phone', ...)->pluck('id').
|
||||
Kết quả : assertCount(1000, $bulkUserIds) — 1000 users được import.
|
||||
|
||||
[C] Simulate 1000 lần quay:
|
||||
Bước : Build $spinBatch[] với user_id + prize_id cho 1000 user.
|
||||
DB::table('prize_users')->insert() theo chunk 100.
|
||||
User::whereIn('id', chunk)->update(['spined' => 1]) theo chunk 200.
|
||||
Kết quả : PrizeUser::whereIn('user_id', $bulkUserIds)->count() = 1000.
|
||||
User::whereIn(...)->where('spined', 1)->count() = 1000.
|
||||
|
||||
[D] Kiểm tra luồng spin thực qua Browser (1 user mới, giao diện game):
|
||||
Chuẩn bị: Tạo 1 user riêng (phone='0900000000') ngoài dải bulk, spined=0.
|
||||
Bước : browser->loginAs(spinUser) → visit('/game') → pause(800ms)
|
||||
→ assertAttribute('#spinButton','data-check','true')
|
||||
→ click('#spinButton') → waitForText('XIN CHÚC MỪNG', 30s)
|
||||
→ pause(1500ms) để DB commit.
|
||||
Kết quả : spinUser->refresh()->spined = 1.
|
||||
PrizeUser::where('user_id', spinUserId)->first() != null.
|
||||
Lợi thế : Dùng Browser thực → CSRF token có trong session → không bị lỗi 419.
|
||||
Đây là cách kiểm tra API /updateprizeuser trung thực nhất.
|
||||
Dọn dẹp : Xóa spinUser và PrizeUser của spinUser ngay sau khi assert.
|
||||
|
||||
[E] Browser admin xác nhận:
|
||||
Bước : browser->loginAs($adminUser).
|
||||
Truy cập /admin/users → waitFor('#table', 15) → assertPresent('#table').
|
||||
Truy cập /admin/prizeuser → waitFor('table, .table', 15)
|
||||
→ assertPresent('#fromDateTime', '#toDateTime', '#excel_export').
|
||||
Kết quả : Bảng quản lý người dùng và bảng người trúng giải đều hiển thị đúng.
|
||||
|
||||
[F] Xác nhận export Excel:
|
||||
Bước : JS override document.createElement để capture href khi click #excel_export.
|
||||
PHP: route('admin/prizeuser/export') kiểm tra URL.
|
||||
Kết quả : capturedHref chứa 'prizeuser/export' (nếu JS capture thành công).
|
||||
route('admin/prizeuser/export') chứa '/admin/prizeuser/export'.
|
||||
Lưu ý : Không gọi actingAs()->get(exportUrl) vì excel.blade.php gọi exit()
|
||||
sau khi xuất file → terminate PHPUnit process.
|
||||
|
||||
Dữ liệu test:
|
||||
- 1000 users với phone 0900000001..0900001000
|
||||
- 1 prize "Giải Thưởng Bulk Test" (prize_number=2000, prize_order=98)
|
||||
- 1 admin "DUSK BULK ADMIN" (email: dusk_bulk_admin@test.local)
|
||||
- 1 file Excel tạm (sys_get_temp_dir()/dusk_bulk_{timestamp}.xlsx)
|
||||
|
||||
Assertions: 15 assertions
|
||||
Thời gian : ~37 giây
|
||||
|
||||
================================================================================
|
||||
TỔNG KẾT
|
||||
================================================================================
|
||||
|
||||
Số file test : 11 files
|
||||
Số test cases : 57 test cases
|
||||
Số assertions : 114 assertions
|
||||
Thời gian : ~178 giây
|
||||
Số file test : 12 files
|
||||
Số test cases : 58 test cases
|
||||
Số assertions : 129 assertions
|
||||
Thời gian : ~215 giây
|
||||
Kết quả : ALL PASSED ✓
|
||||
|
||||
Phân bổ theo chức năng:
|
||||
@@ -559,8 +641,9 @@ TỔNG KẾT
|
||||
│ Logic game nâng cao │ 3 │
|
||||
│ Bảo mật & phân quyền │ 2 │
|
||||
│ Admin edge cases │ 3 │
|
||||
│ Bulk workflow 1000 users từ Excel │ 1 │
|
||||
├──────────────────────────────────────────┼────────┤
|
||||
│ TỔNG CỘNG │ 57 │
|
||||
│ TỔNG CỘNG │ 58 │
|
||||
└──────────────────────────────────────────┴────────┘
|
||||
|
||||
Công nghệ kiểm thử:
|
||||
@@ -570,6 +653,7 @@ TỔNG KẾT
|
||||
- Môi trường : WSL2 + WSLg, DUSK_HEADLESS_DISABLED=true
|
||||
- Server : php artisan serve --port=8001
|
||||
- DB : MySQL (fsg3kct926qj_quaysoDB)
|
||||
- Excel lib : PhpOffice\PhpSpreadsheet (có sẵn trong vendor/phpoffice/)
|
||||
|
||||
Sửa lỗi ứng dụng phát hiện qua quá trình kiểm thử:
|
||||
┌──────────────────────────────────────────────────────────────────────┐
|
||||
|
||||
Reference in New Issue
Block a user