using System.Net; using System.Net.Http.Json; using System.Text.Json; using System.Threading.Tasks; using StellaOps.Signals.Models; using StellaOps.Signals.Tests.TestInfrastructure; using Xunit; using StellaOps.TestKit; namespace StellaOps.Signals.Tests; public class SignalsApiTests : IClassFixture { private readonly SignalsTestFactory factory; public SignalsApiTests(SignalsTestFactory factory) { this.factory = factory; } [Trait("Category", TestCategories.Unit)] [Fact] public async Task Callgraph_Ingest_Response_Includes_Extended_Fields() { using var client = factory.CreateClient(); client.DefaultRequestHeaders.Add("X-Scopes", "signals:write signals:read"); var req = CallgraphIngestionTests.CreateRequest("java", component: "api-test", version: "1.2.3"); var res = await client.PostAsJsonAsync("/signals/callgraphs", req); Assert.Equal(HttpStatusCode.Accepted, res.StatusCode); var body = await res.Content.ReadFromJsonAsync(); Assert.NotNull(body); Assert.False(string.IsNullOrWhiteSpace(body!.SchemaVersion)); Assert.True(body.NodeCount >= 0); Assert.True(body.EdgeCount >= 0); Assert.True(body.RootCount >= 0); // Fetch manifest and ensure schemaVersion matches response var manifestRes = await client.GetAsync($"/signals/callgraphs/{body.CallgraphId}/manifest"); Assert.Equal(HttpStatusCode.OK, manifestRes.StatusCode); var manifest = await manifestRes.Content.ReadFromJsonAsync(new JsonSerializerOptions(JsonSerializerDefaults.Web)); Assert.NotNull(manifest); Assert.Equal(body.SchemaVersion, manifest!.SchemaVersion); } }