logo SERENITY
Game Systems Foundation
Search Results for

    Show / Hide Table of Contents

    Class StructuredStoreContractTests

    Shared behavior contract every IStructuredStore backend must satisfy identically: insert, upsert-if-better (both directions, including the equal-is-not-better rule), query filtering/distinct-collapsing/multi-field ordering/pagination, comparison + distinct counting, delete-by-query, trim-beyond (including the folded write-path trim), and health checks. Concrete subclasses provide a fresh store instance per test via CreateStoreAsync().

    Inheritance
    object
    StructuredStoreContractTests
    FileBackedKeyValueStructuredStoreContractTests
    HttpStructuredStoreContractTests
    InMemoryStructuredStoreContractTests
    KeyValueStructuredStoreContractTests
    Inherited Members
    object.ToString()
    object.Equals(object)
    object.Equals(object, object)
    object.ReferenceEquals(object, object)
    object.GetHashCode()
    object.GetType()
    object.MemberwiseClone()
    Namespace: Serenity.StructuredPersistence.Tests.Infrastructure.Contract
    Assembly: Tests.dll
    Syntax
    public abstract class StructuredStoreContractTests
    Remarks

    Every operation scopes to Serenity.StructuredPersistence.Tests.Infrastructure.Contract.StructuredStoreContractTests.PartitionValue via GroupScope() so this suite also passes against a partition-sharded backend (e.g. a key-value store), which requires an Equal filter on its partition field for every query/count/delete/trim.

    Constructors

    StructuredStoreContractTests()

    Declaration
    protected StructuredStoreContractTests()

    Fields

    NoCancellation

    Declaration
    protected static readonly CancellationToken NoCancellation
    Field Value
    Type Description
    CancellationToken

    PartitionField

    Declaration
    protected const string PartitionField = "group_key"
    Field Value
    Type Description
    string

    PlayerField

    Declaration
    protected const string PlayerField = "player"
    Field Value
    Type Description
    string

    ScoreField

    Declaration
    protected const string ScoreField = "score"
    Field Value
    Type Description
    string

    Table

    Declaration
    protected static readonly StoreTable Table
    Field Value
    Type Description
    StoreTable

    TicksField

    Declaration
    protected const string TicksField = "ticks"
    Field Value
    Type Description
    string

    Methods

    CountAsync_DistinctBy_CollapsesToDistinctGroups()

    Declaration
    public Task CountAsync_DistinctBy_CollapsesToDistinctGroups()
    Returns
    Type Description
    Task

    CountAsync_WithComparisonFilter_CountsOnlyStrictlyBetterRecords()

    Declaration
    public Task CountAsync_WithComparisonFilter_CountsOnlyStrictlyBetterRecords()
    Returns
    Type Description
    Task

    CreateStoreAsync()

    Creates a fresh, empty IStructuredStore instance.

    Declaration
    protected abstract Task<IStructuredStore> CreateStoreAsync()
    Returns
    Type Description
    Task<IStructuredStore>

    DeleteByQueryAsync_RemovesOnlyMatchingRecords()

    Declaration
    public Task DeleteByQueryAsync_RemovesOnlyMatchingRecords()
    Returns
    Type Description
    Task

    DistinctByPlayer()

    Declaration
    protected static IReadOnlyList<string> DistinctByPlayer()
    Returns
    Type Description
    IReadOnlyList<string>

    GroupScope()

    Declaration
    protected static IReadOnlyList<FieldFilter> GroupScope()
    Returns
    Type Description
    IReadOnlyList<FieldFilter>

    HealthCheckAsync_ReturnsTrue()

    Declaration
    public Task HealthCheckAsync_ReturnsTrue()
    Returns
    Type Description
    Task

    InsertAsync_FoldedTrim_BoundsStoredCountImmediately()

    Declaration
    public Task InsertAsync_FoldedTrim_BoundsStoredCountImmediately()
    Returns
    Type Description
    Task

    InsertAsync_MultipleRecords_QueryOrdersByDescendingScore()

    Declaration
    public Task InsertAsync_MultipleRecords_QueryOrdersByDescendingScore()
    Returns
    Type Description
    Task

    KeyFields()

    Declaration
    protected static IReadOnlyList<string> KeyFields()
    Returns
    Type Description
    IReadOnlyList<string>

    Ordering(StructuredSortDirection)

    Declaration
    protected static IReadOnlyList<OrderField> Ordering(StructuredSortDirection scoreDirection)
    Parameters
    Type Name Description
    StructuredSortDirection scoreDirection
    Returns
    Type Description
    IReadOnlyList<OrderField>

    QueryAsync_DistinctBy_CollapsesToFirstRecordPerGroupUnderOrdering()

    Declaration
    public Task QueryAsync_DistinctBy_CollapsesToFirstRecordPerGroupUnderOrdering()
    Returns
    Type Description
    Task

    QueryAsync_EqualNullFilter_MatchesOnlyNullValuedRecords()

    Declaration
    public Task QueryAsync_EqualNullFilter_MatchesOnlyNullValuedRecords()
    Returns
    Type Description
    Task

    QueryAsync_GreaterThanNullFilter_MatchesOnlyNonNullRecords()

    Declaration
    public Task QueryAsync_GreaterThanNullFilter_MatchesOnlyNonNullRecords()
    Returns
    Type Description
    Task

    QueryAsync_LessThanConcreteValueFilter_IncludesNullValuedRecords()

    Declaration
    public Task QueryAsync_LessThanConcreteValueFilter_IncludesNullValuedRecords()
    Returns
    Type Description
    Task

    QueryAsync_LessThanNullFilter_MatchesNothing()

    Declaration
    public Task QueryAsync_LessThanNullFilter_MatchesNothing()
    Returns
    Type Description
    Task

    QueryAsync_NoFilterMatch_ReturnsEmpty()

    Declaration
    public Task QueryAsync_NoFilterMatch_ReturnsEmpty()
    Returns
    Type Description
    Task

    QueryAsync_OffsetAndLimit_Paginate()

    Declaration
    public Task QueryAsync_OffsetAndLimit_Paginate()
    Returns
    Type Description
    Task

    QueryAsync_TiedScores_BreakTiesByTicksThenPlayerOrdinal()

    Declaration
    public Task QueryAsync_TiedScores_BreakTiesByTicksThenPlayerOrdinal()
    Returns
    Type Description
    Task

    QueryWindowAroundAsync_RadiusLargerThanScope_ReturnsFullScope()

    Declaration
    public Task QueryWindowAroundAsync_RadiusLargerThanScope_ReturnsFullScope()
    Returns
    Type Description
    Task

    QueryWindowAroundAsync_TargetAbsent_ReturnsEmpty()

    Declaration
    public Task QueryWindowAroundAsync_TargetAbsent_ReturnsEmpty()
    Returns
    Type Description
    Task

    QueryWindowAroundAsync_TargetInMiddle_ReturnsCenteredWindow()

    Declaration
    public Task QueryWindowAroundAsync_TargetInMiddle_ReturnsCenteredWindow()
    Returns
    Type Description
    Task

    QueryWindowAroundAsync_TargetNearTop_ClampsWindowStart()

    Declaration
    public Task QueryWindowAroundAsync_TargetNearTop_ClampsWindowStart()
    Returns
    Type Description
    Task

    Record(string, double, long)

    Declaration
    protected static StructuredRecord Record(string player, double score, long ticks = 0)
    Parameters
    Type Name Description
    string player
    double score
    long ticks
    Returns
    Type Description
    StructuredRecord

    RecordWithNullScore(string, long)

    A record whose score is explicitly Null — for the null-semantics contract cases (relational subclasses declare the score field nullable).

    Declaration
    protected static StructuredRecord RecordWithNullScore(string player, long ticks = 0)
    Parameters
    Type Name Description
    string player
    long ticks
    Returns
    Type Description
    StructuredRecord

    SetUpStoreAsync()

    Declaration
    public Task SetUpStoreAsync()
    Returns
    Type Description
    Task

    TrimBeyondAsync_KeepsOnlyTheBestWithinScope()

    Declaration
    public Task TrimBeyondAsync_KeepsOnlyTheBestWithinScope()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_Ascending_LowerValueReplacesExisting()

    Declaration
    public Task UpsertIfBetterAsync_Ascending_LowerValueReplacesExisting()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_Descending_BetterValueReplacesExisting()

    Declaration
    public Task UpsertIfBetterAsync_Descending_BetterValueReplacesExisting()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_Descending_WorseValueDoesNotReplaceExisting()

    Declaration
    public Task UpsertIfBetterAsync_Descending_WorseValueDoesNotReplaceExisting()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_EqualValue_DoesNotReplaceExisting()

    Declaration
    public Task UpsertIfBetterAsync_EqualValue_DoesNotReplaceExisting()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_ExistingNullComparisonValue_AscendingCandidateLoses()

    Declaration
    public Task UpsertIfBetterAsync_ExistingNullComparisonValue_AscendingCandidateLoses()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_ExistingNullComparisonValue_DescendingCandidateWins()

    Declaration
    public Task UpsertIfBetterAsync_ExistingNullComparisonValue_DescendingCandidateWins()
    Returns
    Type Description
    Task

    UpsertIfBetterAsync_NoExistingRecord_Inserts()

    Declaration
    public Task UpsertIfBetterAsync_NoExistingRecord_Inserts()
    Returns
    Type Description
    Task
    In this article
    © 2026 Serenity. All Rights Reserved