From 57102090d307a62b3759177df3ba545cfad6c327 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Mon, 22 Feb 2021 13:15:29 +0100 Subject: Add tests for DashboardController --- .../Controllers/DashboardControllerTests.cs | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs (limited to 'tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs') diff --git a/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs new file mode 100644 index 000000000..fadeddba5 --- /dev/null +++ b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs @@ -0,0 +1,76 @@ +using System.IO; +using System.Net; +using System.Text.Json; +using System.Threading.Tasks; +using Jellyfin.Api.Models; +using Xunit; + +namespace Jellyfin.Api.Tests.Controllers +{ + public sealed class DashboardControllerTests : IClassFixture + { + private readonly JellyfinApplicationFactory _factory; + + public DashboardControllerTests(JellyfinApplicationFactory factory) + { + _factory = factory; + } + + [Fact] + public async Task GetDashboardConfigurationPage_NonExistingPage_NotFound() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("web/ConfigurationPage/ThisPageTotally/Doesnt/Exists.html").ConfigureAwait(false); + + Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); + } + + [Fact] + public async Task GetDashboardConfigurationPage_ExistingPage_CorrectPage() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/web/ConfigurationPage?name=TestPlugin").ConfigureAwait(false); + + Assert.True(response.IsSuccessStatusCode); + Assert.Equal("text/html", response.Content.Headers.ContentType?.MediaType); + StreamReader reader = new StreamReader(typeof(TestPlugin).Assembly.GetManifestResourceStream("Jellyfin.Api.Tests.TestPage.html")!); + Assert.Equal(await response.Content.ReadAsStringAsync(), reader.ReadToEnd()); + } + + [Fact] + public async Task GetDashboardConfigurationPage_BrokenPage_NotFound() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/web/ConfigurationPage?name=BrokenPage").ConfigureAwait(false); + + Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); + } + + [Fact] + public async Task GetConfigurationPages_NoParams_AllConfigurationPages() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/web/ConfigurationPages").ConfigureAwait(false); + + Assert.True(response.IsSuccessStatusCode); + var res = await JsonSerializer.DeserializeAsync(await response.Content.ReadAsStreamAsync()); + // TODO: check content + } + + [Fact] + public async Task GetConfigurationPages_True_MainMenuConfigurationPages() + { + var client = _factory.CreateClient(); + + var response = await client.GetAsync("/web/ConfigurationPages?enableInMainMenu=true").ConfigureAwait(false); + + Assert.True(response.IsSuccessStatusCode); + var res = await JsonSerializer.DeserializeAsync(await response.Content.ReadAsStreamAsync()); + Assert.Empty(res); + } + } +} -- cgit v1.2.3 From ec3237ba55a6c0c6e7a31e2aaa5fbf77c9978ac7 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Mon, 22 Feb 2021 13:46:40 +0100 Subject: Fix tests --- Jellyfin.Api/Controllers/DashboardController.cs | 1 - Jellyfin.Api/Models/ConfigurationPageInfo.cs | 8 ++++++++ tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs | 9 ++++++--- 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs') diff --git a/Jellyfin.Api/Controllers/DashboardController.cs b/Jellyfin.Api/Controllers/DashboardController.cs index 0c19f2818..a2c2ecd66 100644 --- a/Jellyfin.Api/Controllers/DashboardController.cs +++ b/Jellyfin.Api/Controllers/DashboardController.cs @@ -6,7 +6,6 @@ using System.Net.Mime; using Jellyfin.Api.Attributes; using Jellyfin.Api.Models; using MediaBrowser.Common.Plugins; -using MediaBrowser.Controller; using MediaBrowser.Model.Net; using MediaBrowser.Model.Plugins; using Microsoft.AspNetCore.Http; diff --git a/Jellyfin.Api/Models/ConfigurationPageInfo.cs b/Jellyfin.Api/Models/ConfigurationPageInfo.cs index d21428029..ec4a0d1a1 100644 --- a/Jellyfin.Api/Models/ConfigurationPageInfo.cs +++ b/Jellyfin.Api/Models/ConfigurationPageInfo.cs @@ -24,6 +24,14 @@ namespace Jellyfin.Api.Models PluginId = plugin?.Id; } + /// + /// Initializes a new instance of the class. + /// + public ConfigurationPageInfo() + { + Name = string.Empty; + } + /// /// Gets or sets the name. /// diff --git a/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs index fadeddba5..84d362a39 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs @@ -3,6 +3,7 @@ using System.Net; using System.Text.Json; using System.Threading.Tasks; using Jellyfin.Api.Models; +using MediaBrowser.Common.Json; using Xunit; namespace Jellyfin.Api.Tests.Controllers @@ -10,6 +11,7 @@ namespace Jellyfin.Api.Tests.Controllers public sealed class DashboardControllerTests : IClassFixture { private readonly JellyfinApplicationFactory _factory; + private readonly JsonSerializerOptions _jsonOpions = JsonDefaults.GetOptions(); public DashboardControllerTests(JellyfinApplicationFactory factory) { @@ -57,7 +59,6 @@ namespace Jellyfin.Api.Tests.Controllers var response = await client.GetAsync("/web/ConfigurationPages").ConfigureAwait(false); Assert.True(response.IsSuccessStatusCode); - var res = await JsonSerializer.DeserializeAsync(await response.Content.ReadAsStreamAsync()); // TODO: check content } @@ -69,8 +70,10 @@ namespace Jellyfin.Api.Tests.Controllers var response = await client.GetAsync("/web/ConfigurationPages?enableInMainMenu=true").ConfigureAwait(false); Assert.True(response.IsSuccessStatusCode); - var res = await JsonSerializer.DeserializeAsync(await response.Content.ReadAsStreamAsync()); - Assert.Empty(res); + var res = await response.Content.ReadAsStreamAsync(); + System.Console.WriteLine(res); + var data = await JsonSerializer.DeserializeAsync(res, _jsonOpions); + Assert.Empty(data); } } } -- cgit v1.2.3 From baadc48f43ec425659d0d7210f1a97416d7d34c5 Mon Sep 17 00:00:00 2001 From: Bond_009 Date: Mon, 22 Feb 2021 16:27:02 +0100 Subject: Address comments --- .../Controllers/BrandingControllerTests.cs | 9 ++++++--- .../Controllers/DashboardControllerTests.cs | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) (limited to 'tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs') diff --git a/tests/Jellyfin.Api.Tests/Controllers/BrandingControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/BrandingControllerTests.cs index 3207a0f25..40933562d 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/BrandingControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/BrandingControllerTests.cs @@ -1,3 +1,5 @@ +using System.Net.Mime; +using System.Text; using System.Text.Json; using System.Threading.Tasks; using MediaBrowser.Model.Branding; @@ -25,8 +27,8 @@ namespace Jellyfin.Api.Tests // Assert Assert.True(response.IsSuccessStatusCode); - Assert.Equal("application/json", response.Content.Headers.ContentType?.MediaType); - Assert.Equal("utf-8", response.Content.Headers.ContentType?.CharSet); + Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType); + Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet); var responseBody = await response.Content.ReadAsStreamAsync(); _ = await JsonSerializer.DeserializeAsync(responseBody); } @@ -44,7 +46,8 @@ namespace Jellyfin.Api.Tests // Assert Assert.True(response.IsSuccessStatusCode); - Assert.Equal("text/css; charset=utf-8", response.Content.Headers.ContentType?.ToString()); + Assert.Equal("text/css", response.Content.Headers.ContentType?.MediaType); + Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet); } } } diff --git a/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs index 84d362a39..300b2697f 100644 --- a/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs +++ b/tests/Jellyfin.Api.Tests/Controllers/DashboardControllerTests.cs @@ -1,5 +1,7 @@ using System.IO; using System.Net; +using System.Net.Mime; +using System.Text; using System.Text.Json; using System.Threading.Tasks; using Jellyfin.Api.Models; @@ -23,7 +25,7 @@ namespace Jellyfin.Api.Tests.Controllers { var client = _factory.CreateClient(); - var response = await client.GetAsync("web/ConfigurationPage/ThisPageTotally/Doesnt/Exists.html").ConfigureAwait(false); + var response = await client.GetAsync("web/ConfigurationPage?name=ThisPageDoesntExists").ConfigureAwait(false); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } @@ -36,7 +38,7 @@ namespace Jellyfin.Api.Tests.Controllers var response = await client.GetAsync("/web/ConfigurationPage?name=TestPlugin").ConfigureAwait(false); Assert.True(response.IsSuccessStatusCode); - Assert.Equal("text/html", response.Content.Headers.ContentType?.MediaType); + Assert.Equal(MediaTypeNames.Text.Html, response.Content.Headers.ContentType?.MediaType); StreamReader reader = new StreamReader(typeof(TestPlugin).Assembly.GetManifestResourceStream("Jellyfin.Api.Tests.TestPage.html")!); Assert.Equal(await response.Content.ReadAsStringAsync(), reader.ReadToEnd()); } @@ -59,6 +61,9 @@ namespace Jellyfin.Api.Tests.Controllers var response = await client.GetAsync("/web/ConfigurationPages").ConfigureAwait(false); Assert.True(response.IsSuccessStatusCode); + + var res = await response.Content.ReadAsStreamAsync(); + _ = await JsonSerializer.DeserializeAsync(res, _jsonOpions); // TODO: check content } @@ -70,8 +75,10 @@ namespace Jellyfin.Api.Tests.Controllers var response = await client.GetAsync("/web/ConfigurationPages?enableInMainMenu=true").ConfigureAwait(false); Assert.True(response.IsSuccessStatusCode); + Assert.Equal(MediaTypeNames.Application.Json, response.Content.Headers.ContentType?.MediaType); + Assert.Equal(Encoding.UTF8.BodyName, response.Content.Headers.ContentType?.CharSet); + var res = await response.Content.ReadAsStreamAsync(); - System.Console.WriteLine(res); var data = await JsonSerializer.DeserializeAsync(res, _jsonOpions); Assert.Empty(data); } -- cgit v1.2.3