mirror of
				https://github.com/jellyfin/jellyfin.git
				synced 2025-11-03 19:17:24 -05:00 
			
		
		
		
	Merge pull request #5721 from Bond-009/authenticatedtests
Add code to test authenticated endpoints
This commit is contained in:
		
						commit
						a19a97ca42
					
				
							
								
								
									
										59
									
								
								tests/Jellyfin.Server.Integration.Tests/AuthHelper.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								tests/Jellyfin.Server.Integration.Tests/AuthHelper.cs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
 | 
					using System.Net;
 | 
				
			||||||
 | 
					using System.Net.Http;
 | 
				
			||||||
 | 
					using System.Net.Http.Headers;
 | 
				
			||||||
 | 
					using System.Net.Mime;
 | 
				
			||||||
 | 
					using System.Text.Json;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Jellyfin.Api.Models.StartupDtos;
 | 
				
			||||||
 | 
					using Jellyfin.Api.Models.UserDtos;
 | 
				
			||||||
 | 
					using MediaBrowser.Common.Json;
 | 
				
			||||||
 | 
					using Xunit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Jellyfin.Server.Integration.Tests
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public static class AuthHelper
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        public const string AuthHeaderName = "X-Emby-Authorization";
 | 
				
			||||||
 | 
					        public const string DummyAuthHeader = "MediaBrowser Client=\"Jellyfin.Server Integration Tests\", DeviceId=\"69420\", Device=\"Apple II\", Version=\"10.8.0\"";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static async Task<string> CompleteStartupAsync(HttpClient client)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var jsonOptions = JsonDefaults.Options;
 | 
				
			||||||
 | 
					            var userResponse = await client.GetByteArrayAsync("/Startup/User").ConfigureAwait(false);
 | 
				
			||||||
 | 
					            var user = JsonSerializer.Deserialize<StartupUserDto>(userResponse, jsonOptions);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using var completeResponse = await client.PostAsync("/Startup/Complete", new ByteArrayContent(Array.Empty<byte>())).ConfigureAwait(false);
 | 
				
			||||||
 | 
					            Assert.Equal(HttpStatusCode.NoContent, completeResponse.StatusCode);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using var content = new ByteArrayContent(JsonSerializer.SerializeToUtf8Bytes(
 | 
				
			||||||
 | 
					                new AuthenticateUserByName()
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    Username = user!.Name,
 | 
				
			||||||
 | 
					                    Pw = user.Password,
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                jsonOptions));
 | 
				
			||||||
 | 
					            content.Headers.ContentType = MediaTypeHeaderValue.Parse(MediaTypeNames.Application.Json);
 | 
				
			||||||
 | 
					            content.Headers.Add("X-Emby-Authorization", DummyAuthHeader);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            using var authResponse = await client.PostAsync("/Users/AuthenticateByName", content).ConfigureAwait(false);
 | 
				
			||||||
 | 
					            var auth = await JsonSerializer.DeserializeAsync<AuthenticationResultDto>(
 | 
				
			||||||
 | 
					                await authResponse.Content.ReadAsStreamAsync().ConfigureAwait(false),
 | 
				
			||||||
 | 
					                jsonOptions).ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            return auth!.AccessToken;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public static void AddAuthHeader(this HttpRequestHeaders headers, string accessToken)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            headers.Add(AuthHeaderName, DummyAuthHeader + $", Token={accessToken}");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        private class AuthenticationResultDto
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            public string AccessToken { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            public string ServerId { get; set; } = string.Empty;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,30 @@
 | 
				
			|||||||
 | 
					using System.Net;
 | 
				
			||||||
 | 
					using System.Net.Mime;
 | 
				
			||||||
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
 | 
					using Xunit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace Jellyfin.Server.Integration.Tests.Controllers
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    public sealed class ActivityLogControllerTests : IClassFixture<JellyfinApplicationFactory>
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        private readonly JellyfinApplicationFactory _factory;
 | 
				
			||||||
 | 
					        private string? _accessToken;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public ActivityLogControllerTests(JellyfinApplicationFactory factory)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            _factory = factory;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact]
 | 
				
			||||||
 | 
					        public async Task ActivityLog_GetEntries_Ok()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var client = _factory.CreateClient();
 | 
				
			||||||
 | 
					            client.DefaultRequestHeaders.AddAuthHeader(_accessToken ??= await AuthHelper.CompleteStartupAsync(client).ConfigureAwait(false));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var response = await client.GetAsync("System/ActivityLog/Entries").ConfigureAwait(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
 | 
				
			||||||
 | 
					            Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user