mod common;
use eventcore_testing::contract::ContractTestEvent;
use eventcore_types::{EventStore, StreamId, StreamVersion, StreamWrites, collect_events};
#[tokio::test]
async fn append_events_persists_large_batch_across_chunk_boundary() {
let store = common::create_test_store().await;
let stream_id =
StreamId::try_new(format!("batch::large::{}", uuid::Uuid::now_v7())).expect("valid stream");
const EVENT_COUNT: usize = 1200;
let mut writes = StreamWrites::new()
.register_stream(stream_id.clone(), StreamVersion::new(0))
.expect("register_stream should succeed");
for _ in 0..EVENT_COUNT {
writes = writes
.append(ContractTestEvent::new(stream_id.clone()))
.expect("append should succeed");
}
let _slice = store
.append_events(writes)
.await
.expect("append_events should persist the full batch atomically");
let stream = store
.read_stream::<ContractTestEvent>(stream_id.clone())
.await
.expect("read_stream should succeed");
let events: Vec<ContractTestEvent> = collect_events(stream).await.expect("collecting events");
assert_eq!(events.len(), EVENT_COUNT);
}