diff --git a/test/Core.Test/Auth/Services/TwoFactorEmailServiceTests.cs b/test/Core.Test/Auth/Services/TwoFactorEmailServiceTests.cs index d817d09662..f24b3cb05e 100644 --- a/test/Core.Test/Auth/Services/TwoFactorEmailServiceTests.cs +++ b/test/Core.Test/Auth/Services/TwoFactorEmailServiceTests.cs @@ -18,7 +18,7 @@ namespace Bit.Core.Test.Auth.Services; [SutProviderCustomize] public class TwoFactorEmailServiceTests { - + [Theory, BitAutoData] public async Task SendTwoFactorEmailAsync_Success(SutProvider sutProvider, User user) { @@ -105,16 +105,38 @@ public class TwoFactorEmailServiceTests [Theory] [BitAutoData(DeviceType.UnknownBrowser, "Unknown Browser")] [BitAutoData(DeviceType.Android, "Android")] - public async Task SendNewDeviceVerificationEmailAsync_DeviceMatches(DeviceType deviceType, string deviceTypeName, + public async Task SendTwoFactorEmailAsync_DeviceMatches(SutProvider sutProvider, DeviceType deviceType, string deviceTypeName, User user) { - var sutProvider = new SutProvider(); + var email = user.Email.ToLowerInvariant(); + var token = "thisisatokentocompare"; + var IpAddress = "1.1.1.1"; + + var userTwoFactorTokenProvider = Substitute.For>(); + userTwoFactorTokenProvider + .CanGenerateTwoFactorTokenAsync(Arg.Any>(), user) + .Returns(Task.FromResult(true)); + userTwoFactorTokenProvider + .GenerateAsync("TwoFactor", Arg.Any>(), user) + .Returns(Task.FromResult(token)); var context = Substitute.For(); context.DeviceType = deviceType; - context.IpAddress = "1.1.1.1"; + context.IpAddress = IpAddress; - await sutProvider.Sut.SendNewDeviceVerificationEmailAsync(user); + var userManager = sutProvider.GetDependency>(); + userManager.RegisterTokenProvider(CoreHelpers.CustomProviderName(TwoFactorProviderType.Email), userTwoFactorTokenProvider); + + user.SetTwoFactorProviders(new Dictionary + { + [TwoFactorProviderType.Email] = new TwoFactorProvider + { + MetaData = new Dictionary { ["Email"] = email }, + Enabled = true + } + }); + + await sutProvider.Sut.SendTwoFactorEmailAsync(user); await sutProvider.GetDependency() .Received(1) @@ -122,21 +144,44 @@ public class TwoFactorEmailServiceTests } [Theory, BitAutoData] - public async Task SendNewDeviceVerificationEmailAsync_NullDeviceTypeShouldSendUnkownBrowserType(User user) + public async Task SendTwoFactorEmailAsync_NullDeviceTypeShouldSendUnkownBrowserType(SutProvider sutProvider, User user) { - var sutProvider = new SutProvider(); + var email = user.Email.ToLowerInvariant(); + var token = "thisisatokentocompare"; + var IpAddress = "1.1.1.1"; + + var userTwoFactorTokenProvider = Substitute.For>(); + userTwoFactorTokenProvider + .CanGenerateTwoFactorTokenAsync(Arg.Any>(), user) + .Returns(Task.FromResult(true)); + userTwoFactorTokenProvider + .GenerateAsync("TwoFactor", Arg.Any>(), user) + .Returns(Task.FromResult(token)); var context = Substitute.For(); context.DeviceType = null; - context.IpAddress = "1.1.1.1"; + context.IpAddress = IpAddress; - await sutProvider.Sut.SendNewDeviceVerificationEmailAsync(user); + var userManager = sutProvider.GetDependency>(); + userManager.RegisterTokenProvider(CoreHelpers.CustomProviderName(TwoFactorProviderType.Email), userTwoFactorTokenProvider); + + user.SetTwoFactorProviders(new Dictionary + { + [TwoFactorProviderType.Email] = new TwoFactorProvider + { + MetaData = new Dictionary { ["Email"] = email }, + Enabled = true + } + }); + + await sutProvider.Sut.SendTwoFactorEmailAsync(user); await sutProvider.GetDependency() .Received(1) .SendTwoFactorEmailAsync(Arg.Any(), Arg.Any(), Arg.Any(), Arg.Any(), "Unknown Browser", Arg.Any()); } - + + // [Theory, BitAutoData] // public async Task ResendNewDeviceVerificationEmail_UserNull_SendTwoFactorEmailAsyncNotCalled(