Files
nexus/backend-tests/BrowserTelemetryControllerTests.cs
AzuTear f5552218bc
CI - Build & Test / Backend (.NET) (push) Successful in 42s
CI - Build & Test / Frontend (Vue/TS) (push) Successful in 2m46s
CI - Build & Test / Security Check (push) Successful in 3s
CI - Build & Test / Deploy Nexus (push) Successful in 56s
feat: ship agent-first mission control v0.2.57
2026-07-31 22:39:47 +02:00

108 lines
3.2 KiB
C#

using System.Diagnostics.Metrics;
using Microsoft.AspNetCore.Http;
using Nexus.Api.Controllers;
using Nexus.Api.Models;
using Nexus.Api.Observability;
using Xunit;
namespace Nexus.Api.Tests;
public sealed class BrowserTelemetryControllerTests
{
[Fact]
public void Record_AcceptsAllowlistedContentFreeMetric()
{
var controller = new BrowserTelemetryController();
var result = controller.Record(new BrowserMetricRequest(
"board_content_visible",
314.2,
"custom",
"Task Board",
"test",
"spa",
"live",
null));
Assert.Equal(StatusCodes.Status204NoContent, ResultStatusCode(result));
}
[Fact]
public void Record_RejectsUnknownMetricAndInvalidValue()
{
var controller = new BrowserTelemetryController();
Assert.Equal(
StatusCodes.Status400BadRequest,
ResultStatusCode(controller.Record(new BrowserMetricRequest(
"task-content",
1,
"custom",
"Tasks",
"test",
"spa",
"live",
null))));
Assert.Equal(
StatusCodes.Status400BadRequest,
ResultStatusCode(controller.Record(new BrowserMetricRequest(
"LCP",
double.PositiveInfinity,
"good",
"Tasks",
"test",
"navigate",
"unknown",
null))));
}
[Fact]
public void Record_RoutesClsToUnitlessScoreAndDurationsToMilliseconds()
{
var measurements = new List<(string Name, string? Unit, double Value)>();
using var listener = new MeterListener();
listener.InstrumentPublished = (instrument, activeListener) =>
{
if (instrument.Meter.Name == NexusTelemetry.SourceName &&
instrument.Name is "nexus.browser.score" or "nexus.browser.duration")
{
activeListener.EnableMeasurementEvents(instrument);
}
};
listener.SetMeasurementEventCallback<double>((instrument, value, _, _) =>
measurements.Add((instrument.Name, instrument.Unit, value)));
listener.Start();
var controller = new BrowserTelemetryController();
controller.Record(new BrowserMetricRequest(
"CLS",
0.123456,
"good",
"Dashboard",
"test",
"navigate",
"live",
null));
controller.Record(new BrowserMetricRequest(
"LCP",
1234.5678,
"good",
"Dashboard",
"test",
"navigate",
"live",
null));
Assert.Contains(
measurements,
item => item is ("nexus.browser.score", "1", 0.123456));
Assert.Contains(
measurements,
item => item is ("nexus.browser.duration", "ms", 1234.5678));
}
private static int? ResultStatusCode(IResult result)
=> result is IStatusCodeHttpResult statusCodeResult
? statusCodeResult.StatusCode
: null;
}