feat(ui): wire the chip-pack purchase to Robokassa
Replace the disabled "Soon" pack action with a real purchase: the Wallet opens a money order (wallet.order) and sends the player to the provider's hosted-payment page (window.open via openExternalUrl); the chips are credited later by the verified server callback. Add a public-offer link under the packs (paying accepts the offer). Codec order round-trip unit test + a mock-e2e purchase test; the Google Play stub and the chip-spend paths are unchanged.
This commit is contained in:
@@ -41,6 +41,7 @@ import type {
|
||||
Variant,
|
||||
WordCheckResult,
|
||||
Wallet,
|
||||
WalletOrder,
|
||||
Catalog,
|
||||
} from '../model';
|
||||
import { valueForLetter } from '../alphabet';
|
||||
@@ -225,6 +226,14 @@ export class MockGateway implements GatewayClient {
|
||||
}
|
||||
return this.cloneWallet();
|
||||
}
|
||||
|
||||
async walletOrder(productId: string): Promise<WalletOrder> {
|
||||
const p = this.mockCatalog.products.find((x) => x.productId === productId);
|
||||
if (!p || p.kind !== 'pack') throw new GatewayError('not_a_pack');
|
||||
// No real provider in mock: return a stub launch URL so the e2e can assert the purchase reaches
|
||||
// the provider hand-off without leaving the app.
|
||||
return { orderId: 'mock-order-' + productId, redirectUrl: 'https://mock.local/robokassa?order=' + productId };
|
||||
}
|
||||
private cloneWallet(): Wallet {
|
||||
return {
|
||||
segments: this.mockWallet.segments.map((s) => ({ ...s })),
|
||||
|
||||
Reference in New Issue
Block a user