using NATS.Server.JetStream.Models;
using NATS.Server.TestUtilities;

namespace NATS.Server.JetStream.Tests;

public class JetStreamStreamPolicyRuntimeTests
{
    [Fact]
    public async Task Discard_new_rejects_publish_when_max_bytes_exceeded()
    {
        // Each message = subject("s.a"=3) + payload(2) + overhead(16) = 21 bytes.
        // MaxBytes=25 holds exactly one message; second publish is rejected.
        await using var fx = await JetStreamApiFixture.StartWithStreamConfigAsync(new StreamConfig
        {
            Name = "S",
            Subjects = ["s.*"],
            MaxBytes = 25,
            Discard = DiscardPolicy.New,
        });

        (await fx.PublishAndGetAckAsync("s.a", "12")).ErrorCode.ShouldBeNull();
        (await fx.PublishAndGetAckAsync("s.a", "34")).ErrorCode.ShouldNotBeNull();
    }
}
