using System.Collections.Generic; using System.Net; using System.Threading.Tasks; using AutoFixture; using AutoFixture.AutoMoq; using Jellyfin.Api.Auth.LocalAccessPolicy; using Jellyfin.Api.Constants; using MediaBrowser.Common.Configuration; using MediaBrowser.Common.Net; using MediaBrowser.Controller.Library; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Moq; using Xunit; namespace Jellyfin.Api.Tests.Auth.LocalAccessPolicy { public class LocalAccessHandlerTests { private readonly Mock _configurationManagerMock; private readonly List _requirements; private readonly LocalAccessHandler _sut; private readonly Mock _userManagerMock; private readonly Mock _httpContextAccessor; private readonly Mock _networkManagerMock; public LocalAccessHandlerTests() { var fixture = new Fixture().Customize(new AutoMoqCustomization()); _configurationManagerMock = fixture.Freeze>(); _requirements = new List { new LocalAccessRequirement() }; _userManagerMock = fixture.Freeze>(); _httpContextAccessor = fixture.Freeze>(); _networkManagerMock = fixture.Freeze>(); _sut = fixture.Create(); } [Theory] [InlineData(true, true)] [InlineData(false, false)] public async Task LocalAccessOnly(bool isInLocalNetwork, bool shouldSucceed) { _networkManagerMock .Setup(n => n.IsInLocalNetwork(It.IsAny())) .Returns(isInLocalNetwork); TestHelpers.SetupConfigurationManager(_configurationManagerMock, true); var claims = TestHelpers.SetupUser( _userManagerMock, _httpContextAccessor, UserRoles.User); var context = new AuthorizationHandlerContext(_requirements, claims, null); await _sut.HandleAsync(context); Assert.Equal(shouldSucceed, context.HasSucceeded); } } }