feat: add smoke tests, agent credit ledger, and player cashback page

Introduce admin smoke-test suite with API probes, agent credit transaction history, and player cashback records; fix SmokeTestModule DI and polish admin/player UI assets.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-09 16:05:48 +08:00
parent 9c6c5e51f3
commit d5e7c8edb3
52 changed files with 3357 additions and 67 deletions

View File

@@ -129,7 +129,13 @@ export const adminPagesMs: Record<string, string> = {
'agent.credit.decrease': 'Kurang',
'agent.col.credit_type': 'Jenis',
'agent.col.credit_change': 'Perubahan',
'agent.col.credit_before': 'Sebelum',
'agent.col.credit_after': 'Selepas',
'agent.credit_tx.filter_agent_ph': 'Nama pengguna ejen',
'agent.credit_tx.filter_agent_id': 'ID ejen',
'agent.credit_tx.filter_agent_id_ph': 'ID pengguna',
'agent.credit_tx.col.operator': 'Operator',
'agent.credit_tx.view_all': 'Lihat semua lejar kredit',
'agent.col.no_records': 'Tiada rekod',
'agent.btn.confirm_adjust': 'Sahkan',
'agent.field.select_user': 'Pilih pengguna',
@@ -597,4 +603,39 @@ export const adminPagesMs: Record<string, string> = {
'msg.freeze_extra': ' Mereka tidak akan dapat log masuk.',
'msg.freeze_done': '{action} selesai',
'msg.freeze_failed': '{action} gagal',
'smoke.intro': 'Jalankan ujian asap automatik: penyelesaian, peraturan pertaruhan, kredit ejen, rebat, sondakan DB, dan integrasi pertaruhan→penyelesaian→dompet.',
'smoke.intro_rule': 'Kes peraturan menggunakan logik sama seperti ujian unit Jest; tiada data perniagaan ditulis.',
'smoke.intro_db': 'Kit Database hanya semak sambungan dan konfigurasi (baca sahaja).',
'smoke.intro_bet_flow': 'Kit aliran pertaruhan mencipta perlawanan/pemain sementara, mengesahkan bekuan/payout/kredit ejen, kemudian membersihkan.',
'smoke.intro_note': 'Merangkumi kebanyakan regresi UAT; semak rebat secara manual jika perlu.',
'smoke.field.suites': 'Kit ujian',
'smoke.ph.suites': 'Pilih kit untuk dijalankan',
'smoke.btn.run': 'Jalankan ujian',
'smoke.last_run': 'Jalanan terakhir',
'smoke.results_title': 'Keputusan kes',
'smoke.empty': 'Belum dijalankan. Klik Jalankan ujian.',
'smoke.stat.pass': 'Lulus',
'smoke.stat.fail': 'Gagal',
'smoke.stat.total': 'Jumlah',
'smoke.col.id': 'ID',
'smoke.col.suite': 'Kit',
'smoke.col.name': 'Kes',
'smoke.col.uat': 'UAT',
'smoke.col.duration': 'Masa',
'smoke.col.steps': 'Langkah',
'smoke.col.message': 'Mesej',
'smoke.no_steps': 'Tiada butiran langkah',
'smoke.status.PASS': 'Lulus',
'smoke.status.FAIL': 'Gagal',
'smoke.status.SKIP': 'Langkau',
'smoke.msg.all_passed': 'Semua lulus ({n})',
'smoke.msg.has_failures': '{n} kes gagal',
'smoke.msg.run_failed': 'Gagal menjalankan ujian',
'smoke.log_title': 'Log terperinci',
'smoke.btn.copy_all': 'Salin semua log',
'smoke.btn.copy_one': 'Salin',
'smoke.msg.copy_ok': 'Disalin ke papan keratan',
'smoke.msg.copy_failed': 'Gagal menyalin — pilih log secara manual',
'audit.action.RUN_SMOKE_TESTS': 'Jalankan ujian asap',
};