From 53a0483ef11cce939b1df2f288563c888a1d0567 Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 14 Jun 2020 16:34:42 +0800 Subject: Many many bugs fix. 1. Add a way to test front end with mock page. 2. Unknown api returns 400 but not frontend page. 3. Fix a big bug that cause all data loss in database migration. --- Timeline.Tests/IntegratedTests/FrontEndTest.cs | 34 ++++++++++++++++++++++ .../IntegratedTests/IntegratedTestBase.cs | 30 +++++++++++-------- .../IntegratedTests/UnknownEndpointTest.cs | 26 +++++++++++++++++ 3 files changed, 78 insertions(+), 12 deletions(-) create mode 100644 Timeline.Tests/IntegratedTests/FrontEndTest.cs create mode 100644 Timeline.Tests/IntegratedTests/UnknownEndpointTest.cs (limited to 'Timeline.Tests/IntegratedTests') diff --git a/Timeline.Tests/IntegratedTests/FrontEndTest.cs b/Timeline.Tests/IntegratedTests/FrontEndTest.cs new file mode 100644 index 00000000..a00d41b1 --- /dev/null +++ b/Timeline.Tests/IntegratedTests/FrontEndTest.cs @@ -0,0 +1,34 @@ +using FluentAssertions; +using Microsoft.AspNetCore.Mvc.Testing; +using System.Net.Mime; +using System.Threading.Tasks; +using Timeline.Tests.Helpers; +using Xunit; + +namespace Timeline.Tests.IntegratedTests +{ + public class FrontEndTest : IntegratedTestBase + { + public FrontEndTest(WebApplicationFactory factory) : base(factory) + { + } + + [Fact] + public async Task Index() + { + using var client = await CreateDefaultClient(false); + var res = await client.GetAsync("index.html"); + res.Should().HaveStatusCode(200); + res.Content.Headers.ContentType.MediaType.Should().Be(MediaTypeNames.Text.Html); + } + + [Fact] + public async Task Fallback() + { + using var client = await CreateDefaultClient(false); + var res = await client.GetAsync("aaaaaaaaaaaaaaa"); + res.Should().HaveStatusCode(200); + res.Content.Headers.ContentType.MediaType.Should().Be(MediaTypeNames.Text.Html); + } + } +} diff --git a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs index e42483bd..01544828 100644 --- a/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs +++ b/Timeline.Tests/IntegratedTests/IntegratedTestBase.cs @@ -117,17 +117,23 @@ namespace Timeline.Tests.IntegratedTests await TestApp.DisposeAsync(); } - public Task CreateDefaultClient() + public Task CreateDefaultClient(bool setApiBase = true) { var client = Factory.CreateDefaultClient(); - client.BaseAddress = new Uri(client.BaseAddress, "api/"); + if (setApiBase) + { + client.BaseAddress = new Uri(client.BaseAddress, "api/"); + } return Task.FromResult(client); } - public async Task CreateClientWithCredential(string username, string password) + public async Task CreateClientWithCredential(string username, string password, bool setApiBase = true) { var client = Factory.CreateDefaultClient(); - client.BaseAddress = new Uri(client.BaseAddress, "api/"); + if (setApiBase) + { + client.BaseAddress = new Uri(client.BaseAddress, "api/"); + } var response = await client.PostAsJsonAsync("token/create", new CreateTokenRequest { Username = username, Password = password }); var token = response.Should().HaveStatusCode(200) @@ -136,24 +142,24 @@ namespace Timeline.Tests.IntegratedTests return client; } - public Task CreateClientAs(int userNumber) + public Task CreateClientAs(int userNumber, bool setApiBase = true) { if (userNumber < 0) - return CreateDefaultClient(); + return CreateDefaultClient(setApiBase); if (userNumber == 0) - return CreateClientWithCredential("admin", "adminpw"); + return CreateClientWithCredential("admin", "adminpw", setApiBase); else - return CreateClientWithCredential($"user{userNumber}", $"user{userNumber}pw"); + return CreateClientWithCredential($"user{userNumber}", $"user{userNumber}pw", setApiBase); } - public Task CreateClientAsAdministrator() + public Task CreateClientAsAdministrator(bool setApiBase = true) { - return CreateClientAs(0); + return CreateClientAs(0, setApiBase); } - public Task CreateClientAsUser() + public Task CreateClientAsUser(bool setApiBase = true) { - return CreateClientAs(1); + return CreateClientAs(1, setApiBase); } } } diff --git a/Timeline.Tests/IntegratedTests/UnknownEndpointTest.cs b/Timeline.Tests/IntegratedTests/UnknownEndpointTest.cs new file mode 100644 index 00000000..40f818a7 --- /dev/null +++ b/Timeline.Tests/IntegratedTests/UnknownEndpointTest.cs @@ -0,0 +1,26 @@ +using FluentAssertions; +using Microsoft.AspNetCore.Mvc.Testing; +using System.Threading.Tasks; +using Timeline.Models.Http; +using Timeline.Tests.Helpers; +using Xunit; + +namespace Timeline.Tests.IntegratedTests +{ + public class UnknownEndpointTest : IntegratedTestBase + { + public UnknownEndpointTest(WebApplicationFactory factory) : base(factory) + { + } + + [Fact] + public async Task UnknownEndpoint() + { + using var client = await CreateDefaultClient(); + var res = await client.GetAsync("unknownEndpoint"); + res.Should().HaveStatusCode(400) + .And.HaveCommonBody() + .Which.Code.Should().Be(ErrorCodes.Common.UnknownEndpoint); + } + } +} -- cgit v1.2.3