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);
r.up_no_render(500, 1050, 1054).await;
assert_eq!(r.scroll_offset, 2000);
r.up_no_render(500, 1045, 1049).await;
assert_eq!(r.scroll_offset, 1500);
r.scroll_up_and_expect(
500, 40, 1020..=1059, Some(1044),
true, true, false, 1040, 1044, 2000,
"TRUE AND \"timestamp\" <= 1059 ORDER BY timestamp DESC LIMIT 41",
).await?;
assert_eq!(sm.mode(), ankurah_virtual_scroll::ScrollMode::Backward);
Ok(())
}