using NATS.Server.JetStream.Consumers;
using NATS.Server.JetStream.Models;
using NATS.Server.JetStream.Storage;
using NATS.Server.JetStream;

namespace NATS.Server.JetStream.Tests;

public class JetStreamConsumerFlowReplayParityTests
{
    [Fact]
    public void Push_consumer_enqueues_flow_control_and_heartbeat_frames_when_enabled()
    {
        var engine = new PushConsumerEngine();
        var consumer = new ConsumerHandle("ORDERS", new ConsumerConfig
        {
            AckPolicy = AckPolicy.Explicit,
            FlowControl = true,
            HeartbeatMs = 1000,
            RateLimitBps = 1024,
        });

        engine.Enqueue(consumer, new StoredMessage
        {
            Sequence = 1,
            Subject = "orders.created",
            Payload = "payload"u8.ToArray(),
        });

        consumer.PushFrames.Count.ShouldBe(3);
        consumer.PushFrames.Any(f => f.IsFlowControl).ShouldBeTrue();
        consumer.PushFrames.Any(f => f.IsHeartbeat).ShouldBeTrue();
    }
}
