Skip to content

createMockPlatform 測試

目前每一個整合測試都需要完整的 Postgres/Redis/platform/operator 環境跑起來。createMockPlatform 是平台錢包/RGS 端點的可簽名記憶體模擬實作,可以讓你的 ProviderClient 程式碼完全不需要網路就能跑起來。

ts
import { createMockPlatform, ProviderClient } from '@moosehq/provider-sdk'

const mock = createMockPlatform({ secret: 'test-secret', tenantId: 'acme-studio' })
mock.registerSession({
  sessionToken: 'sess-1',
  playerRef: 'player-1',
  gameId: 'book-of-acme',
  operatorId: 'acme-casino',
  currency: 'USD',
  config: { rtpProfile: 'RTP_96_0', minBetMinor: 100, maxBetMinor: 10000, language: 'en' },
  balanceMinor: 100000,
})

const client = new ProviderClient({
  baseUrl: 'http://mock',
  tenantId: 'acme-studio',
  secret: 'test-secret',
  fetch: mock.fetch, // 這就是注入點——ProviderClient 的其他部分完全不變
})

const session = await client.verifySession('sess-1') // 對應到上面註冊的記憶體 session
const bet = await client.submitTransaction({ transactionId: crypto.randomUUID(), sessionToken: 'sess-1', type: 'BET', roundId: crypto.randomUUID(), roundComplete: false, playerRef: session.playerRef, amount: 500, currency: session.currency, gameId: session.gameId })

它會真的針對你給的 secret 驗證請求簽名——用錯誤金鑰的客戶端打這個模擬平台,一樣會得到真正的 401,跟打正式平台的行為一致,所以你整合程式碼裡的簽名錯誤在這裡就會現形,不會被默默放行。它也在簡化的程度上模擬了錢包契約:餘額不足或下注超出 minBetMinor/maxBetMinor 時回 DECLINED,以及對已經見過的 transactionId 做冪等重放、不會重複扣款。

這是給你自己的整合測試用的,不能取代上線前對真實平台的測試——SDK 的 examples/smoke.ts 是一個對正在運行的平台實例做的真實端對端連通性檢查,上線檢查清單則涵蓋了上線前還需要確認的其他事項。

這個模擬平台驗證了什麼,沒驗證什麼

行為是否模擬
針對你傳入的 secret 驗證簽名是——金鑰錯誤一樣會回 401,和真實平台一致
餘額不足或下注超出限額時回 DECLINED是,簡化層級的模擬
對已見過的 transactionId 做冪等重放是——不會重複扣款
限流、金鑰輪替寬限期、nonce 重放偵測
Session 撤銷/免費旋轉回呼(平台 → 廠商方向)否——這些是你的伺服端接收的呼叫,不是 ProviderClient 發出的;請直接用 verifyPlatformSignature 測試你自己的回呼處理程式
Central Config 解析的細節(RTP 設定檔目錄、依運營商的覆寫規則)否——registerSessionconfig 就是你傳入的值

完整參考

createMockPlatform 確切的 MockPlatformOptionsMockPlatform 型別,見 @moosehq/provider-sdk 參考文件的離線模擬平台章節。