using Bit.Api.AdminConsole.Controllers; using Bit.Core.Services; using Bit.Test.Common.AutoFixture; using Bit.Test.Common.AutoFixture.Attributes; using Microsoft.AspNetCore.Mvc; using NSubstitute; using Xunit; namespace Bit.Api.Test.AdminConsole.Controllers; [ControllerCustomize(typeof(SlackOAuthController))] [SutProviderCustomize] public class SlackOAuthControllerTests { [Theory, BitAutoData] public async Task OAuthCallback_ThrowsBadResultWhenCodeIsEmpty(SutProvider sutProvider) { sutProvider.Sut.Url = Substitute.For(); var requestAction = await sutProvider.Sut.OAuthCallback(string.Empty); Assert.IsType(requestAction); } [Theory, BitAutoData] public async Task OAuthCallback_ThrowsBadResultWhenSlackServiceReturnsEmpty(SutProvider sutProvider) { sutProvider.Sut.Url = Substitute.For(); sutProvider.GetDependency() .ObtainTokenViaOAuth(Arg.Any(), Arg.Any()) .Returns(string.Empty); var requestAction = await sutProvider.Sut.OAuthCallback("A_test_code"); Assert.IsType(requestAction); } [Theory, BitAutoData] public async Task OAuthCallback_CompletesSuccessfully(SutProvider sutProvider) { sutProvider.Sut.Url = Substitute.For(); sutProvider.GetDependency() .ObtainTokenViaOAuth(Arg.Any(), Arg.Any()) .Returns("xoxb-test-token"); var requestAction = await sutProvider.Sut.OAuthCallback("A_test_code"); Assert.IsType(requestAction); } [Theory, BitAutoData] public void Redirect_ShouldRedirectToSlack(SutProvider sutProvider) { var expectedUrl = "https://localhost/"; sutProvider.Sut.Url = Substitute.For(); sutProvider.GetDependency().GetRedirectUrl(Arg.Any()).Returns(expectedUrl); var requestAction = sutProvider.Sut.RedirectToSlack(); var redirectResult = Assert.IsType(requestAction); Assert.Equal(expectedUrl, redirectResult.Url); } [Theory, BitAutoData] public void Redirect_ThrowsBadResultWhenSlackServiceReturnsEmpty(SutProvider sutProvider) { sutProvider.Sut.Url = Substitute.For(); sutProvider.GetDependency().GetRedirectUrl(Arg.Any()).Returns(string.Empty); var requestAction = sutProvider.Sut.RedirectToSlack(); Assert.IsType(requestAction); } }