telegram_webapp_sdk/utils/
check_env.rs1use js_sys::Reflect;
2use web_sys::window;
3
4pub fn is_telegram_env() -> bool {
6 let win = match window() {
7 Some(w) => w,
8 None => return false
9 };
10
11 let telegram = match Reflect::get(&win, &"Telegram".into()) {
12 Ok(v) if !v.is_undefined() => v,
13 _ => return false
14 };
15
16 let _webapp = match Reflect::get(&telegram, &"WebApp".into()) {
17 Ok(v) if !v.is_undefined() => v,
18 _ => return false
19 };
20
21 true
22}
23
24#[cfg(test)]
25mod tests {
26 use js_sys::{Object, Reflect};
27 use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure};
28 use web_sys::window;
29
30 use super::*;
31
32 wasm_bindgen_test_configure!(run_in_browser);
33
34 #[allow(dead_code)]
35 fn cleanup() {
36 let win = window().unwrap();
37 let _ = Reflect::delete_property(&win, &"Telegram".into());
38 }
39
40 #[wasm_bindgen_test]
41 #[allow(dead_code)]
42 fn returns_false_without_telegram() {
43 cleanup();
44 assert!(!is_telegram_env());
45 }
46
47 #[wasm_bindgen_test]
48 #[allow(dead_code)]
49 fn returns_false_without_webapp() {
50 cleanup();
51 let win = window().unwrap();
52 let telegram = Object::new();
53 let _ = Reflect::set(&win, &"Telegram".into(), &telegram);
54 assert!(!is_telegram_env());
55 }
56
57 #[wasm_bindgen_test]
58 #[allow(dead_code)]
59 fn returns_true_with_telegram_and_webapp() {
60 cleanup();
61 let win = window().unwrap();
62 let telegram = Object::new();
63 let webapp = Object::new();
64 let _ = Reflect::set(&win, &"Telegram".into(), &telegram);
65 let _ = Reflect::set(&telegram, &"WebApp".into(), &webapp);
66 assert!(is_telegram_env());
67 }
68}