Fix build and code structure improvements. New but essential UI functionality. CI improvements. Documentation improvements. AI module improvements.

This commit is contained in:
StellaOps Bot
2025-12-26 21:54:17 +02:00
parent 335ff7da16
commit c2b9cd8d1f
3717 changed files with 264714 additions and 48202 deletions

View File

@@ -13,7 +13,8 @@ using Microsoft.IdentityModel.Tokens;
using Microsoft.Extensions.DependencyInjection;
using StellaOps.Notify.Engine;
using StellaOps.Notify.Models;
using Xunit;
using Xunit.v3;
using StellaOps.TestKit;
namespace StellaOps.Notify.WebService.Tests;
@@ -76,9 +77,9 @@ public sealed class CrudEndpointsTests : IClassFixture<WebApplicationFactory<Pro
handler.ValidateToken(token, parameters, out _);
}
public Task InitializeAsync() => Task.CompletedTask;
public ValueTask InitializeAsync() => ValueTask.CompletedTask;
public Task DisposeAsync() => Task.CompletedTask;
public ValueTask DisposeAsync() => ValueTask.CompletedTask;
[Trait("Category", TestCategories.Unit)]
[Fact]
@@ -188,7 +189,7 @@ public sealed class CrudEndpointsTests : IClassFixture<WebApplicationFactory<Pro
""")!;
var acquireResponse = await PostAsync(client, "/api/v1/notify/locks/acquire", acquirePayload);
var acquireContent = JsonNode.Parse(await acquireResponse.Content.ReadAsStringAsync());
var acquireContent = JsonNode.Parse(await acquireResponse.Content.ReadAsStringAsync(CancellationToken.None));
Assert.True(acquireContent? ["acquired"]?.GetValue<bool>());
await PostAsync(client, "/api/v1/notify/locks/release", JsonNode.Parse("""
@@ -199,7 +200,7 @@ public sealed class CrudEndpointsTests : IClassFixture<WebApplicationFactory<Pro
""")!);
var secondAcquire = await PostAsync(client, "/api/v1/notify/locks/acquire", acquirePayload);
var secondContent = JsonNode.Parse(await secondAcquire.Content.ReadAsStringAsync());
var secondContent = JsonNode.Parse(await secondAcquire.Content.ReadAsStringAsync(CancellationToken.None));
Assert.True(secondContent? ["acquired"]?.GetValue<bool>());
}
@@ -226,7 +227,7 @@ public sealed class CrudEndpointsTests : IClassFixture<WebApplicationFactory<Pro
var response = await PostAsync(client, "/api/v1/notify/channels/channel-test/test", payload);
Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
var json = JsonNode.Parse(await response.Content.ReadAsStringAsync())!.AsObject();
var json = JsonNode.Parse(await response.Content.ReadAsStringAsync(CancellationToken.None))!.AsObject();
Assert.Equal("tenant-web", json["tenantId"]?.GetValue<string>());
Assert.Equal("channel-test", json["channelId"]?.GetValue<string>());
Assert.NotNull(json["queuedAt"]);
@@ -298,7 +299,6 @@ public sealed class CrudEndpointsTests : IClassFixture<WebApplicationFactory<Pro
builder.ConfigureServices(services =>
{
services.AddSingleton<INotifyChannelTestProvider, FakeSlackTestProvider>();
using StellaOps.TestKit;
});
});
@@ -321,7 +321,7 @@ using StellaOps.TestKit;
var response = await PostAsync(client, "/api/v1/notify/channels/channel-provider/test", payload);
Assert.Equal(HttpStatusCode.Accepted, response.StatusCode);
var json = JsonNode.Parse(await response.Content.ReadAsStringAsync())!.AsObject();
var json = JsonNode.Parse(await response.Content.ReadAsStringAsync(CancellationToken.None))!.AsObject();
var preview = json["preview"]?.AsObject();
Assert.NotNull(preview);
Assert.Equal("#ops-alerts", preview?["target"]?.GetValue<string>());
@@ -379,7 +379,7 @@ using StellaOps.TestKit;
{
var response = await SendAsync(client, HttpMethod.Get, path, useOperatorToken);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
var content = await response.Content.ReadAsStringAsync(CancellationToken.None);
return JsonNode.Parse(content) as JsonArray;
}
@@ -387,7 +387,7 @@ using StellaOps.TestKit;
{
var response = await SendAsync(client, HttpMethod.Get, path, useOperatorToken);
response.EnsureSuccessStatusCode();
var content = await response.Content.ReadAsStringAsync();
var content = await response.Content.ReadAsStringAsync(CancellationToken.None);
return JsonNode.Parse(content) as JsonObject;
}
@@ -401,7 +401,7 @@ using StellaOps.TestKit;
var response = await SendAsync(client, request, useOperatorToken);
if (!response.IsSuccessStatusCode)
{
var body = await response.Content.ReadAsStringAsync();
var body = await response.Content.ReadAsStringAsync(CancellationToken.None);
var authHeader = response.Headers.WwwAuthenticate.ToString();
throw new InvalidOperationException($"Request to {path} failed with {(int)response.StatusCode} {response.StatusCode}: {body} (WWW-Authenticate: {authHeader})");
}
@@ -425,7 +425,7 @@ using StellaOps.TestKit;
{
request.Headers.Add("X-StellaOps-Tenant", "tenant-web");
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", useOperatorToken ? _operatorToken : _viewerToken);
return client.SendAsync(request);
return client.SendAsync(request, CancellationToken.None);
}
private static string CreateToken(params string[] scopes)