jellyfin/tests/Jellyfin.Api.Tests/Helpers/RequestHelpersTests.cs

140 lines
4.5 KiB
C#
Raw Normal View History

2021-01-24 11:43:05 +01:00
using System;
using System.Collections.Generic;
2023-02-17 23:16:08 +01:00
using System.Globalization;
using System.Security.Claims;
using Jellyfin.Api.Constants;
2021-01-24 11:43:05 +01:00
using Jellyfin.Api.Helpers;
using Jellyfin.Data.Enums;
2023-02-17 23:16:08 +01:00
using MediaBrowser.Controller.Net;
2021-01-24 11:43:05 +01:00
using Xunit;
namespace Jellyfin.Api.Tests.Helpers
{
public static class RequestHelpersTests
2021-01-24 11:43:05 +01:00
{
[Theory]
[MemberData(nameof(GetOrderBy_Success_TestData))]
public static void GetOrderBy_Success(IReadOnlyList<ItemSortBy> sortBy, IReadOnlyList<SortOrder> requestedSortOrder, (ItemSortBy, SortOrder)[] expected)
2021-01-24 11:43:05 +01:00
{
Assert.Equal(expected, RequestHelpers.GetOrderBy(sortBy, requestedSortOrder));
}
2023-02-17 23:16:08 +01:00
[Fact]
public static void GetUserId_IsAdmin()
{
Guid? requestUserId = Guid.NewGuid();
Guid? authUserId = Guid.NewGuid();
var claims = new[]
{
new Claim(InternalClaimTypes.UserId, authUserId.Value.ToString("N", CultureInfo.InvariantCulture)),
new Claim(InternalClaimTypes.IsApiKey, bool.FalseString),
new Claim(ClaimTypes.Role, UserRoles.Administrator)
};
var identity = new ClaimsIdentity(claims, string.Empty);
var principal = new ClaimsPrincipal(identity);
var userId = RequestHelpers.GetUserId(principal, requestUserId);
Assert.Equal(requestUserId, userId);
}
[Fact]
public static void GetUserId_IsApiKey_EmptyGuid()
{
Guid? requestUserId = Guid.Empty;
var claims = new[]
{
new Claim(InternalClaimTypes.IsApiKey, bool.TrueString)
};
var identity = new ClaimsIdentity(claims, string.Empty);
var principal = new ClaimsPrincipal(identity);
var userId = RequestHelpers.GetUserId(principal, requestUserId);
Assert.Equal(Guid.Empty, userId);
}
[Fact]
public static void GetUserId_IsApiKey_Null()
{
Guid? requestUserId = null;
var claims = new[]
{
new Claim(InternalClaimTypes.IsApiKey, bool.TrueString)
};
var identity = new ClaimsIdentity(claims, string.Empty);
var principal = new ClaimsPrincipal(identity);
var userId = RequestHelpers.GetUserId(principal, requestUserId);
Assert.Equal(Guid.Empty, userId);
}
[Fact]
public static void GetUserId_IsUser()
{
Guid? requestUserId = Guid.NewGuid();
Guid? authUserId = Guid.NewGuid();
var claims = new[]
{
new Claim(InternalClaimTypes.UserId, authUserId.Value.ToString("N", CultureInfo.InvariantCulture)),
new Claim(InternalClaimTypes.IsApiKey, bool.FalseString),
new Claim(ClaimTypes.Role, UserRoles.User)
};
var identity = new ClaimsIdentity(claims, string.Empty);
var principal = new ClaimsPrincipal(identity);
Assert.Throws<SecurityException>(() => RequestHelpers.GetUserId(principal, requestUserId));
}
public static TheoryData<IReadOnlyList<ItemSortBy>, IReadOnlyList<SortOrder>, (ItemSortBy, SortOrder)[]> GetOrderBy_Success_TestData()
2021-01-24 11:43:05 +01:00
{
var data = new TheoryData<IReadOnlyList<ItemSortBy>, IReadOnlyList<SortOrder>, (ItemSortBy, SortOrder)[]>();
data.Add(
Array.Empty<ItemSortBy>(),
2021-01-24 11:43:05 +01:00
Array.Empty<SortOrder>(),
Array.Empty<(ItemSortBy, SortOrder)>());
data.Add(
new[]
2021-01-24 11:43:05 +01:00
{
ItemSortBy.IsFavoriteOrLiked,
ItemSortBy.Random
2021-01-24 11:43:05 +01:00
},
Array.Empty<SortOrder>(),
new (ItemSortBy, SortOrder)[]
2021-01-24 11:43:05 +01:00
{
(ItemSortBy.IsFavoriteOrLiked, SortOrder.Ascending),
(ItemSortBy.Random, SortOrder.Ascending),
});
data.Add(
new[]
2021-01-24 11:43:05 +01:00
{
ItemSortBy.SortName,
ItemSortBy.ProductionYear
2021-01-24 11:43:05 +01:00
},
new[]
2021-01-24 11:43:05 +01:00
{
SortOrder.Descending
},
new (ItemSortBy, SortOrder)[]
2021-01-24 11:43:05 +01:00
{
(ItemSortBy.SortName, SortOrder.Descending),
(ItemSortBy.ProductionYear, SortOrder.Descending),
});
return data;
2021-01-24 11:43:05 +01:00
}
}
}