using ZB.MOM.WW.CBDD.Bson;
using ZB.MOM.WW.CBDD.Core;
using ZB.MOM.WW.CBDD.Core.Collections;
using ZB.MOM.WW.CBDD.Core.Compression;
using ZB.MOM.WW.CBDD.Core.Indexing;
using ZB.MOM.WW.CBDD.Core.Metadata;
using ZB.MOM.WW.CBDD.Core.Storage;
namespace ZB.MOM.WW.CBDD.Shared;
///
/// Test context with manual collection initialization
/// (Source Generator will automate this in the future)
///
public partial class TestDbContext : DocumentDbContext
{
public DocumentCollection AnnotatedUsers { get; set; } = null!;
public DocumentCollection Orders { get; set; } = null!;
public DocumentCollection TestDocuments { get; set; } = null!;
public DocumentCollection OrderDocuments { get; set; } = null!;
public DocumentCollection ComplexDocuments { get; set; } = null!;
public DocumentCollection Users { get; set; } = null!;
public DocumentCollection ComplexUsers { get; set; } = null!;
public DocumentCollection AutoInitEntities { get; set; } = null!;
public DocumentCollection People { get; set; } = null!;
public DocumentCollection PeopleV2 { get; set; } = null!;
public DocumentCollection Products { get; set; } = null!;
public DocumentCollection IntEntities { get; set; } = null!;
public DocumentCollection StringEntities { get; set; } = null!;
public DocumentCollection GuidEntities { get; set; } = null!;
public DocumentCollection CustomKeyEntities { get; set; } = null!;
public DocumentCollection AsyncDocs { get; set; } = null!;
public DocumentCollection SchemaUsers { get; set; } = null!;
public DocumentCollection VectorItems { get; set; } = null!;
public DocumentCollection GeoItems { get; set; } = null!;
// Source Generator Feature Tests
public DocumentCollection DerivedEntities { get; set; } = null!;
public DocumentCollection ComputedPropertyEntities { get; set; } = null!;
public DocumentCollection AdvancedCollectionEntities { get; set; } = null!;
public DocumentCollection PrivateSetterEntities { get; set; } = null!;
public DocumentCollection InitSetterEntities { get; set; } = null!;
// Circular Reference Tests
public DocumentCollection Employees { get; set; } = null!;
public DocumentCollection CategoryRefs { get; set; } = null!;
public DocumentCollection ProductRefs { get; set; } = null!;
// Nullable String Id Test (UuidEntity scenario with inheritance)
public DocumentCollection MockCounters { get; set; } = null!;
// Temporal Types Test (DateTimeOffset, TimeSpan, DateOnly, TimeOnly)
public DocumentCollection TemporalEntities { get; set; } = null!;
public TestDbContext(string databasePath)
: this(databasePath, PageFileConfig.Default, CompressionOptions.Default)
{
}
public TestDbContext(string databasePath, CompressionOptions compressionOptions)
: this(databasePath, PageFileConfig.Default, compressionOptions)
{
}
public TestDbContext(string databasePath, PageFileConfig pageFileConfig)
: this(databasePath, pageFileConfig, CompressionOptions.Default)
{
}
public TestDbContext(
string databasePath,
PageFileConfig pageFileConfig,
CompressionOptions? compressionOptions,
MaintenanceOptions? maintenanceOptions = null)
: base(databasePath, pageFileConfig, compressionOptions, maintenanceOptions)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity();
modelBuilder.Entity().ToCollection("users");
modelBuilder.Entity().ToCollection("complex_users");
modelBuilder.Entity().ToCollection("auto_init_entities");
modelBuilder.Entity().ToCollection("people_collection").HasIndex(p => p.Age);
modelBuilder.Entity().ToCollection("peoplev2_collection").HasIndex(p => p.Age);
modelBuilder.Entity().ToCollection("products_collection").HasIndex(p => p.Price);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Id);
modelBuilder.Entity().HasKey(e => e.Code);
modelBuilder.Entity().ToCollection("async_docs");
modelBuilder.Entity().ToCollection("schema_users").HasKey(e => e.Id);
modelBuilder.Entity();
modelBuilder.Entity();
modelBuilder.Entity();
modelBuilder.Entity()
.ToCollection("vector_items")
.HasVectorIndex(x => x.Embedding, dimensions: 3, metric: VectorMetric.L2, name: "idx_vector");
modelBuilder.Entity()
.ToCollection("geo_items")
.HasSpatialIndex(x => x.Location, name: "idx_spatial");
modelBuilder.Entity()
.HasKey(x => x.Id)
.HasConversion();
// Source Generator Feature Tests
modelBuilder.Entity().ToCollection("derived_entities");
modelBuilder.Entity().ToCollection("computed_property_entities");
modelBuilder.Entity().ToCollection("advanced_collection_entities");
modelBuilder.Entity().ToCollection("private_setter_entities");
modelBuilder.Entity().ToCollection("init_setter_entities");
// Circular Reference Tests
modelBuilder.Entity().ToCollection("employees");
modelBuilder.Entity().ToCollection("category_refs");
modelBuilder.Entity().ToCollection("product_refs");
// Nullable String Id Test (UuidEntity scenario)
modelBuilder.Entity().ToCollection("mock_counters").HasKey(e => e.Id);
// Temporal Types Test
modelBuilder.Entity().ToCollection("temporal_entities").HasKey(e => e.Id);
}
public void ForceCheckpoint()
{
Engine.Checkpoint();
}
public StorageEngine Storage => Engine;
}