// 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_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 core operations.
/// Mirrors server/jetstream_test.go.
/// All tests are deferred pending JetStream server infrastructure.
/// </summary>
[Trait("Category", "Integration")]
public sealed class JetStreamTests
{
    [Fact(Skip = "deferred: requires running JetStream server")]
    public void AddStreamOverlapWithJSAPISubjects_ShouldSucceed() { }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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