Files
CBDD/tests/CBDD.Tests/DocumentCollectionTests.cs
Joseph Doherty 3ffd468c79
All checks were successful
NuGet Publish / build-and-pack (push) Successful in 45s
NuGet Publish / publish-to-gitea (push) Successful in 52s
Fix audit findings for coverage, architecture checks, and XML docs
2026-02-20 15:43:25 -05:00

250 lines
6.4 KiB
C#
Executable File

using ZB.MOM.WW.CBDD.Bson;
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;
namespace ZB.MOM.WW.CBDD.Tests;
public class DocumentCollectionTests : IDisposable
{
private readonly string _dbPath;
private readonly string _walPath;
private readonly Shared.TestDbContext _db;
/// <summary>
/// Initializes a new instance of the <see cref="DocumentCollectionTests"/> class.
/// </summary>
public DocumentCollectionTests()
{
_dbPath = Path.Combine(Path.GetTempPath(), $"test_collection_{Guid.NewGuid()}.db");
_walPath = Path.Combine(Path.GetTempPath(), $"test_collection_{Guid.NewGuid()}.wal");
_db = new Shared.TestDbContext(_dbPath);
}
/// <summary>
/// Verifies insert and find-by-id operations.
/// </summary>
[Fact]
public void Insert_And_FindById_Works()
{
// Arrange
var user = new User { Name = "Alice", Age = 30 };
// Act
var id = _db.Users.Insert(user);
_db.SaveChanges();
var found = _db.Users.FindById(id);
// Assert
found.ShouldNotBeNull();
found.Id.ShouldBe(id);
found.Name.ShouldBe("Alice");
found.Age.ShouldBe(30);
}
/// <summary>
/// Verifies find-by-id returns null when no document is found.
/// </summary>
[Fact]
public void FindById_Returns_Null_When_Not_Found()
{
// Act
var found = _db.Users.FindById(ObjectId.NewObjectId());
// Assert
found.ShouldBeNull();
}
/// <summary>
/// Verifies find-all returns all entities.
/// </summary>
[Fact]
public void FindAll_Returns_All_Entities()
{
// Arrange
_db.Users.Insert(new User { Name = "Alice", Age = 30 });
_db.Users.Insert(new User { Name = "Bob", Age = 25 });
_db.Users.Insert(new User { Name = "Charlie", Age = 35 });
_db.SaveChanges();
// Act
var all = _db.Users.FindAll().ToList();
// Assert
all.Count.ShouldBe(3);
all.ShouldContain(u => u.Name == "Alice");
all.ShouldContain(u => u.Name == "Bob");
all.ShouldContain(u => u.Name == "Charlie");
}
/// <summary>
/// Verifies update modifies an existing entity.
/// </summary>
[Fact]
public void Update_Modifies_Entity()
{
// Arrange
var user = new User { Name = "Alice", Age = 30 };
var id = _db.Users.Insert(user);
_db.SaveChanges();
// Act
user.Age = 31;
var updated = _db.Users.Update(user);
_db.SaveChanges();
// Assert
updated.ShouldBeTrue();
var found = _db.Users.FindById(id);
found.ShouldNotBeNull();
found.Age.ShouldBe(31);
}
/// <summary>
/// Verifies update returns false when the entity does not exist.
/// </summary>
[Fact]
public void Update_Returns_False_When_Not_Found()
{
// Arrange
var user = new User { Id = ObjectId.NewObjectId(), Name = "Ghost", Age = 99 };
// Act
var updated = _db.Users.Update(user);
_db.SaveChanges();
// Assert
updated.ShouldBeFalse();
}
/// <summary>
/// Verifies delete removes an entity.
/// </summary>
[Fact]
public void Delete_Removes_Entity()
{
// Arrange
var user = new User { Name = "Alice", Age = 30 };
var id = _db.Users.Insert(user);
_db.SaveChanges();
// Act
var deleted = _db.Users.Delete(id);
_db.SaveChanges();
// Assert
deleted.ShouldBeTrue();
_db.Users.FindById(id).ShouldBeNull();
}
/// <summary>
/// Verifies delete returns false when the entity does not exist.
/// </summary>
[Fact]
public void Delete_Returns_False_When_Not_Found()
{
// Act
var deleted = _db.Users.Delete(ObjectId.NewObjectId());
_db.SaveChanges();
// Assert
deleted.ShouldBeFalse();
}
/// <summary>
/// Verifies count returns the correct entity count.
/// </summary>
[Fact]
public void Count_Returns_Correct_Count()
{
// Arrange
_db.Users.Insert(new User { Name = "Alice", Age = 30 });
_db.Users.Insert(new User { Name = "Bob", Age = 25 });
_db.SaveChanges();
// Act
var count = _db.Users.Count();
// Assert
count.ShouldBe(2);
}
/// <summary>
/// Verifies predicate queries filter entities correctly.
/// </summary>
[Fact]
public void Find_With_Predicate_Filters_Correctly()
{
// Arrange
_db.Users.Insert(new User { Name = "Alice", Age = 30 });
_db.Users.Insert(new User { Name = "Bob", Age = 25 });
_db.Users.Insert(new User { Name = "Charlie", Age = 35 });
_db.SaveChanges();
// Act
var over30 = _db.Users.Find(u => u.Age > 30).ToList();
// Assert
over30.Count().ShouldBe(1);
over30[0].Name.ShouldBe("Charlie");
}
/// <summary>
/// Verifies bulk insert stores multiple entities.
/// </summary>
[Fact]
public void InsertBulk_Inserts_Multiple_Entities()
{
// Arrange
var users = new[]
{
new User { Name = "User1", Age = 20 },
new User { Name = "User2", Age = 21 },
new User { Name = "User3", Age = 22 }
};
// Act
var count = _db.Users.InsertBulk(users);
_db.SaveChanges();
// Assert
count.Count.ShouldBe(3);
_db.Users.Count().ShouldBe(3);
}
/// <summary>
/// Verifies inserts preserve an explicitly assigned identifier.
/// </summary>
[Fact]
public void Insert_With_SpecifiedId_RetainsId()
{
// Arrange
var id = ObjectId.NewObjectId();
var user = new User { Id = id, Name = "SpecifiedID", Age = 40 };
// Act
var insertedId = _db.Users.Insert(user);
_db.SaveChanges();
// Assert
insertedId.ShouldBe(id);
var found = _db.Users.FindById(id);
found.ShouldNotBeNull();
found.Id.ShouldBe(id);
found.Name.ShouldBe("SpecifiedID");
}
/// <summary>
/// Releases test resources.
/// </summary>
public void Dispose()
{
_db?.Dispose();
}
}