Implement portrait prompt API and UI enhancements. Added a new endpoint to fetch portrait prompts, updated the client to handle prompt display, and improved localization for prompt-related text. Enhanced styling for prompt elements in the UI.
ci / server (push) Failing after 3m40s
ci / client (push) Failing after 15s

This commit is contained in:
Leonid Pershin
2026-08-20 05:27:01 +03:00
parent a214378c6e
commit 3fa6ce95df
13 changed files with 401 additions and 34 deletions
@@ -68,6 +68,26 @@ public class PortraitApiTests(AppHostFixture fixture)
Assert.Equal("swarmui-not-configured", await SchoolApiTests.ProblemCodeAsync(response));
}
[Fact]
public async Task GetPortraitPrompt_ReturnsBuiltPositiveAndNegative()
{
using var client = fixture.App.CreateHttpClient("server");
await SchoolApiTests.ResetAsync(client);
var school = await SchoolApiTests.CreateAsync(client, "Промпт", Start);
var personId = await FirstPersonIdAsync(client, school.Id);
using var response = await client.GetAsync(
$"/api/schools/{school.Id}/people/{Uri.EscapeDataString(personId)}/portrait/prompt?kind=avatar",
TestContext.Current.CancellationToken);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
var payload = await response.Content.ReadFromJsonAsync<PortraitPromptPayload>(TestContext.Current.CancellationToken);
Assert.NotNull(payload);
Assert.Equal("avatar", payload!.Kind);
Assert.Contains("age", payload.Positive, StringComparison.OrdinalIgnoreCase);
Assert.False(string.IsNullOrWhiteSpace(payload.Negative));
}
[Fact]
public async Task DeleteSchool_RemovesPortraitDirectory()
{
@@ -114,5 +134,7 @@ public class PortraitApiTests(AppHostFixture fixture)
bool HasFullBody,
string? CustomPortraitPrompt);
private sealed record PortraitPromptPayload(string Kind, string Positive, string Negative, string? PromptExtra);
private sealed record SavesDirectoryResponse(string Path);
}