using NATS.Server.TestUtilities;

namespace NATS.Server.JetStream.Tests;

public class JetStreamStreamMessageApiTests
{
    [Fact]
    public async Task Stream_msg_get_delete_and_purge_change_state()
    {
        await using var fx = await JetStreamApiFixture.StartWithStreamAsync("ORDERS", "orders.*");
        var ack = await fx.PublishAndGetAckAsync("orders.created", "1");

        var get = await fx.RequestLocalAsync("$JS.API.STREAM.MSG.GET.ORDERS", $"{{\"seq\":{ack.Seq}}}");
        get.StreamMessage.ShouldNotBeNull();

        var del = await fx.RequestLocalAsync("$JS.API.STREAM.MSG.DELETE.ORDERS", $"{{\"seq\":{ack.Seq}}}");
        del.Success.ShouldBeTrue();

        var purge = await fx.RequestLocalAsync("$JS.API.STREAM.PURGE.ORDERS", "{}");
        purge.Success.ShouldBeTrue();
    }
}
