// Copyright 2025 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Mirrors server/jetstream_consumer_test.go in the NATS server Go source.
// ALL tests in this file are deferred: they require a running JetStream server.

namespace ZB.MOM.NatsNet.Server.IntegrationTests.JetStream;

/// <summary>
/// Integration tests for JetStream consumer operations.
/// Mirrors server/jetstream_consumer_test.go.
/// All tests are deferred pending JetStream server infrastructure.
/// </summary>
[Trait("Category", "Integration")]
public sealed class JetStreamConsumerTests
{
    [Fact(Skip = "deferred: requires running JetStream server")]
    public void MultipleFiltersLastPerSubject_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Delete_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void StuckAckPending_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Unpin_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void WithPriorityGroups_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PriorityPullRequests_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void RetryAckAfterTimeout_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void SwitchLeaderDuringInflightAck_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void MessageDeletedDuringRedelivery_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DeliveryCount_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Create_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void EphemeralRecoveryAfterServerRestart_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void MaxDeliveryAndServerRestart_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DeleteAndServerRestart_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DurableReconnectWithOnlyPending_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Reconnect_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DurableReconnect_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void CleanupWithRetentionPolicy_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void InternalClientLeak_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NoMsgPayload_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PendingCountWithRedeliveries_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void MaxDeliverUpdate_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void StreamUpdate_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void UpdateFilterSubject_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PullConsumerOneShotOnMaxAckLimit_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PendingLowerThanStreamFirstSeq_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void EOFBugNewFileStore_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Purge_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void FilterUpdate_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void AckFloorWithExpired_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DefaultsFromStream_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NakThenAckFloorMove_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PauseViaEndpoint_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void SurvivesRestart_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void DontDecrementPendingCountOnSkippedMsg_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PendingCountAfterMsgAckAboveFloor_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PullCrossAccountExpires_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PullLastPerSubjectRedeliveries_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PullLargeBatchExpired_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void StateAlwaysFromStore_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void PullNoWaitBatchLargerThanPending_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NotInactiveDuringAckWait_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NotInactiveDuringAckWaitBackoff_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void Prioritized_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void MaxDeliverUnderflow_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NoWaitNoMessagesOnEos_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NoWaitNoMessagesOnEosWithDeliveredMsgs_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void WithCorruptStateIsDeleted_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void NoDeleteAfterConcurrentShutdownAndLeaderChange_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void OnlyRecalculatePendingIfFilterSubjectUpdated_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void CheckNumPending_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void AllowOverlappingSubjectsIfNotSubset_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void ResetToSequence_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void ResetToSequenceConstraintOnStartSeq_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void ResetToSequenceConstraintOnStartTime_ShouldSucceed() { }

    [Fact(Skip = "deferred: requires running JetStream server")]
    public void SingleFilterSubjectInFilterSubjects_ShouldSucceed() { }
}
