using BuildFlow.Infrastructure.Messaging;
using FluentAssertions;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using RabbitMQ.Client;
using Xunit;
namespace BuildFlow.Rag.Tests;
/// RabbitMQ 连接注册的凭据 fail-closed 行为测试。
public sealed class RabbitMqExtensionsTests
{
[Theory]
[InlineData(null)]
[InlineData("")]
[InlineData("REPLACE_IN_SECRETS")]
public void MissingOrPlaceholderPasswordIsRejected(string? password)
{
var configuration = BuildConfiguration(password);
var services = new ServiceCollection();
services.AddRabbitMq(configuration);
var act = () => services.BuildServiceProvider().GetRequiredService();
act.Should()
.Throw()
.WithMessage("*RabbitMq:Password*");
}
[Fact]
public void ConfiguredPasswordIsUsedWithoutFallback()
{
var configuration = BuildConfiguration("configured-secret");
var services = new ServiceCollection();
services.AddRabbitMq(configuration);
var factory = services.BuildServiceProvider().GetRequiredService();
factory.Password.Should().Be("configured-secret");
}
private static IConfiguration BuildConfiguration(string? password)
=> new ConfigurationBuilder()
.AddInMemoryCollection(new Dictionary
{
["RabbitMq:Host"] = "rabbitmq.test",
["RabbitMq:Port"] = "5672",
["RabbitMq:Username"] = "buildflow",
["RabbitMq:Password"] = password,
})
.Build();
}