Removed unnecessary tests, small refactors for readability +organization

This commit is contained in:
lucas.hipolito 2025-12-03 11:48:53 +01:00
parent 9e7b04b48d
commit 570b0d4678
3 changed files with 45 additions and 131 deletions

View file

@ -42,107 +42,44 @@ public class HttpEndpointSecurityAndEdgeCasesTests(App app) : AppComponentTest(a
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.Equal("File upload successful", responseContent);
}
[Fact]
public async Task HttpEndpoint_MalformedMultipartData_HandlesGracefully()
[Theory]
[InlineData("test/basic")]
[InlineData("TEST/BASIC")]
[InlineData("Test/Basic")]
[InlineData("test/BASIC")]
[InlineData("TEST/basic")]
public async Task HttpEndpoint_CaseSensitiveRoutes_RespectsRouteCase(string route)
{
// Arrange
var client = WorkflowServer.CreateHttpWorkflowClient();
// Create properly malformed multipart content by using StringContent with manually crafted headers
using var malformedContent = new StringContent(
"--boundary\r\nContent-Disposition: form-data; name=\"test\"\r\n\r\nvalue\r\n--boundary--",
Encoding.UTF8);
// Set multipart/form-data content-type but with plain text content
malformedContent.Headers.ContentType = new("multipart/form-data")
{
Parameters = { new System.Net.Http.Headers.NameValueHeaderValue("boundary", "test-boundary") }
};
// Act
var response = await client.PostAsync("test/file-upload", malformedContent);
// Assert - Should reject malformed multipart data with InternalServerError
// The system detects malformed multipart structure and throws IOException during parsing
Assert.Equal(HttpStatusCode.InternalServerError, response.StatusCode);
}
[Fact]
public async Task HttpEndpoint_ExtremelyLargeHeaders_HandlesGracefully()
{
// Arrange
var client = WorkflowServer.CreateHttpWorkflowClient();
var request = new HttpRequestMessage(HttpMethod.Get, "test/query-headers");
// Test with a large but reasonable header (16KB)
var largeHeaderValue = new string('x', 16384);
request.Headers.Add("X-Large-Header", largeHeaderValue);
// Act
var response = await client.SendAsync(request);
// Assert - System should handle large headers successfully
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
[Fact]
public async Task HttpEndpoint_CaseSensitiveRoutes_RespectsRouteCase()
{
// Arrange
var client = WorkflowServer.CreateHttpWorkflowClient();
// Act - Test the original route first to establish baseline
var originalResponse = await client.GetAsync("test/basic");
// Only proceed with case testing if the original route works
if (originalResponse.StatusCode != HttpStatusCode.OK)
{
Assert.Fail("Original route 'test/basic' should work before testing case variations");
}
// Test case variations
var uppercaseResponse = await client.GetAsync("TEST/BASIC");
var mixedCaseResponse = await client.GetAsync("Test/Basic");
var response = await client.GetAsync(route);
var content = await response.Content.ReadAsStringAsync();
// Assert - ASP.NET Core routing is case-insensitive by default
// Both case variations should work the same as the original
Assert.Equal(HttpStatusCode.OK, uppercaseResponse.StatusCode);
Assert.Equal(HttpStatusCode.OK, mixedCaseResponse.StatusCode);
// Verify all responses return the same content
var originalContent = await originalResponse.Content.ReadAsStringAsync();
var uppercaseContent = await uppercaseResponse.Content.ReadAsStringAsync();
var mixedCaseContent = await mixedCaseResponse.Content.ReadAsStringAsync();
Assert.Equal(originalContent, uppercaseContent);
Assert.Equal(originalContent, mixedCaseContent);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(content);
}
[Fact]
public async Task HttpEndpoint_NullAndEmptyQueryParameters_HandlesCorrectly()
[Theory]
[InlineData("test/query-headers?name=")]
[InlineData("test/query-headers?name")]
[InlineData("test/query-headers?=value")]
[InlineData("test/query-headers?&&&")]
public async Task HttpEndpoint_NullAndEmptyQueryParameters_HandlesCorrectly(string url)
{
// Arrange
var client = WorkflowServer.CreateHttpWorkflowClient();
// Act - Test various edge cases with query parameters
var response1 = await client.GetAsync("test/query-headers?name=");
var response2 = await client.GetAsync("test/query-headers?name");
var response3 = await client.GetAsync("test/query-headers?=value");
var response4 = await client.GetAsync("test/query-headers?&&&");
// Act
var response = await client.GetAsync(url);
var content = await response.Content.ReadAsStringAsync();
// Assert - All should complete without crashing
Assert.Equal(HttpStatusCode.OK, response1.StatusCode);
Assert.Equal(HttpStatusCode.OK, response2.StatusCode);
Assert.Equal(HttpStatusCode.OK, response3.StatusCode);
Assert.Equal(HttpStatusCode.OK, response4.StatusCode);
var content1 = await response1.Content.ReadAsStringAsync();
var content2 = await response2.Content.ReadAsStringAsync();
// Empty parameter value vs missing value should be handled gracefully
Assert.NotNull(content1);
Assert.NotNull(content2);
// Assert - Should handle edge cases with query parameters gracefully
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
Assert.NotNull(content);
}
[Fact]

View file

@ -1,6 +1,5 @@
using System.Net;
using System.Text;
using System.Text.Json;
using Elsa.Workflows.ComponentTests.Abstractions;
using Elsa.Workflows.ComponentTests.Fixtures;
@ -116,49 +115,6 @@ public class HttpEndpointTests(App app) : AppComponentTest(app)
}
}
[Fact]
public async Task HttpEndpoint_LargeJsonPayload_ProcessesCorrectly()
{
// Arrange
var client = WorkflowServer.CreateHttpWorkflowClient();
var largeObject = new
{
Users = Enumerable.Range(1, 100).Select(i => new
{
Id = i,
Name = $"User {i}",
Email = $"user{i}@example.com",
Data = new string('x', 100) // 100 characters per user
}).ToArray()
};
var jsonContent = JsonSerializer.Serialize(largeObject);
using (var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"))
{
// Act
var response = await client.PostAsync("test/json-content", content);
var responseContent = await response.Content.ReadAsStringAsync();
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
// Verify response can be parsed back to JSON
var parsedResponse = JsonSerializer.Deserialize<JsonElement>(responseContent);
Assert.True(parsedResponse.TryGetProperty("Users", out var usersProperty));
Assert.Equal(JsonValueKind.Array, usersProperty.ValueKind);
Assert.Equal(100, usersProperty.GetArrayLength());
}
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
// Verify response can be parsed back to JSON
var parsedResponse = JsonSerializer.Deserialize<JsonElement>(responseContent);
Assert.True(parsedResponse.TryGetProperty("Users", out var usersProperty));
Assert.Equal(JsonValueKind.Array, usersProperty.ValueKind);
Assert.Equal(100, usersProperty.GetArrayLength());
}
[Fact]
public async Task HttpEndpoint_SpecialCharactersInRoute_HandlesCorrectly()
{
@ -174,4 +130,5 @@ public class HttpEndpointTests(App app) : AppComponentTest(app)
Assert.Contains("user@domain.com", response);
Assert.Contains("order-with-special-chars!@#$%", response);
}
}

View file

@ -0,0 +1,20 @@
using Elsa.Extensions;
namespace Elsa.Workflows.ComponentTests.Scenarios.Extensions;
public class StringExtensionsTests
{
[Theory]
[InlineData("/api/users", "/api/users")]
[InlineData("api/users", "/api/users")]
[InlineData("/api/users/", "/api/users")]
[InlineData("api/users/", "/api/users")]
public void NormalizeRoute_VariousInputs_ReturnsNormalizedPath(string inputPath, string expectedPath)
{
// Act
var normalizedPath = inputPath.NormalizeRoute();
// Assert
Assert.Equal(expectedPath, normalizedPath);
}
}