Add unit tests and implementations for MongoDB index models and OpenAPI metadata
- Implemented `MongoIndexModelTests` to verify index models for various stores. - Created `OpenApiMetadataFactory` with methods to generate OpenAPI metadata. - Added tests for `OpenApiMetadataFactory` to ensure expected defaults and URL overrides. - Introduced `ObserverSurfaceSecrets` and `WebhookSurfaceSecrets` for managing secrets. - Developed `RuntimeSurfaceFsClient` and `WebhookSurfaceFsClient` for manifest retrieval. - Added dependency injection tests for `SurfaceEnvironmentRegistration` in both Observer and Webhook contexts. - Implemented tests for secret resolution in `ObserverSurfaceSecretsTests` and `WebhookSurfaceSecretsTests`. - Created `EnsureLinkNotMergeCollectionsMigrationTests` to validate MongoDB migration logic. - Added project files for MongoDB tests and NuGet package mirroring.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
using MongoDB.Driver;
|
||||
using StellaOps.TaskRunner.Infrastructure.Execution;
|
||||
using Xunit;
|
||||
|
||||
namespace StellaOps.TaskRunner.Tests;
|
||||
|
||||
public sealed class MongoIndexModelTests
|
||||
{
|
||||
[Fact]
|
||||
public void StateStore_indexes_match_contract()
|
||||
{
|
||||
var models = MongoPackRunStateStore.GetIndexModels().ToArray();
|
||||
|
||||
Assert.Collection(models,
|
||||
model => Assert.Equal("pack_runs_updatedAt_desc", model.Options.Name),
|
||||
model => Assert.Equal("pack_runs_tenant_updatedAt_desc", model.Options.Name));
|
||||
|
||||
Assert.True(models[1].Options.Sparse ?? false);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void LogStore_indexes_match_contract()
|
||||
{
|
||||
var models = MongoPackRunLogStore.GetIndexModels().ToArray();
|
||||
|
||||
Assert.Collection(models,
|
||||
model =>
|
||||
{
|
||||
Assert.Equal("pack_run_logs_run_sequence", model.Options.Name);
|
||||
Assert.True(model.Options.Unique ?? false);
|
||||
},
|
||||
model => Assert.Equal("pack_run_logs_run_timestamp", model.Options.Name));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ArtifactStore_indexes_match_contract()
|
||||
{
|
||||
var models = MongoPackRunArtifactUploader.GetIndexModels().ToArray();
|
||||
|
||||
Assert.Collection(models,
|
||||
model =>
|
||||
{
|
||||
Assert.Equal("pack_artifacts_run_name", model.Options.Name);
|
||||
Assert.True(model.Options.Unique ?? false);
|
||||
},
|
||||
model => Assert.Equal("pack_artifacts_run", model.Options.Name));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ApprovalStore_indexes_match_contract()
|
||||
{
|
||||
var models = MongoPackRunApprovalStore.GetIndexModels().ToArray();
|
||||
|
||||
Assert.Collection(models,
|
||||
model =>
|
||||
{
|
||||
Assert.Equal("pack_run_approvals_run_approval", model.Options.Name);
|
||||
Assert.True(model.Options.Unique ?? false);
|
||||
},
|
||||
model => Assert.Equal("pack_run_approvals_run_status", model.Options.Name));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
using StellaOps.TaskRunner.WebService;
|
||||
|
||||
namespace StellaOps.TaskRunner.Tests;
|
||||
|
||||
public sealed class OpenApiMetadataFactoryTests
|
||||
{
|
||||
[Fact]
|
||||
public void Create_ProducesExpectedDefaults()
|
||||
{
|
||||
var metadata = OpenApiMetadataFactory.Create();
|
||||
|
||||
Assert.Equal("/openapi", metadata.Url);
|
||||
Assert.False(string.IsNullOrWhiteSpace(metadata.Build));
|
||||
Assert.StartsWith("W/\"", metadata.ETag);
|
||||
Assert.EndsWith("\"", metadata.ETag);
|
||||
Assert.Equal(64, metadata.Signature.Length);
|
||||
Assert.True(metadata.Signature.All(c => char.IsDigit(c) || (c >= 'a' && c <= 'f')));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Create_AllowsOverrideUrl()
|
||||
{
|
||||
var metadata = OpenApiMetadataFactory.Create("/docs/openapi.json");
|
||||
|
||||
Assert.Equal("/docs/openapi.json", metadata.Url);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace StellaOps.TaskRunner.WebService;
|
||||
|
||||
internal static class OpenApiMetadataFactory
|
||||
{
|
||||
internal static Type ResponseType => typeof(OpenApiMetadata);
|
||||
|
||||
public static OpenApiMetadata Create(string? specUrl = null)
|
||||
{
|
||||
var assembly = Assembly.GetExecutingAssembly().GetName();
|
||||
var version = assembly.Version?.ToString() ?? "0.0.0";
|
||||
var url = string.IsNullOrWhiteSpace(specUrl) ? "/openapi" : specUrl;
|
||||
var etag = CreateWeakEtag(version);
|
||||
var signature = ComputeSignature(url, version);
|
||||
|
||||
return new OpenApiMetadata(url, version, etag, signature);
|
||||
}
|
||||
|
||||
private static string CreateWeakEtag(string input)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(input))
|
||||
{
|
||||
input = "0.0.0";
|
||||
}
|
||||
|
||||
return $"W/\"{input}\"";
|
||||
}
|
||||
|
||||
private static string ComputeSignature(string url, string build)
|
||||
{
|
||||
var data = System.Text.Encoding.UTF8.GetBytes(url + build);
|
||||
var hash = System.Security.Cryptography.SHA256.HashData(data);
|
||||
return Convert.ToHexString(hash).ToLowerInvariant();
|
||||
}
|
||||
|
||||
internal sealed record OpenApiMetadata(string Url, string Build, string ETag, string Signature);
|
||||
}
|
||||
Reference in New Issue
Block a user