/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core.Tests/Features/AuthConfig/GetAuthConfigQueryHandlerTests.cs
181 строка
8 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using FluentAssertions; using Gridient.Core.Features; using Gridient.Core.Features.AuthConfig.Queries; using Gridient.Core.Models.Auth; using Gridient.Core.Options; using Moq; using Xunit; namespace Gridient.Core.Tests.Features.AuthConfig { public class GetAuthConfigQueryHandlerTests { #region Handle [Fact] public async Task Handle_WhenNoEnabledProvidersAfterFeatureFiltering_ShouldThrowInvalidOperation() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "local", Type = "LocalPassword", DisplayName = "Local", IsEnabled = true, Order = 1 } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = true }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = false, ["auth.oidc.enabled"] = false }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); await Assert.ThrowsAsync<InvalidOperationException>(() => handler.Handle(new GetAuthConfigQuery(), CancellationToken.None)); } [Fact] public async Task Handle_WhenLocalEnabled_ShouldReturnLocalMode() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "local", Type = "LocalPassword", DisplayName = "Local", IsEnabled = true, Order = 2 }, new() { Id = "oidc", Type = "Oidc", DisplayName = "OIDC", IsEnabled = true, Order = 1 } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = true }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = true, ["auth.oidc.enabled"] = false }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); var result = await handler.Handle(new GetAuthConfigQuery(), CancellationToken.None); result.Mode.Should().Be("Local"); result.Providers.Should().HaveCount(1); result.Providers[0].Type.Should().Be("LocalPassword"); result.Providers[0].LoginKind.Should().Be("Password"); result.CanRegister.Should().BeTrue(); result.HasPasswordReset.Should().BeTrue(); } [Fact] public async Task Handle_WhenLocalAndOidcEnabled_ShouldReturnHybridMode_AndOrderedProviders() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "oidc", Type = "Oidc", DisplayName = "OIDC", IsEnabled = true, Order = 2 }, new() { Id = "local", Type = "LocalPassword", DisplayName = "Local", IsEnabled = true, Order = 1 } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = true }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = true, ["auth.oidc.enabled"] = true }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); var result = await handler.Handle(new GetAuthConfigQuery(), CancellationToken.None); result.Mode.Should().Be("Hybrid"); result.Providers.Should().HaveCount(2); result.Providers[0].Id.Should().Be("local"); result.Providers[1].Id.Should().Be("oidc"); result.LogoutEndpoint.Should().Be("/api/auth/oidc/logout"); result.CanRegister.Should().BeTrue(); result.HasPasswordReset.Should().BeTrue(); } [Fact] public async Task Handle_WhenOnlyOidcEnabled_ShouldReturnOidcMode() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "oidc", Type = "OIDC", DisplayName = "OIDC", IsEnabled = true, Order = 1 }, new() { Id = "local", Type = "LocalPassword", DisplayName = "Local", IsEnabled = true, Order = 2 } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = true }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = false, ["auth.oidc.enabled"] = true }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); var result = await handler.Handle(new GetAuthConfigQuery(), CancellationToken.None); result.Mode.Should().Be("Oidc"); result.Providers.Should().HaveCount(1); result.Providers[0].Type.Should().Be("OIDC"); result.Providers[0].LoginKind.Should().Be("Redirect"); result.Providers[0].LoginEndpointOrUrl.Should().Be("/api/auth/oidc/login"); result.CanRegister.Should().BeFalse(); result.HasPasswordReset.Should().BeFalse(); result.LogoutEndpoint.Should().Be("/api/auth/oidc/logout"); } [Fact] public async Task Handle_WhenLocalProviderHasLoginUrl_ShouldUseLoginUrl() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "local", Type = "localpassword", DisplayName = "Local", IsEnabled = true, Order = 1, LoginUrl = "https://sso/login" } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = false }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = true, ["auth.oidc.enabled"] = false }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); var result = await handler.Handle(new GetAuthConfigQuery(), CancellationToken.None); result.Providers.Should().HaveCount(1); result.Providers[0].LoginKind.Should().Be("Password"); result.Providers[0].LoginEndpointOrUrl.Should().Be("https://sso/login"); result.Providers[0].AllowsRegistration.Should().BeFalse(); } [Fact] public async Task Handle_WhenAllProvidersDisabled_ShouldThrowInvalidOperation() { var providersOptions = Microsoft.Extensions.Options.Options.Create(new List<AuthProviderOptions> { new() { Id = "local", Type = "LocalPassword", DisplayName = "Local", IsEnabled = false, Order = 1 } }); var regOptions = Microsoft.Extensions.Options.Options.Create(new RegistrationOptions { EnablePublicSignup = true }); var featureRegistryMock = new Mock<IClientFeatureRegistry>(); featureRegistryMock.Setup(x => x.GetFeatures()).Returns(new Dictionary<string, bool> { ["auth.local.enabled"] = true, ["auth.oidc.enabled"] = false }); var handler = new GetAuthConfigQueryHandler(providersOptions, regOptions, featureRegistryMock.Object); await Assert.ThrowsAsync<InvalidOperationException>(() => handler.Handle(new GetAuthConfigQuery(), CancellationToken.None)); } #endregion } }