aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Server.Implementations.Tests/QuickConnect/QuickConnectManagerTests.cs
blob: 043363ae3de7aa828cf300a4d5f755c7886518b1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
using System;
using System.Linq;
using System.Threading.Tasks;
using AutoFixture;
using AutoFixture.AutoMoq;
using Emby.Server.Implementations.QuickConnect;
using MediaBrowser.Controller.Authentication;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Net;
using MediaBrowser.Model.Configuration;
using Moq;
using Xunit;

namespace Jellyfin.Server.Implementations.Tests.QuickConnect
{
    public class QuickConnectManagerTests
    {
        private static readonly AuthorizationInfo _quickConnectAuthInfo = new AuthorizationInfo
        {
            Device = "Device",
            DeviceId = "DeviceId",
            Client = "Client",
            Version = "1.0.0"
        };

        private readonly Fixture _fixture;
        private readonly ServerConfiguration _config;
        private readonly QuickConnectManager _quickConnectManager;

        public QuickConnectManagerTests()
        {
            _config = new ServerConfiguration();
            var configManager = new Mock<IServerConfigurationManager>();
            configManager.Setup(x => x.Configuration).Returns(_config);

            _fixture = new Fixture();
            _fixture.Customize(new AutoMoqCustomization
            {
                ConfigureMembers = true
            }).Inject(configManager.Object);

            // User object contains circular references.
            _fixture.Behaviors.OfType<ThrowingRecursionBehavior>().ToList()
                .ForEach(b => _fixture.Behaviors.Remove(b));
            _fixture.Behaviors.Add(new OmitOnRecursionBehavior());

            _quickConnectManager = _fixture.Create<QuickConnectManager>();
        }

        [Fact]
        public void IsEnabled_QuickConnectUnavailable_False()
            => Assert.False(_quickConnectManager.IsEnabled);

        [Fact]
        public void TryConnect_QuickConnectUnavailable_ThrowsAuthenticationException()
            => Assert.Throws<AuthenticationException>(() => _quickConnectManager.TryConnect(_quickConnectAuthInfo));

        [Fact]
        public void CheckRequestStatus_QuickConnectUnavailable_ThrowsAuthenticationException()
            => Assert.Throws<AuthenticationException>(() => _quickConnectManager.CheckRequestStatus(string.Empty));

        [Fact]
        public void AuthorizeRequest_QuickConnectUnavailable_ThrowsAuthenticationException()
            => Assert.ThrowsAsync<AuthenticationException>(() => _quickConnectManager.AuthorizeRequest(Guid.Empty, string.Empty));

        [Fact]
        public void IsEnabled_QuickConnectAvailable_True()
        {
            _config.QuickConnectAvailable = true;
            Assert.True(_quickConnectManager.IsEnabled);
        }

        [Fact]
        public void CheckRequestStatus_QuickConnectAvailable_Success()
        {
            _config.QuickConnectAvailable = true;
            var res1 = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
            var res2 = _quickConnectManager.CheckRequestStatus(res1.Secret);
            Assert.Equal(res1, res2);
        }

        [Fact]
        public async Task AuthorizeRequest_QuickConnectAvailable_Success()
        {
            _config.QuickConnectAvailable = true;
            var res = _quickConnectManager.TryConnect(_quickConnectAuthInfo);
            Assert.True(await _quickConnectManager.AuthorizeRequest(Guid.Empty, res.Code));
        }
    }
}