use std::sync::Arc;
use wx_rust_common::clock::{FakeClock, SystemClock, WxClock};
use wx_rust_common::config::{WxConfigStorage, WxDefaultConfig};
#[test]
fn system_clock_now_ms_monotonic_and_epoch_scale() {
let clock = SystemClock;
let t1 = clock.now_ms();
let t2 = clock.now_ms();
assert!(t2 >= t1, "两次调用不回拨:t1={t1} t2={t2}");
assert!(
(1_000_000_000_000..3_000_000_000_000).contains(&t1),
"UNIX 毫秒量级:{t1}"
);
}
#[test]
fn fake_clock_advance_changes_now_ms() {
let fake = FakeClock::new(1_700_000_000_000);
assert_eq!(fake.now_ms(), 1_700_000_000_000);
fake.advance_ms(500);
assert_eq!(fake.now_ms(), 1_700_000_000_500);
let handle = fake.clone();
handle.advance_ms(1_000);
assert_eq!(fake.now_ms(), 1_700_000_001_500);
}
#[test]
fn fake_clock_token_expiry_flips_without_sleep() {
let fake = FakeClock::new(0);
let config = WxDefaultConfig::new("appid", "secret");
assert!(config.set_clock(Arc::new(fake.clone())), "首次注入生效");
config.update_access_token("token-A", 7200);
assert!(!config.is_access_token_expired(), "未 advance 时不过期");
fake.advance_ms((7200 + 1) * 1000);
assert!(
config.is_access_token_expired(),
"advance 越过 expires_in 后翻转"
);
assert!(!config.set_clock(Arc::new(FakeClock::new(0))));
}
#[test]
fn default_config_uses_system_clock_unchanged() {
let config = WxDefaultConfig::new("appid", "secret");
assert!(config.is_access_token_expired());
config.update_access_token("token-B", 7200);
assert!(!config.is_access_token_expired(), "默认时钟下 7200s 未过期");
}