using DigitalData.MessagingService.Client; using DigitalData.MessagingService.Abstraction; namespace DigitalData.MessagingService.Tests.Integration; /// /// Integration tests for the URL-based /// overload. All tests run inside so they share the already-established /// static connection. The URL overload is exercised via and /// to verify its delegation and guard behavior. /// [Collection(EmailSenderCollection.Name)] public sealed class EmailSenderUrlOverloadTests { private static readonly string ValidUrl = $"amqp://{RabbitMqTestConfig.HostName}:{RabbitMqTestConfig.Port}"; private static readonly string ValidUrlWithVHost = $"amqp://{RabbitMqTestConfig.HostName}:{RabbitMqTestConfig.Port}/myvhost"; [Fact] public void ConnectRabbitMq_UrlOverload_WhenAlreadyConnected_WithIgnore_DoesNotThrow() { var exception = Record.Exception(() => EmailSender.ConnectRabbitMq( ValidUrl, RabbitMqTestConfig.UserName, RabbitMqTestConfig.Password, OnReconnect.Ignore)); Assert.Null(exception); } [Fact] public void ConnectRabbitMq_UrlOverload_WhenAlreadyConnected_WithThrowException_Throws() { Assert.Throws(() => EmailSender.ConnectRabbitMq( ValidUrl, RabbitMqTestConfig.UserName, RabbitMqTestConfig.Password, OnReconnect.ThrowException)); } [Fact] public void ConnectRabbitMq_UrlOverload_WithVHostInPath_WithIgnore_DoesNotThrow() { var exception = Record.Exception(() => EmailSender.ConnectRabbitMq( ValidUrlWithVHost, RabbitMqTestConfig.UserName, RabbitMqTestConfig.Password, OnReconnect.Ignore)); Assert.Null(exception); } [Fact] public void Send_AfterUrlOverloadConnection_DoesNotThrow() { var email = new EmailContext { Sender = new EmailAccountDto { Username = "test@example.com", Password = "password", SmtpServer = "smtp.example.com" }, Recipients = ["url-overload-test@example.com"], Subject = "URL Overload Integration Test", Body = "

Sent after URL-based connection.

", IsHtml = true }; // Connection was established via Action<> overload in the fixture; // Send should work regardless of which overload was used to connect. var exception = Record.Exception(() => EmailSender.Send(email)); Assert.Null(exception); } }