2ba7cc3086
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 15s
CI / ui (pull_request) Successful in 56s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m19s
Inside the Mini App, route the destructive confirmations (resign, block, unfriend) through Telegram's native showConfirm, and present the deep-link info modals (stale invite, welcome-on-redeem) as a native showPopup whose button opens the bot chat. Outside Telegram, or on a client predating the dialogs, the existing in-app Modal is used unchanged; offline also keeps the modal so the action retains its disabled state. Adds showConfirm/showPopup wrappers to telegram.ts and a pure popup-params builder (nativedialogs.ts) with unit tests; the deep-link modal components choose native vs in-app via an effect gated on insideTelegram + dialog availability.
26 lines
997 B
TypeScript
26 lines
997 B
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { BOT_BUTTON_ID, botInfoPopup } from './nativedialogs';
|
|
|
|
describe('botInfoPopup', () => {
|
|
it('inlines the bot handle and adds an open-bot button', () => {
|
|
const p = botInfoPopup('Title', 'Open the bot {bot} to play.', 'erudit_bot', 'OK');
|
|
expect(p.title).toBe('Title');
|
|
expect(p.message).toBe('Open the bot @erudit_bot to play.');
|
|
expect(p.buttons).toEqual([
|
|
{ id: BOT_BUTTON_ID, text: '@erudit_bot' },
|
|
{ id: 'ok', text: 'OK' },
|
|
]);
|
|
});
|
|
|
|
it('drops the token and the open-bot button when no username is known', () => {
|
|
const p = botInfoPopup('Title', 'Open the bot {bot} to play.', '', 'OK');
|
|
expect(p.message).toBe('Open the bot to play.');
|
|
expect(p.buttons).toEqual([{ id: 'ok', text: 'OK' }]);
|
|
});
|
|
|
|
it('preserves newlines in the message', () => {
|
|
const p = botInfoPopup('Hi', 'Welcome!\n\nUse {bot} now.', 'b', 'OK');
|
|
expect(p.message).toBe('Welcome!\n\nUse @b now.');
|
|
});
|
|
});
|