using ZB.MOM.WW.CBDD.Core; using ZB.MOM.WW.CBDD.Core.Collections; using ZB.MOM.WW.CBDD.Core.Storage; using ZB.MOM.WW.CBDD.Core.Transactions; using ZB.MOM.WW.CBDD.Shared; using ZB.MOM.WW.CBDD.Shared.TestDbContext_TestDbContext_Mappers; using Xunit; namespace ZB.MOM.WW.CBDD.Tests; public class InsertBulkTests : IDisposable { private readonly string _testFile; private readonly Shared.TestDbContext _db; /// /// Initializes a new instance of the class. /// public InsertBulkTests() { _testFile = Path.GetTempFileName(); _db = new Shared.TestDbContext(_testFile); } /// /// Disposes test resources. /// public void Dispose() { _db.Dispose(); } /// /// Verifies bulk inserts are immediately persisted and visible. /// [Fact] public void InsertBulk_PersistsData_ImmediatelyVisible() { var users = new List(); for (int i = 0; i < 50; i++) { users.Add(new User { Id = ZB.MOM.WW.CBDD.Bson.ObjectId.NewObjectId(), Name = $"User {i}", Age = 20 }); } _db.Users.InsertBulk(users); _db.SaveChanges(); var insertedUsers = _db.Users.FindAll().ToList(); insertedUsers.Count.ShouldBe(50); } /// /// Verifies bulk inserts spanning multiple pages persist correctly. /// [Fact] public void InsertBulk_SpanningMultiplePages_PersistsCorrectly() { // 16KB page. User ~50 bytes. 400 users -> ~20KB -> 2 pages. var users = new List(); for (int i = 0; i < 400; i++) { users.Add(new User { Id = ZB.MOM.WW.CBDD.Bson.ObjectId.NewObjectId(), Name = $"User {i} with some long padding text to ensure we fill space {new string('x', 50)}", Age = 20 }); } _db.Users.InsertBulk(users); _db.SaveChanges(); _db.Users.Count().ShouldBe(400); } }