using Dpz.Core.MessageQueue.Models;
using Dpz.Core.MessageQueue.RabbitMQ;

namespace Dpz.Core.MessageQueue.Test.RabbitMQ;

public class NullMessageOutboxStoreTests
{
    [Fact]
    public void Instance_ShouldReturnSingleton()
    {
        var a = NullMessageOutboxStore.Instance.Value;
        var b = NullMessageOutboxStore.Instance.Value;
        Assert.Same(a, b);
    }

    [Fact]
    public async Task AllOperations_ShouldCompleteSuccessfullyWithoutSideEffects()
    {
        var store = NullMessageOutboxStore.Instance.Value;

        await store.CreateAsync("m-1", "T", "ex", "rk", "{}", "src");
        await store.MarkSentAsync("m-1");
        await store.MarkPublishFailedAsync("m-1", "boom");
        await store.MarkConsumedAsync("m-1");
        await store.MarkConsumeFailedAsync("m-1", "boom");
    }

    [Fact]
    public async Task GetPendingPublishRetryAsync_ShouldReturnEmptyList()
    {
        var result = await NullMessageOutboxStore.Instance.Value.GetPendingPublishRetryAsync(50);
        Assert.NotNull(result);
        Assert.Empty(result);
        Assert.IsAssignableFrom<IReadOnlyList<MessageOutboxEntry>>(result);
    }

    [Fact]
    public async Task GetPendingConsumeRetryAsync_ShouldReturnEmptyList()
    {
        var result = await NullMessageOutboxStore.Instance.Value.GetPendingConsumeRetryAsync(50);
        Assert.NotNull(result);
        Assert.Empty(result);
    }
}
评论加载中...