up
Some checks failed
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Policy Simulation / policy-simulate (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
Some checks failed
Concelier Attestation Tests / attestation-tests (push) Has been cancelled
Policy Simulation / policy-simulate (push) Has been cancelled
AOC Guard CI / aoc-guard (push) Has been cancelled
AOC Guard CI / aoc-verify (push) Has been cancelled
Signals CI & Image / signals-ci (push) Has been cancelled
Signals Reachability Scoring & Events / reachability-smoke (push) Has been cancelled
Signals Reachability Scoring & Events / sign-and-upload (push) Has been cancelled
Docs CI / lint-and-preview (push) Has been cancelled
Policy Lint & Smoke / policy-lint (push) Has been cancelled
Scanner Analyzers / Discover Analyzers (push) Has been cancelled
Scanner Analyzers / Build Analyzers (push) Has been cancelled
Scanner Analyzers / Test Language Analyzers (push) Has been cancelled
Scanner Analyzers / Validate Test Fixtures (push) Has been cancelled
Scanner Analyzers / Verify Deterministic Output (push) Has been cancelled
This commit is contained in:
@@ -41,7 +41,7 @@ public sealed class TenantContextTests
|
||||
public void TenantContext_ForTenant_ThrowsOnNullTenantId()
|
||||
{
|
||||
// Act & Assert
|
||||
Assert.Throws<ArgumentException>(() => TenantContext.ForTenant(null!));
|
||||
Assert.Throws<ArgumentNullException>(() => TenantContext.ForTenant(null!));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -156,9 +156,15 @@ public sealed class TenantContextMiddlewareTests
|
||||
public async Task Middleware_WithValidTenantHeader_SetsTenantContext()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var nextCalled = false;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => { nextCalled = true; return Task.CompletedTask; },
|
||||
_ =>
|
||||
{
|
||||
nextCalled = true;
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -169,16 +175,22 @@ public sealed class TenantContextMiddlewareTests
|
||||
|
||||
// Assert
|
||||
Assert.True(nextCalled);
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal("tenant-123", _tenantAccessor.TenantContext.TenantId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal("tenant-123", capturedContext!.TenantId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Middleware_WithTenantAndProjectHeaders_SetsBothInContext()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -188,9 +200,10 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal("tenant-123", _tenantAccessor.TenantContext.TenantId);
|
||||
Assert.Equal("project-456", _tenantAccessor.TenantContext.ProjectId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal("tenant-123", capturedContext!.TenantId);
|
||||
Assert.Equal("project-456", capturedContext.ProjectId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -218,6 +231,7 @@ public sealed class TenantContextMiddlewareTests
|
||||
public async Task Middleware_MissingTenantHeaderNotRequired_UsesDefaultTenant()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var optionsNotRequired = new TenantContextOptions
|
||||
{
|
||||
Enabled = true,
|
||||
@@ -225,7 +239,11 @@ public sealed class TenantContextMiddlewareTests
|
||||
};
|
||||
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(optionsNotRequired),
|
||||
_logger);
|
||||
|
||||
@@ -235,8 +253,9 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal(TenantContextConstants.DefaultTenantId, _tenantAccessor.TenantContext.TenantId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal(TenantContextConstants.DefaultTenantId, capturedContext!.TenantId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
@@ -286,8 +305,13 @@ public sealed class TenantContextMiddlewareTests
|
||||
public async Task Middleware_ValidTenantIdFormat_Passes(string tenantId)
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -297,8 +321,9 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal(tenantId, _tenantAccessor.TenantContext.TenantId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal(tenantId, capturedContext!.TenantId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Theory]
|
||||
@@ -351,8 +376,13 @@ public sealed class TenantContextMiddlewareTests
|
||||
public async Task Middleware_ValidProjectIdFormat_Passes(string projectId)
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -362,16 +392,22 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal(projectId, _tenantAccessor.TenantContext.ProjectId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal(projectId, capturedContext!.ProjectId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Middleware_WithWriteScope_SetsCanWriteTrue()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -387,16 +423,22 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.True(_tenantAccessor.TenantContext.CanWrite);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.True(capturedContext!.CanWrite);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Middleware_WithoutWriteScope_SetsCanWriteFalse()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -412,16 +454,22 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.False(_tenantAccessor.TenantContext.CanWrite);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.False(capturedContext!.CanWrite);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Middleware_ExtractsActorIdFromSubClaim()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -433,16 +481,22 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal("user-id-123", _tenantAccessor.TenantContext.ActorId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal("user-id-123", capturedContext!.ActorId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Middleware_ExtractsActorIdFromHeader()
|
||||
{
|
||||
// Arrange
|
||||
TenantContext? capturedContext = null;
|
||||
var middleware = new TenantContextMiddleware(
|
||||
_ => Task.CompletedTask,
|
||||
_ =>
|
||||
{
|
||||
capturedContext = _tenantAccessor.TenantContext;
|
||||
return Task.CompletedTask;
|
||||
},
|
||||
MsOptions.Options.Create(_options),
|
||||
_logger);
|
||||
|
||||
@@ -453,8 +507,9 @@ public sealed class TenantContextMiddlewareTests
|
||||
await middleware.InvokeAsync(context, _tenantAccessor);
|
||||
|
||||
// Assert
|
||||
Assert.NotNull(_tenantAccessor.TenantContext);
|
||||
Assert.Equal("service-account-123", _tenantAccessor.TenantContext.ActorId);
|
||||
Assert.NotNull(capturedContext);
|
||||
Assert.Equal("service-account-123", capturedContext!.ActorId);
|
||||
Assert.Null(_tenantAccessor.TenantContext);
|
||||
}
|
||||
|
||||
private static DefaultHttpContext CreateHttpContext(
|
||||
|
||||
Reference in New Issue
Block a user