mod common;
use common::*;
use std::sync::Arc;
#[tokio::test]
async fn test_variable_heights() -> Result<(), anyhow::Error> {
let ctx = durable_sled_setup().await?;
let heights = [50, 75, 100, 125, 150];
create_messages(&ctx, (0..60).map(|i| (1000 + i, heights[(i as usize) % 5]))).await?;
let sm = Arc::new(ScrollManager::<TestMessageView>::new(
&ctx,
"true",
"timestamp DESC",
50, 2.0,
500,
)?);
let mut r = MockRenderer::new(sm.clone(), 500);
tokio::spawn({
let sm = sm.clone();
async move { sm.start().await }
});
let vs = r.next_render().await?;
r.assert(&vs, 30, 1030..=1059, None, true, false, true, 1055, 1059);
assert_eq!(r.scroll_offset, 2500);
assert_eq!(sm.mode(), ankurah_virtual_scroll::ScrollMode::Live);
let _ = r.scroll_up_collect(500).await;
let _ = r.scroll_up_collect(500).await;
let _ = r.scroll_up_collect(500).await;
assert_eq!(sm.mode(), ankurah_virtual_scroll::ScrollMode::Backward);
let selection = sm.current_selection();
assert!(selection.contains("ORDER BY timestamp DESC"),
"Backward mode should order DESC: {}", selection);
assert!(r.item_ids.len() > 30, "Should have paginated to load more items");
Ok(())
}