|
| 1 | +// SPDX-FileCopyrightText: 2025 RAprogramm <[email protected]> |
| 2 | +// SPDX-License-Identifier: MIT |
| 3 | + |
| 4 | +#![cfg(target_arch = "wasm32")] |
| 5 | + |
| 6 | +use js_sys::{Object, Reflect}; |
| 7 | +use leptos::prelude::use_context; |
| 8 | +use telegram_webapp_sdk::{ |
| 9 | + core::{context::TelegramContext, init::init_sdk}, |
| 10 | + leptos::provide_telegram_context |
| 11 | +}; |
| 12 | +use wasm_bindgen::JsValue; |
| 13 | +use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure}; |
| 14 | +use web_sys::window; |
| 15 | + |
| 16 | +wasm_bindgen_test_configure!(run_in_browser); |
| 17 | + |
| 18 | +fn install_webapp(init_data: &str) -> Result<(), JsValue> { |
| 19 | + let win = window().ok_or_else(|| JsValue::from_str("no window"))?; |
| 20 | + let telegram = Object::new(); |
| 21 | + let webapp = Object::new(); |
| 22 | + |
| 23 | + Reflect::set(&webapp, &"initData".into(), &JsValue::from_str(init_data))?; |
| 24 | + Reflect::set( |
| 25 | + &webapp, |
| 26 | + &"themeParams".into(), |
| 27 | + &JsValue::from(Object::new()) |
| 28 | + )?; |
| 29 | + |
| 30 | + Reflect::set(&telegram, &"WebApp".into(), &webapp)?; |
| 31 | + Reflect::set(&win, &"Telegram".into(), &telegram)?; |
| 32 | + |
| 33 | + Ok(()) |
| 34 | +} |
| 35 | + |
| 36 | +#[wasm_bindgen_test] |
| 37 | +fn provide_telegram_context_succeeds_after_init() -> Result<(), JsValue> { |
| 38 | + install_webapp("query_id=test&auth_date=1&hash=abc")?; |
| 39 | + init_sdk()?; |
| 40 | + |
| 41 | + leptos::prelude::Owner::new().with(|| { |
| 42 | + provide_telegram_context()?; |
| 43 | + let ctx = use_context::<TelegramContext>() |
| 44 | + .ok_or_else(|| JsValue::from_str("context not provided"))?; |
| 45 | + |
| 46 | + assert_eq!(ctx.init_data.query_id.as_deref(), Some("test")); |
| 47 | + Ok(()) |
| 48 | + }) |
| 49 | +} |
| 50 | + |
| 51 | +#[wasm_bindgen_test] |
| 52 | +fn provide_telegram_context_fails_without_init() { |
| 53 | + leptos::prelude::Owner::new().with(|| { |
| 54 | + let result = provide_telegram_context(); |
| 55 | + assert!(result.is_err()); |
| 56 | + }) |
| 57 | +} |
0 commit comments