Enhance activation request validation and documentation
CI / Backend (build + test) (push) Failing after 1m37s
CI / Frontend (lint + typecheck + build) (push) Successful in 44s

- Updated the `RequestActivationCommandValidator` to require a non-empty comment, ensuring that users provide necessary identification information.
- Modified integration tests to validate the new requirement for a comment, including a test for handling empty comments.
- Updated API documentation to reflect that the comment is now mandatory and clarified its purpose.
- Enhanced frontend components to enforce comment requirements and provide user guidance on the comment's importance.
This commit is contained in:
Leonid Pershin
2026-07-30 03:23:03 +03:00
parent a8358b930d
commit cc7e2a7f8f
8 changed files with 45 additions and 16 deletions
@@ -6,6 +6,7 @@ public sealed class RequestActivationCommandValidator : AbstractValidator<Reques
{
public RequestActivationCommandValidator()
{
RuleFor(x => x.Comment).MaximumLength(500);
// Комментарий обязателен: по нему админ понимает, кто заявитель и откуда.
RuleFor(x => x.Comment).NotEmpty().MaximumLength(500);
}
}
@@ -56,7 +56,7 @@ public class ActivationFlowTests(PnvPanelWebApplicationFactory factory)
var requestResponse = await userClient.PostJsonAsync(
"/api/activation/request",
new { comment = (string?)null }
new { comment = "Erin, a friend of the admin" }
);
var request = await requestResponse.ReadAsAsync<ActivationRequestResponse>();
@@ -85,14 +85,29 @@ public class ActivationFlowTests(PnvPanelWebApplicationFactory factory)
var first = await userClient.PostJsonAsync(
"/api/activation/request",
new { comment = (string?)null }
new { comment = "Frank, a colleague of the admin" }
);
Assert.Equal(HttpStatusCode.OK, first.StatusCode);
var second = await userClient.PostJsonAsync(
"/api/activation/request",
new { comment = (string?)null }
new { comment = "Frank, a colleague of the admin" }
);
Assert.Equal(HttpStatusCode.Conflict, second.StatusCode);
}
[Fact]
public async Task Request_WhenCommentEmpty_ReturnsBadRequest()
{
using var userClient = factory.CreateClient();
var userName = $"gina_{Guid.NewGuid():N}"[..20];
var (_, userToken) = await RegisterAndLoginAsync(userClient, userName, "P@ssw0rd123");
userClient.UseBearerToken(userToken);
var response = await userClient.PostJsonAsync(
"/api/activation/request",
new { comment = (string?)null }
);
Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
}
}