1
0
mirror of https://github.com/bitwarden/server.git synced 2025-06-08 04:00:31 -05:00

Combine static methods

This commit is contained in:
Thomas Rittson 2025-05-26 16:37:21 +10:00
parent 79a0073a2c
commit 33a26984c8
No known key found for this signature in database
GPG Key ID: CDDDA03861C35E27

View File

@ -170,8 +170,7 @@ public class UserServiceTests
User user) User user)
{ {
var sutProvider = new SutProvider<UserService>() var sutProvider = new SutProvider<UserService>()
.WithFakeTokenProvider(user) .CreateWithUserServiceCustomizations(user);
.Create();
var context = sutProvider.GetDependency<ICurrentContext>(); var context = sutProvider.GetDependency<ICurrentContext>();
context.DeviceType = deviceType; context.DeviceType = deviceType;
@ -188,8 +187,7 @@ public class UserServiceTests
public async Task SendNewDeviceVerificationEmailAsync_NullDeviceTypeShouldSendUnkownBrowserType(User user) public async Task SendNewDeviceVerificationEmailAsync_NullDeviceTypeShouldSendUnkownBrowserType(User user)
{ {
var sutProvider = new SutProvider<UserService>() var sutProvider = new SutProvider<UserService>()
.WithFakeTokenProvider(user) .CreateWithUserServiceCustomizations(user);
.Create();
var context = sutProvider.GetDependency<ICurrentContext>(); var context = sutProvider.GetDependency<ICurrentContext>();
context.DeviceType = null; context.DeviceType = null;
@ -266,10 +264,7 @@ public class UserServiceTests
SetupUserAndDevice(user, shouldHavePassword); SetupUserAndDevice(user, shouldHavePassword);
var sutProvider = new SutProvider<UserService>() var sutProvider = new SutProvider<UserService>()
.WithUserPasswordStore() .CreateWithUserServiceCustomizations(user);
.WithFakeTokenProvider(user)
.Create()
.FixPasswordHasherBug();
// Setup the fake password verification // Setup the fake password verification
sutProvider.GetDependency<IUserPasswordStore<User>>() sutProvider.GetDependency<IUserPasswordStore<User>>()
@ -498,10 +493,7 @@ public class UserServiceTests
SetupUserAndDevice(user, true); SetupUserAndDevice(user, true);
var sutProvider = new SutProvider<UserService>() var sutProvider = new SutProvider<UserService>()
.WithUserPasswordStore() .CreateWithUserServiceCustomizations(user);
.WithFakeTokenProvider(user)
.Create()
.FixPasswordHasherBug();
// Setup the fake password verification // Setup the fake password verification
sutProvider sutProvider
@ -679,7 +671,7 @@ public static class UserServiceSutProviderExtensions
/// Arranges a fake token provider. Must call as part of a builder pattern that ends in Create(), as it modifies /// Arranges a fake token provider. Must call as part of a builder pattern that ends in Create(), as it modifies
/// the SutProvider build chain. /// the SutProvider build chain.
/// </summary> /// </summary>
public static SutProvider<UserService> WithFakeTokenProvider(this SutProvider<UserService> sutProvider, User user) private static SutProvider<UserService> SetFakeTokenProvider(this SutProvider<UserService> sutProvider, User user)
{ {
var fakeUserTwoFactorProvider = Substitute.For<IUserTwoFactorTokenProvider<User>>(); var fakeUserTwoFactorProvider = Substitute.For<IUserTwoFactorTokenProvider<User>>();
@ -720,14 +712,20 @@ public static class UserServiceSutProviderExtensions
return sutProvider; return sutProvider;
} }
public static SutProvider<UserService> WithUserPasswordStore(this SutProvider<UserService> sutProvider) /// <summary>
/// Properly registers IUserPasswordStore as IUserStore so it's injected when the sut is initialized.
/// </summary>
/// <param name="sutProvider"></param>
/// <returns></returns>
private static SutProvider<UserService> SetUserPasswordStore(this SutProvider<UserService> sutProvider)
{ {
var substitutedUserPasswordStore = Substitute.For<IUserPasswordStore<User>>(); var substitutedUserPasswordStore = Substitute.For<IUserPasswordStore<User>>();
// IUserPasswordStore must be registered under the IUserStore parameter to be properly injected // IUserPasswordStore must be registered under the IUserStore parameter to be properly injected
// because this is what the constructor expects
sutProvider.SetDependency<IUserStore<User>>(substitutedUserPasswordStore); sutProvider.SetDependency<IUserStore<User>>(substitutedUserPasswordStore);
// also store it under its own type for retrieval and configuration // Also store it under its own type for retrieval and configuration
sutProvider.SetDependency(substitutedUserPasswordStore); sutProvider.SetDependency(substitutedUserPasswordStore);
return sutProvider; return sutProvider;
@ -739,10 +737,22 @@ public static class UserServiceSutProviderExtensions
/// This doesn't usually happen because our dependencies are not usually public. /// This doesn't usually happen because our dependencies are not usually public.
/// Call this AFTER SutProvider.Create(). /// Call this AFTER SutProvider.Create().
/// </summary> /// </summary>
public static SutProvider<UserService> FixPasswordHasherBug(this SutProvider<UserService> sutProvider) private static SutProvider<UserService> FixPasswordHasherBug(this SutProvider<UserService> sutProvider)
{ {
// Get the configured sutProvider mock and assign it back to the public property in the base class // Get the configured sutProvider mock and assign it back to the public property in the base class
sutProvider.Sut.PasswordHasher = sutProvider.GetDependency<IPasswordHasher<User>>(); sutProvider.Sut.PasswordHasher = sutProvider.GetDependency<IPasswordHasher<User>>();
return sutProvider; return sutProvider;
} }
/// <summary>
/// A helper that combines all SutProvider configuration usually required for UserService.
/// Call this instead of SutProvider.Create, after any additional configuration your test needs.
/// </summary>
public static SutProvider<UserService> CreateWithUserServiceCustomizations(this SutProvider<UserService> sutProvider, User user)
=> sutProvider
.SetUserPasswordStore()
.SetFakeTokenProvider(user)
.Create()
.FixPasswordHasherBug();
} }