#![cfg(target_arch = "wasm32")]
use std::sync::Arc;
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
use digdigdig3::connector_manager::ExchangeHub;
use digdigdig3::core::types::{AccountType, ExchangeId};
use digdigdig3::core::websocket::KlineInterval;
use digdigdig3_station::bar_align::load_bar_aligned;
use digdigdig3_station::series::Kind;
use digdigdig3_station::BarAlignedSeries;
fn window() -> (i64, i64) {
let now = js_sys::Date::now() as i64;
(now - 2 * 86_400_000, now)
}
fn times(series: &BarAlignedSeries) -> Vec<i64> {
match series {
BarAlignedSeries::Klines(v) => v.iter().map(|b| b.open_time).collect(),
BarAlignedSeries::Scalar(v) => v.iter().map(|b| b.bar_open_time).collect(),
}
}
async fn lighter_hub() -> Arc<ExchangeHub> {
let hub = Arc::new(ExchangeHub::new());
hub.connect_public(ExchangeId::Lighter, false)
.await
.expect("Lighter connect_public (direct, CORS *)");
hub
}
#[wasm_bindgen_test]
async fn wasm_mark_price_klines() {
let hub = lighter_hub().await;
let iv = KlineInterval::new("1h");
let (start, end) = window();
let series = load_bar_aligned(
&hub, ExchangeId::Lighter, AccountType::FuturesCross, "BTC",
&Kind::MarkPriceKline(iv.clone()), &iv, start, end,
)
.await
.expect("Lighter mark price klines (wasm, direct)");
let t = times(&series);
web_sys::console::log_1(&format!("wasm Lighter mark klines: {} bars", t.len()).into());
assert!(!t.is_empty(), "expected ≥1 bar");
assert!(t.windows(2).all(|w| w[1] > w[0]), "timestamps must strictly increase");
assert!(t.iter().all(|x| x % 3_600_000 == 0), "bars must be 1h-grid-aligned");
}
#[wasm_bindgen_test]
async fn wasm_funding_rate_scalar() {
let hub = lighter_hub().await;
let iv = KlineInterval::new("1h");
let (start, end) = window();
let series = load_bar_aligned(
&hub, ExchangeId::Lighter, AccountType::FuturesCross, "BTC",
&Kind::FundingRate, &iv, start, end,
)
.await
.expect("Lighter funding rate (wasm, direct)");
let t = times(&series);
web_sys::console::log_1(&format!("wasm Lighter funding: {} bars", t.len()).into());
assert!(!t.is_empty(), "expected ≥1 funding bar");
assert!(t.iter().all(|x| x % 3_600_000 == 0), "funding bars must be 1h-grid-aligned");
}