46 lines
1.8 KiB
C#
46 lines
1.8 KiB
C#
namespace ScadaLink.NotificationService.Tests;
|
|
|
|
/// <summary>
|
|
/// NS-016: <see cref="MailKitSmtpClientWrapper.AuthenticateAsync"/> must never
|
|
/// silently skip authentication for a misconfigured SMTP config — a missing
|
|
/// credential, an unrecognised auth type, or an unparseable Basic credential
|
|
/// must be a hard, surfaced error rather than an unauthenticated send.
|
|
/// </summary>
|
|
public class MailKitSmtpClientWrapperTests
|
|
{
|
|
[Fact]
|
|
public async Task Authenticate_EmptyCredentials_Throws()
|
|
{
|
|
// An AuthType of "basic"/"oauth2" with a null/empty Credentials value is a
|
|
// misconfigured row; the wrapper used to "return" and send unauthenticated.
|
|
var wrapper = new MailKitSmtpClientWrapper();
|
|
|
|
await Assert.ThrowsAsync<SmtpPermanentException>(
|
|
() => wrapper.AuthenticateAsync("basic", null));
|
|
await Assert.ThrowsAsync<SmtpPermanentException>(
|
|
() => wrapper.AuthenticateAsync("oauth2", ""));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Authenticate_UnknownAuthType_Throws()
|
|
{
|
|
// The switch had cases only for "basic"/"oauth2" and no default — any other
|
|
// value (typo, future "ntlm") fell through and sent unauthenticated.
|
|
var wrapper = new MailKitSmtpClientWrapper();
|
|
|
|
await Assert.ThrowsAsync<SmtpPermanentException>(
|
|
() => wrapper.AuthenticateAsync("ntlm", "user:pass"));
|
|
}
|
|
|
|
[Fact]
|
|
public async Task Authenticate_BasicCredentialWithoutColon_Throws()
|
|
{
|
|
// A "basic" credential string that does not split into exactly two parts was
|
|
// silently skipped — the connection then sent unauthenticated.
|
|
var wrapper = new MailKitSmtpClientWrapper();
|
|
|
|
await Assert.ThrowsAsync<SmtpPermanentException>(
|
|
() => wrapper.AuthenticateAsync("basic", "nocolon"));
|
|
}
|
|
}
|